gcc.git
5 years agoRestrict a VSX extract to TARGET_POWERPC64 (PR88213)
Segher Boessenkool [Wed, 19 Dec 2018 13:54:08 +0000 (14:54 +0100)]
Restrict a VSX extract to TARGET_POWERPC64 (PR88213)

This pattern optimises a scalar extract from a vector loaded from
memory to be just a scalar load from memory.  But to do a 64-bit
integer load you need 64-bit integer registers, which needs
TARGET_POWERPC64.

PR target/88213
* config/rs6000/vsx.md (*vsx_extract_<P:mode>_<VSX_D:mode>_load):
Require TARGET_POWERPC64.

From-SVN: r267263

5 years agore PR tree-optimization/88533 (Higher performance penalty of array-bounds checking...
Richard Biener [Wed, 19 Dec 2018 11:10:08 +0000 (11:10 +0000)]
re PR tree-optimization/88533 (Higher performance penalty of array-bounds checking for sparse-matrix vector multiply)

2018-12-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/88533
Revert
2018-04-30  Richard Biener  <rguenther@suse.de>

PR tree-optimization/28364
PR tree-optimization/85275
* tree-ssa-loop-ch.c (ch_base::copy_headers): Stop after
copying first exit test.

* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust.

* tree-ssa-loop-ch.c: Include tree-phinodes.h and
ssa-iterators.h.
(should_duplicate_loop_header_p): Track whether stmt compute
loop invariants or values based on IVs.  Apart from the
original loop header only duplicate blocks with exit tests
that are based on IVs or invariants.

* gcc.dg/tree-ssa/copy-headers-6.c: New testcase.
* gcc.dg/tree-ssa/copy-headers-7.c: Likewise.
* gcc.dg/tree-ssa/ivopt_mult_1.c: Un-XFAIL.
* gcc.dg/tree-ssa/ivopt_mult_2.c: Likewise.

From-SVN: r267262

5 years ago[nvptx] Use MAX, MIN, ROUND_UP macros
Tom de Vries [Wed, 19 Dec 2018 10:17:31 +0000 (10:17 +0000)]
[nvptx] Use MAX, MIN, ROUND_UP macros

Use MAX, MIN, and ROUND_UP macros to simplify code.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_gen_shared_bcast, shared_prop_gen)
(nvptx_goacc_expand_accel_var): Use MAX and ROUND_UP.
(nvptx_assemble_value, nvptx_output_skip): Use MIN.
(nvptx_shared_propagate, nvptx_single, nvptx_expand_shared_addr): Use
MAX.

From-SVN: r267261

5 years ago[nvptx] Make nvptx state propagation function names more generic
Tom de Vries [Wed, 19 Dec 2018 10:17:21 +0000 (10:17 +0000)]
[nvptx] Make nvptx state propagation function names more generic

Rename state propagation functions to avoid worker/vector terminology.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_gen_wcast): Rename as
nvptx_gen_warp_bcast.
(nvptx_gen_wcast): Rename to nvptx_gen_shared_bcast, add bool
vector argument, and update call to nvptx_gen_shared_bcast.
(propagator_fn): Add bool argument.
(nvptx_propagate): New bool argument, pass bool argument to fn.
(vprop_gen): Rename to warp_prop_gen, update call to
nvptx_gen_warp_bcast.
(nvptx_vpropagate): Rename to nvptx_warp_propagate, update call to
nvptx_propagate.
(wprop_gen): Rename to shared_prop_gen, update call to
nvptx_gen_shared_bcast.
(nvptx_wpropagate): Rename to nvptx_shared_propagate, update call
to nvptx_propagate.
(nvptx_wsync): Rename to nvptx_cta_sync.
(nvptx_single): Update calls to nvptx_gen_warp_bcast,
nvptx_gen_shared_bcast and nvptx_cta_sync.
(nvptx_process_pars): Likewise.
(write_worker_buffer): Rename as write_shared_buffer.
(nvptx_file_end): Update calls to write_shared_buffer.
(nvptx_expand_worker_addr): Rename as nvptx_expand_shared_addr.
(nvptx_expand_builtin): Update call to nvptx_expand_shared_addr.
(nvptx_get_worker_red_addr): Rename as nvptx_get_shared_red_addr.
(nvptx_goacc_reduction_setup): Update call to
nvptx_get_shared_red_addr.
(nvptx_goacc_reduction_fini): Likewise.
(nvptx_goacc_reduction_teardown): Likewise.

From-SVN: r267260

5 years ago[nvptx] Rename worker_bcast variables to oacc_bcast
Tom de Vries [Wed, 19 Dec 2018 10:17:11 +0000 (10:17 +0000)]
[nvptx] Rename worker_bcast variables to oacc_bcast

Rename worker_bcast variables to oacc_bcast, avoiding worker terminology.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (worker_bcast_size): Rename as
oacc_bcast_size.
(worker_bcast_align): Rename as oacc_bcast_align.
(worker_bcast_sym): Rename as oacc_bcast_sym.
(nvptx_option_override): Update usage of oacc_bcast_*.
(struct wcast_data_t): Rename as broadcast_data_t.
(nvptx_gen_wcast): Update type of data argument and usage of
oacc_bcast_align.
(wprop_gen): Update type of data_ and usage of oacc_bcast_align.
(nvptx_wpropagate): Update type of data and usage of
oacc_bcast_{sym,size}.
(nvptx_single): Update type of data and usage of oacc_bcast_size.
(nvptx_file_end): Update usage of oacc_bcast_{sym,align,size}.

From-SVN: r267259

5 years ago[nvptx] Generalize bar.sync instruction
Tom de Vries [Wed, 19 Dec 2018 10:17:01 +0000 (10:17 +0000)]
[nvptx] Generalize bar.sync instruction

Allow the logical barrier operand of nvptx_barsync to be a register, and add a
thread count operand.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.md (nvptx_barsync): Add and handle operand.
* config/nvptx/nvptx.c (nvptx_wsync): Update call to gen_nvptx_barsync.

From-SVN: r267258

5 years ago[nvptx] Only use one logical barrier resource
Tom de Vries [Wed, 19 Dec 2018 10:16:51 +0000 (10:16 +0000)]
[nvptx] Only use one logical barrier resource

For openacc loops, we generate this style of code:
...
        @%r41   bra.uni $L5;
        @%r40   bra     $L6;
                mov.u64 %r32, %ar0;
                cvta.shared.u64 %r39, __worker_bcast;
                st.u64  [%r39], %r32;
$L6:
$L5:
                bar.sync        0;
        @%r40   bra     $L4;
                cvta.shared.u64 %r38, __worker_bcast;
                ld.u64  %r32, [%r38];
                ...
$L4:
                bar.sync        1;
...

The first barrier is there to ensure that no thread reads the broadcast buffer
before it's written.  The second barrier is there to ensure that no thread
overwrites the broadcast buffer before all threads have read it (as well as
implementing the obligatory synchronization after a worker loop).

We've been using the logical barrier resources '0' and '1' for these two
barriers, but there's no reason why we can't use the same one.

Use logical barrier resource '0' for both barriers, making the openacc
implementation claim less resources.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_single): Always pass false to
nvptx_wsync.
(nvptx_process_pars): Likewise.

From-SVN: r267257

5 years ago[nvptx] Use TARGET_SET_CURRENT_FUNCTION
Tom de Vries [Wed, 19 Dec 2018 10:16:41 +0000 (10:16 +0000)]
[nvptx] Use TARGET_SET_CURRENT_FUNCTION

Implement TARGET_SET_CURRENT_FUNCTION for nvptx.  This gives us a place to
add initialization or reset actions that need to be executed on a per-function
basis.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_previous_fndecl): Declare.
(nvptx_set_current_function): New function.
(TARGET_SET_CURRENT_FUNCTION): Define.

From-SVN: r267256

5 years ago[aarch64] Correct architecture for tsv110.
Shaokun Zhang [Wed, 19 Dec 2018 10:08:50 +0000 (10:08 +0000)]
[aarch64] Correct architecture for tsv110.

For HiSilicon's tsv110 cpu core, it supports some v8_4A features, but
some mandatory features are not implemented.

2018-12-19  Shaokun Zhang  <zhangshaokun@hisilicon.com>

* config/aarch64/aarch64-cores.def (tsv110): Fix architecture.  This
part is really Armv8.2 with some permitted Armv8.4 extensions.

From-SVN: r267255

5 years agore PR target/88541 (VPCLMULQDQ 256-bit inline function unavailable with optimization...
Jakub Jelinek [Wed, 19 Dec 2018 08:31:16 +0000 (09:31 +0100)]
re PR target/88541 (VPCLMULQDQ 256-bit inline function unavailable with optimization but without enabled AVX512VL support)

PR target/88541
* config/i386/vpclmulqdqintrin.h (_mm256_clmulepi64_epi128): Enable
for -mavx -mvpclmulqdq rather than just for -mavx512vl -mvpclmulqdq.

* gcc.target/i386/avx-vpclmulqdq-1.c: New test.

From-SVN: r267254

5 years agore PR c++/87934 (struct with NSDMI of enum makes initialization a non-constant expres...
Jakub Jelinek [Wed, 19 Dec 2018 08:11:40 +0000 (09:11 +0100)]
re PR c++/87934 (struct with NSDMI of enum makes initialization a non-constant expression)

PR c++/87934
* constexpr.c (cxx_eval_constant_expression) <case CONSTRUCTOR>: Do
re-process TREE_CONSTANT CONSTRUCTORs if they aren't reduced constant
expressions.

* g++.dg/cpp0x/constexpr-87934.C: New test.

From-SVN: r267253

5 years ago[PR86153] simplify more overflow tests in VRP
Alexandre Oliva [Wed, 19 Dec 2018 06:51:41 +0000 (06:51 +0000)]
[PR86153] simplify more overflow tests in VRP

PR 86153 was originally filed when changes to the C++11's
implementation of vector resize(size_type) limited inlining that were
required for testsuite/g++.dg/pr83239.C to verify that we did not
issue an undesired warning.

That was worked by increasing the limit for inlining, but that in turn
caused the C++98 implementation of vector resize, that is
significantly different, to also be fully inlined, and that happened
to issue the very warnings the test was meant to verify we did NOT
issue.

The reason we issued the warnings was that we failed to optimize out
some parts of _M_fill_insert, used by the C++98 version of vector
resize, although the call of _M_fill_insert was guarded by a test that
could never pass: test testcase only calls resize when the vector size
is >= 3, to decrement the size by two.  The limitation we hit in VRP
was that the compared values could pass as an overflow test, if the
vector size was 0 or 1 (we knew it wasn't), but even with dynamic
ranges we failed to decide that the test result could be determined at
compile time, even though after the test we introduced ASSERT_EXPRs
that required a condition known to be false from earlier ones.

I pondered turning ASSERT_EXPRs that show impossible conditions into
traps, to enable subsequent instructions to be optimized, but I ended
up finding an earlier spot in which an overflow test that would have
introduced the impossible ASSERT_EXPR can have its result deduced from
earlier known ranges and resolved to the other path.

Although such overflow tests could be uniformly simplified to compares
against a constant, the original code would only perform such
simplifications when the test could be resolved to an equality test
against zero.  I've thus avoided introducing compares against other
constants, and instead added code that will only simplify overflow
tests that weren't simplified before when the condition can be
evaluated at compile time.

for  gcc/ChangeLog

PR testsuite/86153
PR middle-end/83239
* vr-values.c
(vr_values::vrp_evaluate_conditional_warnv_with_ops): Extend
simplification of overflow tests to cover cases in which we
can determine the result of the comparison.

for  gcc/testsuite/ChangeLog

PR testsuite/86153
PR middle-end/83239
* gcc.dg/vrp-overflow-1.c: New.

From-SVN: r267252

5 years ago[PR87012] canonicalize ref type for tmpl arg
Alexandre Oliva [Wed, 19 Dec 2018 06:51:30 +0000 (06:51 +0000)]
[PR87012] canonicalize ref type for tmpl arg

When binding an object to a template parameter of reference type, we
take the address of the object and dereference that address.  The type
of the address may still carry (template) typedefs, but
verify_unstripped_args_1 rejects such typedefs other than in the top
level of template arguments.

Canonicalizing the type we want to convert to right after any
substitutions or deductions avoids that issue.

for  gcc/cp/ChangeLog

PR c++/87012
* pt.c (convert_template_argument): Canonicalize type after
tsubst/deduce.

for  gcc/testsuite/ChangeLog

PR c++/87012
* g++.dg/cpp0x/pr87012.C: New.

From-SVN: r267251

5 years ago[PR c++/88146] do not crash synthesizing inherited ctor(...)
Alexandre Oliva [Wed, 19 Dec 2018 06:51:19 +0000 (06:51 +0000)]
[PR c++/88146] do not crash synthesizing inherited ctor(...)

This patch started out from the testcase in PR88146, that attempted to
synthesize an inherited ctor without any args before a varargs
ellipsis and crashed while at that, because of the unguarded
dereferencing of the parm type list, that usually contains a
terminator.  The terminator is not there for varargs functions,
however, and without any other args, we ended up dereferencing a NULL
pointer.  Oops.

Guarding accesses to parm would be easy, but not necessary.  In
do_build_copy_constructor, non-inherited ctors are copy-ctors, that
always have at least one parm, so parm needs not be guarded when we
know the access will only take place when we're dealing with an
inherited ctor.  The only other problematic use was in the cvquals
initializer, a variable only used in a loop over fields, that we
skipped individually in inherited ctors.  I've guarded the cvquals
initialization and the entire loop over fields so they only run for
copy-ctors.

Avoiding the crash from unguarded accesses was easy, but I thought we
should still produce the sorry message we got in other testcases that
passed arguments through the ellipsis in inherited ctors.  I put a
check in, and noticed the inherited ctors were synthesized with the
location assigned to the class name, although they were initially
assigned the location of the using declaration.  I decided the latter
was better, and arranged for the better location to be retained.

Further investigation revealed the lack of a sorry message had to do
with the call being in a non-evaluated context, in this case, a
noexcept expression.  The sorry would be correctly reported in other
contexts, so I rolled back the check I'd added, but retained the
source location improvement.

I was still concerned about issuing sorry messages while instantiating
template ctors even in non-evaluated contexts, e.g., if a template
ctor had a base initializer that used an inherited ctor with enough
arguments that they'd go through an ellipsis.  I wanted to defer the
instantiation of such template ctors, but that would have been wrong
for constexpr template ctors, and already done for non-constexpr ones.
So, I just consolidated multiple test variants into a single testcase
that explores and explains various of the possibilities I thought of.

for  gcc/cp/ChangeLog

PR c++/88146
* method.c (do_build_copy_constructor): Guard cvquals init and
loop over fields to run for non-inherited ctors only.
(synthesize_method): Retain location of inherited ctor.

for  gcc/testsuite/ChangeLog

PR c++/88146
* g++.dg/cpp0x/inh-ctor32.C: New.

From-SVN: r267250

5 years agoauto-profile.c (afdo_indirect_call): Skip generating histogram value if we can't...
Bin Cheng [Wed, 19 Dec 2018 02:25:48 +0000 (02:25 +0000)]
auto-profile.c (afdo_indirect_call): Skip generating histogram value if we can't find cgraph_node for then...

* auto-profile.c (afdo_indirect_call): Skip generating histogram
value if we can't find cgraph_node for then indirected callee.  Save
profile_id of the cgraph_node in histogram value's first counter.
* value-prof.c (gimple_value_profile_transformations): Don't skip
for flag_auto_profile.

From-SVN: r267249

5 years agoDaily bump.
GCC Administrator [Wed, 19 Dec 2018 00:16:23 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r267248

5 years agore PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maxim...
Jakub Jelinek [Tue, 18 Dec 2018 21:48:59 +0000 (22:48 +0100)]
re PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog)

PR rtl-optimization/87759
* gcc.target/i386/pr87759.c: Require int128 effective target.

From-SVN: r267245

5 years agore PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maxim...
Vladimir Makarov [Tue, 18 Dec 2018 21:20:16 +0000 (21:20 +0000)]
re PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog)

2018-12-18  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/87759
* lra-assigns.c (lra_split_hard_reg_for): Recalculate
non_reload_pseudos.

2018-12-18  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/87759
* gcc.target/i386/pr87759.c: New.

From-SVN: r267244

5 years agore PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with...
Jakub Jelinek [Tue, 18 Dec 2018 18:41:26 +0000 (19:41 +0100)]
re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")

PR target/88464
* config/i386/i386-builtin-types.def
(VOID_FTYPE_PDOUBLE_QI_V8SI_V4DF_INT,
VOID_FTYPE_PFLOAT_QI_V4DI_V8SF_INT,
VOID_FTYPE_PLONGLONG_QI_V8SI_V4DI_INT,
VOID_FTYPE_PINT_QI_V4DI_V8SI_INT,
VOID_FTYPE_PDOUBLE_QI_V4SI_V2DF_INT,
VOID_FTYPE_PFLOAT_QI_V2DI_V4SF_INT,
VOID_FTYPE_PLONGLONG_QI_V4SI_V2DI_INT,
VOID_FTYPE_PINT_QI_V2DI_V4SI_INT): New builtin types.
* config/i386/i386.c (enum ix86_builtins): Add
IX86_BUILTIN_SCATTERALTSIV4DF, IX86_BUILTIN_SCATTERALTDIV8SF,
IX86_BUILTIN_SCATTERALTSIV4DI, IX86_BUILTIN_SCATTERALTDIV8SI,
IX86_BUILTIN_SCATTERALTSIV2DF, IX86_BUILTIN_SCATTERALTDIV4SF,
IX86_BUILTIN_SCATTERALTSIV2DI and IX86_BUILTIN_SCATTERALTDIV4SI.
(ix86_init_mmx_sse_builtins): Fix up names of IX86_BUILTIN_GATHERALT*,
IX86_BUILTIN_GATHER3ALT* and IX86_BUILTIN_SCATTERALT* builtins to
match the IX86_BUILTIN codes.  Build  IX86_BUILTIN_SCATTERALTSIV4DF,
IX86_BUILTIN_SCATTERALTDIV8SF, IX86_BUILTIN_SCATTERALTSIV4DI,
IX86_BUILTIN_SCATTERALTDIV8SI, IX86_BUILTIN_SCATTERALTSIV2DF,
IX86_BUILTIN_SCATTERALTDIV4SF, IX86_BUILTIN_SCATTERALTSIV2DI and
IX86_BUILTIN_SCATTERALTDIV4SI decls.
(ix86_vectorize_builtin_scatter): Expand those new builtins.

* gcc.target/i386/avx512f-pr88464-5.c: New test.
* gcc.target/i386/avx512f-pr88464-6.c: New test.
* gcc.target/i386/avx512f-pr88464-7.c: New test.
* gcc.target/i386/avx512f-pr88464-8.c: New test.
* gcc.target/i386/avx512vl-pr88464-5.c: New test.
* gcc.target/i386/avx512vl-pr88464-6.c: New test.
* gcc.target/i386/avx512vl-pr88464-7.c: New test.
* gcc.target/i386/avx512vl-pr88464-8.c: New test.
* gcc.target/i386/avx512vl-pr88464-9.c: New test.
* gcc.target/i386/avx512vl-pr88464-10.c: New test.
* gcc.target/i386/avx512vl-pr88464-11.c: New test.
* gcc.target/i386/avx512vl-pr88464-12.c: New test.
* gcc.target/i386/avx512vl-pr88464-13.c: New test.
* gcc.target/i386/avx512vl-pr88464-14.c: New test.
* gcc.target/i386/avx512vl-pr88464-15.c: New test.
* gcc.target/i386/avx512vl-pr88464-16.c: New test.

From-SVN: r267239

5 years agoLWG 3171: restore stream insertion for filesystem::directory_entry
Jonathan Wakely [Tue, 18 Dec 2018 16:57:36 +0000 (16:57 +0000)]
LWG 3171: restore stream insertion for filesystem::directory_entry

* include/bits/fs_dir.h (operator<<): Overload for directory_entry,
as per LWG 3171.
* testsuite/27_io/filesystem/directory_entry/lwg3171.cc: New test.

From-SVN: r267238

5 years agoFix previous commit to move instead of copying
Jonathan Wakely [Tue, 18 Dec 2018 16:38:13 +0000 (16:38 +0000)]
Fix previous commit to move instead of copying

* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Move new
path instead of copying.

From-SVN: r267237

5 years agoMicro-optimization to avoid creating temporary path
Jonathan Wakely [Tue, 18 Dec 2018 15:52:37 +0000 (15:52 +0000)]
Micro-optimization to avoid creating temporary path

Now that path::operator/=(basic_string_view<value_type>) works directly
from the string argument, instead of constructing a temporary path from
the string, it's potentially more efficient to do 'path(x) /= s' instead
of 'x / s'. This changes the only relevant place in the library.

* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Append
string to lvalue to avoid creating temporary path.

From-SVN: r267236

5 years agoLWG 2936: update path::compare logic and optimize string comparisons
Jonathan Wakely [Tue, 18 Dec 2018 15:52:33 +0000 (15:52 +0000)]
LWG 2936: update path::compare logic and optimize string comparisons

The resolution for LWG 2936 defines the comparison more precisely, which
this patch implements. The patch also defines comparisons with strings
to work without constructing a temporary path object (so avoids any
memory allocations).

* include/bits/fs_path.h (path::compare(const string_type&))
(path::compare(const value_type*)): Add noexcept and construct a
string view to compare to instead of a path.
(path::compare(basic_string_view<value_type>)): Add noexcept. Remove
inline definition.
* src/filesystem/std-path.cc (path::_Parser): Track last type read
from input.
(path::_Parser::next()): Return a final empty component when the
input ends in a non-root directory separator.
(path::_M_append(basic_string_view<value_type>)): Remove special cases
for trailing non-root directory separator.
(path::_M_concat(basic_string_view<value_type>)): Likewise.
(path::compare(const path&)): Implement LWG 2936.
(path::compare(basic_string_view<value_type>)): Define in terms of
components returned by parser, consistent with LWG 2936.
* testsuite/27_io/filesystem/path/compare/lwg2936.cc: New.
* testsuite/27_io/filesystem/path/compare/path.cc: Test more cases.
* testsuite/27_io/filesystem/path/compare/strings.cc: Likewise.

From-SVN: r267235

5 years agoLWG 3040: define starts_with/ends_with as proposed
Jonathan Wakely [Tue, 18 Dec 2018 15:34:43 +0000 (15:34 +0000)]
LWG 3040: define starts_with/ends_with as proposed

* include/std/string_view [__cplusplus > 201703L]
(basic_string_view::starts_with(basic_string_view)): Implement
proposed resolution of LWG 3040 to avoid redundant length check.
(basic_string_view::starts_with(_CharT)): Implement proposed
resolution of LWG 3040 to check at most one character.
(basic_string_view::ends_with(_CharT)): Likewise.

From-SVN: r267234

5 years agoextend.texi (PowerPC Altivec/VSX Built-in Functions): Describe when a typedef name...
Bill Schmidt [Tue, 18 Dec 2018 13:46:10 +0000 (13:46 +0000)]
extend.texi (PowerPC Altivec/VSX Built-in Functions): Describe when a typedef name can be used as the type specifier for a vector type...

2018-12-18  Bill Schmidt  <wschmidt@linux.ibm.com>

* doc/extend.texi (PowerPC Altivec/VSX Built-in Functions):
Describe when a typedef name can be used as the type specifier for
a vector type, and when it cannot.

From-SVN: r267232

5 years ago[testsuite] Enable vect_usad_char effective target for non-SVE aarch64
Kyrylo Tkachov [Tue, 18 Dec 2018 12:55:44 +0000 (12:55 +0000)]
[testsuite] Enable vect_usad_char effective target for non-SVE aarch64

In GCC 9 the aarch64 port learned how to do V16QImode SAD operations on signed and unsigned chars.
But I had missed enabling the effective target for that.
This patch enables that target for non-SVE aarch64.
Two new tests now PASS on aarch64:
gcc.dg/vect/slp-reduc-sad.c
gcc.dg/vect/vect-reduc-sad.c

* lib/target-supports.exp (check_effective_target_vect_usad_char):
Add non-SVE aarch64 to supported list.

From-SVN: r267230

5 years agomsp430.h: Define TARGET_VTABLE_ENTRY_ALIGN.
Jozef Lawrynowicz [Tue, 18 Dec 2018 11:44:22 +0000 (11:44 +0000)]
msp430.h: Define TARGET_VTABLE_ENTRY_ALIGN.

2018-12-18  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

* config/msp430/msp430.h: Define TARGET_VTABLE_ENTRY_ALIGN.

From-SVN: r267229

5 years agore PR target/88513 (FAIL: gcc.target/i386/pr59591-1.c)
Jakub Jelinek [Tue, 18 Dec 2018 11:22:00 +0000 (12:22 +0100)]
re PR target/88513 (FAIL: gcc.target/i386/pr59591-1.c)

PR target/88513
PR target/88514
* optabs.def (vec_pack_sbool_trunc_optab, vec_unpacks_sbool_hi_optab,
vec_unpacks_sbool_lo_optab): New optabs.
* optabs.c (expand_widen_pattern_expr): Use vec_unpacks_sbool_*_optab
and pass additional argument if both input and target have the same
scalar mode of VECTOR_BOOLEAN_TYPE_P vectors.
* expr.c (expand_expr_real_2) <case VEC_PACK_TRUNC_EXPR>: Handle
VECTOR_BOOLEAN_TYPE_P pack where result has the same scalar mode
as the operands using vec_pack_sbool_trunc_optab.
* tree-vect-stmts.c (supportable_widening_operation): Use
vec_unpacks_sbool_{lo,hi}_optab for VECTOR_BOOLEAN_TYPE_P conversions
where both wider_vectype and vectype have the same scalar mode.
(supportable_narrowing_operation): Similarly use
vec_pack_sbool_trunc_optab if narrow_vectype and vectype have the same
scalar mode.
* config/i386/i386.c (ix86_get_builtin)
<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Check for VECTOR_MODE_P
rather than non-VOIDmode.
* config/i386/sse.md (vec_pack_trunc_qi, vec_pack_trunc_<mode>):
Remove useless ()s around "register_operand", formatting fixes.
(vec_pack_sbool_trunc_qi, vec_unpacks_sbool_lo_qi,
vec_unpacks_sbool_hi_qi): New expanders.
* doc/md.texi (vec_pack_sbool_trunc_M, vec_unpacks_sbool_hi_M,
vec_unpacks_sbool_lo_M): Document.

* gcc.target/i386/avx512f-pr88513-1.c: New test.
* gcc.target/i386/avx512f-pr88513-2.c: New test.
* gcc.target/i386/avx512vl-pr88464-1.c: New test.
* gcc.target/i386/avx512vl-pr88464-2.c: New test.
* gcc.target/i386/avx512vl-pr88464-3.c: New test.
* gcc.target/i386/avx512vl-pr88464-4.c: New test.
* gcc.target/i386/avx512vl-pr88513-1.c: New test.
* gcc.target/i386/avx512vl-pr88513-2.c: New test.
* gcc.target/i386/avx512vl-pr88513-3.c: New test.
* gcc.target/i386/avx512vl-pr88513-4.c: New test.
* gcc.target/i386/avx512vl-pr88514-1.c: New test.
* gcc.target/i386/avx512vl-pr88514-2.c: New test.
* gcc.target/i386/avx512vl-pr88514-3.c: New test.

From-SVN: r267228

5 years agocombine.c (update_rsp_from_reg_equal): Only look for the nonzero bits of src in nonze...
Jozef Lawrynowicz [Tue, 18 Dec 2018 10:29:42 +0000 (10:29 +0000)]
combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits of src in nonzero_bits_mode if...

2018-12-18  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

* combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits
of src in nonzero_bits_mode if the mode of src is MODE_INT and
HWI_COMPUTABLE.
(reg_nonzero_bits_for_combine): Add clarification to comment.

From-SVN: r267227

5 years agodriver-i386.c (host_detect_local_cpu): Detect cascadelake.
Wei Xiao [Tue, 18 Dec 2018 03:41:44 +0000 (03:41 +0000)]
driver-i386.c (host_detect_local_cpu): Detect cascadelake.

gcc/ChangeLog
2018-12-18  Wei Xiao  <wei3.xiao@intel.com>

* config/i386/driver-i386.c (host_detect_local_cpu): Detect cascadelake.
* config/i386/i386.c (fold_builtin_cpu): Handle cascadelake.
* doc/extend.texi: Add cascadelake.

gcc/testsuite/ChangeLog
2018-12-18  Wei Xiao  <wei3.xiao@intel.com>

* g++.target/i386/mv16.C: Handle new march.
* gcc.target/i386/builtin_target.c: Ditto.

libgcc/ChangeLog
2018-12-18  Wei Xiao  <wei3.xiao@intel.com>

* config/i386/cpuinfo.c (get_intel_cpu): Handle cascadelake.
* config/i386/cpuinfo.h: Add INTEL_COREI7_CASCADELAKE.

From-SVN: r267226

5 years agoDaily bump.
GCC Administrator [Tue, 18 Dec 2018 00:16:39 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r267225

5 years agoPR libstdc++/71044 fix off-by-one errors introduced recently
Jonathan Wakely [Mon, 17 Dec 2018 22:43:31 +0000 (22:43 +0000)]
PR libstdc++/71044 fix off-by-one errors introduced recently

The recent changes to append/concat directly from strings (without
constructing paths) introduced regressions where one of the components
could be omitted from the iteration sequence in the result.

PR libstdc++/71044
* src/filesystem/std-path.cc (path::_M_append): Fix off-by-one error
that caused a component to be lost from the iteration sequence.
(path::_M_concat): Likewise.
* testsuite/27_io/filesystem/path/append/source.cc: Test appending
long strings.
* testsuite/27_io/filesystem/path/concat/strings.cc: Test
concatenating long strings.
* testsuite/27_io/filesystem/path/construct/string_view.cc: Test
construction from long string.

From-SVN: r267222

5 years agore PR target/87870 (ppc64le generates poor code when loading constants into TImode...
Peter Bergner [Mon, 17 Dec 2018 22:07:11 +0000 (22:07 +0000)]
re PR target/87870 (ppc64le generates poor code when loading constants into TImode vars)

gcc/
PR target/87870
* config/rs6000/vsx.md (nW): New mode iterator.
(vsx_mov<mode>_64bit): Use it.  Remove redundant GPR 0/-1 alternative.
Update length attribute for (<??r>, <nW>)  alternative.
(vsx_mov<mode>_32bit): Likewise.

gcc/testsuite/
PR target/87870
* gcc.target/powerpc/pr87870.c: New test.

From-SVN: r267221

5 years agore PR c++/88410 (internal compiler error: output_operand: invalid expression as operand)
Jakub Jelinek [Mon, 17 Dec 2018 21:54:37 +0000 (22:54 +0100)]
re PR c++/88410 (internal compiler error: output_operand: invalid expression as operand)

PR c++/88410
* cp-gimplify.c (cp_fold) <case ADDR_EXPR>: For offsetof-like folding,
call maybe_constant_value on val to see if it is INTEGER_CST.

* g++.dg/cpp0x/pr88410.C: New test.

From-SVN: r267220

5 years agoPR c++/52321 print note for static_cast to/from incomplete type
Jonathan Wakely [Mon, 17 Dec 2018 21:49:58 +0000 (21:49 +0000)]
PR c++/52321 print note for static_cast to/from incomplete type

PR c++/52321
* typeck.c (build_static_cast): Print a note when the destination
type or the operand is a pointer/reference to incomplete class type.

From-SVN: r267219

5 years ago[nvptx] Move macro defs to top of nvptx.c
Tom de Vries [Mon, 17 Dec 2018 21:27:19 +0000 (21:27 +0000)]
[nvptx] Move macro defs to top of nvptx.c

Move macro definition to the top of the file, allowing them to be used
there-after.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-17  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (PTX_VECTOR_LENGTH, PTX_WORKER_LENGTH,
PTX_DEFAULT_RUNTIME_DIM): Move to the top of the file.

From-SVN: r267216

5 years ago[nvptx] Add PTX_WARP_SIZE
Tom de Vries [Mon, 17 Dec 2018 21:27:09 +0000 (21:27 +0000)]
[nvptx] Add PTX_WARP_SIZE

Add PTX_WARP_SIZE constant and use it in nvptx_simt_vf.  The function
nvptx_simt_vf is used for OpenMP, and using PTX_WARP_SIZE here decouples the
OpenMP support from the PTX_VECTOR_LENGTH constant used in OpenACC support.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-17  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (PTX_WARP_SIZE): Define.
(nvptx_simt_vf): Return PTX_WARP_SIZE instead of PTX_VECTOR_LENGTH.

From-SVN: r267215

5 years ago[nvptx] Fix whitespace in nvptx_single and nvptx_neuter_pars
Tom de Vries [Mon, 17 Dec 2018 21:26:59 +0000 (21:26 +0000)]
[nvptx] Fix whitespace in nvptx_single and nvptx_neuter_pars

Fix whitespace in nvptx_single and nvptx_neuter_pars.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-17  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_single): Fix whitespace.
(nvptx_neuter_pars): Likewise.

From-SVN: r267214

5 years ago[nvptx] Unify C/Fortran routine handling in nvptx_goacc_validate_dims
Tom de Vries [Mon, 17 Dec 2018 21:26:49 +0000 (21:26 +0000)]
[nvptx] Unify C/Fortran routine handling in nvptx_goacc_validate_dims

The Fortran front-end has a bug (PR72741) that means what when
nvptx_goacc_validate_dims is called for a Fortran routine, the dims parameter
is not the same as it would have been if the function would have been called for
an equivalent C routine.

Work around this bug by overriding the dims parameter for routines, allowing the
function to handle routines in Fortran and C the same.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-17  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_goacc_validate_dims): Work around Fortran
bug PR72741 by overriding dims parameter for routines.

From-SVN: r267213

5 years ago[nvptx] Rewrite nvptx_goacc_validate_dims to use predicate vars
Tom de Vries [Mon, 17 Dec 2018 21:26:39 +0000 (21:26 +0000)]
[nvptx] Rewrite nvptx_goacc_validate_dims to use predicate vars

The function nvptx_goacc_validate_dims has arguments decl and fn_level which
together describe different situations.

Introduce a predicate var for each situation, and use them, allowing to
understand what the function does in each situation without having to know the
way the situations are encoded in the args.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-12-17  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.c (nvptx_goacc_validate_dims): Rewrite using
predicate vars.

From-SVN: r267212

5 years agoAdd missing ChangeLog entry from last checkin:
Steve Ellcey [Mon, 17 Dec 2018 19:23:02 +0000 (19:23 +0000)]
Add missing ChangeLog entry from last checkin:

2018-12-17  Steve Ellcey  <sellcey@cavium.com>

* gcc.target/aarch64/torture/aarch64-torture.exp: New file.
* gcc.target/aarch64/torture/simd-abi-1.c: New test.
* gcc.target/aarch64/torture/simd-abi-2.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-3.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-4.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-5.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-6.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-7.c: Ditto.

From-SVN: r267210

5 years agoaarch64-torture.exp: New file.
Steve Ellcey [Mon, 17 Dec 2018 19:18:17 +0000 (19:18 +0000)]
aarch64-torture.exp: New file.

2018-12-17  Steve Ellcey  <sellcey@cavium.com>

* gcc.target/aarch64/torture/aarch64-torture.exp: New file.
* gcc.target/aarch64/torture/simd-abi-1.c: New test.
* gcc.target/aarch64/torture/simd-abi-2.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-3.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-4.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-5.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-6.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-7.c: Ditto.

From-SVN: r267209

5 years agoaarch64-protos.h (aarch64_use_simple_return_insn_p): New prototype.
Steve Ellcey [Mon, 17 Dec 2018 19:14:04 +0000 (19:14 +0000)]
aarch64-protos.h (aarch64_use_simple_return_insn_p): New prototype.

2018-12-17  Steve Ellcey  <sellcey@cavium.com>

* config/aarch64/aarch64-protos.h (aarch64_use_simple_return_insn_p):
New prototype.
(aarch64_epilogue_uses): Ditto.
* config/aarch64/aarch64.c (aarch64_attribute_table): New array.
(aarch64_simd_decl_p): New function.
(aarch64_reg_save_mode): New function.
(aarch64_function_ok_for_sibcall): Check for simd calls.
(aarch64_layout_frame): Check for simd function.
(aarch64_gen_storewb_pair): Handle E_TFmode.
(aarch64_push_regs): Use aarch64_reg_save_mode to get mode.
(aarch64_gen_loadwb_pair): Handle E_TFmode.
(aarch64_pop_regs): Use aarch64_reg_save_mode to get mode.
(aarch64_gen_store_pair): Handle E_TFmode.
(aarch64_gen_load_pair): Ditto.
(aarch64_save_callee_saves): Handle different mode sizes.
(aarch64_restore_callee_saves): Ditto.
(aarch64_components_for_bb): Check for simd function.
(aarch64_epilogue_uses): New function.
(aarch64_process_components): Check for simd function.
(aarch64_expand_prologue): Ditto.
(aarch64_expand_epilogue): Ditto.
(aarch64_expand_call): Ditto.
(aarch64_use_simple_return_insn_p): New function.
(TARGET_ATTRIBUTE_TABLE): New define.
* config/aarch64/aarch64.h (EPILOGUE_USES): Redefine.
(FP_SIMD_SAVED_REGNUM_P): New macro.
* config/aarch64/aarch64.md (simple_return): New define_expand.
(load_pair_dw_tftf): New instruction.
(store_pair_dw_tftf): Ditto.
(loadwb_pair<TX:mode>_<P:mode>): Ditto.
(storewb_pair<TX:mode>_<P:mode>): Ditto.

From-SVN: r267208

5 years agoMerge dmd upstream 237ca3fbe
Iain Buclaw [Mon, 17 Dec 2018 18:32:31 +0000 (18:32 +0000)]
Merge dmd upstream 237ca3fbe

Backports a fix where a bad cast to TypeFunction resulted in memory
corruption.  The logic in the function semantic has been fixed, and
casts have been replaced with a function call to always check the
front-end AST node value.

Reviewed-on: https://github.com/dlang/dmd/pull/9054

From-SVN: r267207

5 years agobuiltin-snprintf-4.c: Adjust for ILP32.
Martin Sebor [Mon, 17 Dec 2018 18:10:58 +0000 (18:10 +0000)]
builtin-snprintf-4.c: Adjust for ILP32.

gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/builtin-snprintf-4.c: Adjust for ILP32.

From-SVN: r267206

5 years agore PR target/88502 (Inline built-in asinh, acosh, atanh for -ffast-math)
Uros Bizjak [Mon, 17 Dec 2018 15:46:20 +0000 (16:46 +0100)]
re PR target/88502 (Inline built-in asinh, acosh, atanh for -ffast-math)

PR target/88502
* internal-fn.def (ACOSH): New.
(ASINH): Ditto.
(ATANH): Ditto.
* optabs.def (acosh_optab): New.
(asinh_optab): Ditto.
(atanh_optab): Ditto.
* config/i386/i386-protos.h (ix86_emit_i387_asinh): New prototype.
(ix86_emit_i387_acosh): Ditto.
(ix86_emit_i387_atanh): Ditto.
* config/i386/i386.c (ix86_emit_i387_asinh): New function.
(ix86_emit_i387_acosh): Ditto.
(ix86_emit_i387_atanh): Ditto.
* config/i386/i386.md (asinhxf2): New expander.
(asinh<mode>2): Ditto.
(acoshxf2): Ditto.
(acosh<mode>2): Ditto.
(atanhxf2): Ditto.
(atanh<mode>2): Ditto.

From-SVN: r267204

5 years agoconfig.gcc (powerpc-ibm-aix6.*): Delete extra_headers.
David Edelsohn [Mon, 17 Dec 2018 15:07:22 +0000 (15:07 +0000)]
config.gcc (powerpc-ibm-aix6.*): Delete extra_headers.

* config.gcc (powerpc-ibm-aix6.*): Delete extra_headers.
(powerpc-ibm-aix7.1.*): Same.
(powerpc-ibm-aix[789].*): Same.

From-SVN: r267203

5 years agoDWARF: Don't expand hash table when no insertion is needed
H.J. Lu [Mon, 17 Dec 2018 13:49:16 +0000 (13:49 +0000)]
DWARF: Don't expand hash table when no insertion is needed

dwarf2out_finish performs:

1. save_macinfo_strings
2. hash table traverse of index_string
3. output_macinfo -> output_macinfo_op
4. output_indirect_strings -> hash table traverse of output_index_string

find_slot_with_hash has

 if (insert == INSERT && m_size * 3 <= m_n_elements * 4)
    expand ();

which may expand hash table even if no insertion is neeed and change hash
table traverse order.  When output_macinfo_op is called, all index strings
have been added to hash table by save_macinfo_strings and we shouldn't
expand index string hash table.  Otherwise find_slot_with_hash will expand
hash table when hash table has the right size and hash table traverse of
output_index_string will have a different traverse order from index_string.

PR debug/79342
* dwarf2out.c (find_AT_string_in_table): Add insert argument
defaulting to INSERT and replace INSERT.
(find_AT_string): Likewise.
(output_macinfo_op): Pass NO_INSERT to find_AT_string.

From-SVN: r267202

5 years agocoverage.c (struct conts_entry): Add n_counts.
Jan Hubicka [Mon, 17 Dec 2018 13:21:52 +0000 (14:21 +0100)]
coverage.c (struct conts_entry): Add n_counts.

* coverage.c (struct conts_entry): Add n_counts.
(remap_counts_file): Record number of ocunts.
(get_coverage_counts): Verify that counts match.
* coverage.h (get_coverage_counts): Update prototype.
* profile.c (get_exec_counts. compute_value_histograms): Add
n_counts parametrs.

From-SVN: r267200

5 years agore PR rtl-optimization/88253 (Inlining of function incorrectly deletes volatile regis...
Senthil Kumar Selvaraj [Mon, 17 Dec 2018 10:50:54 +0000 (10:50 +0000)]
re PR rtl-optimization/88253 (Inlining of function incorrectly deletes volatile register access when using XOR in avr-gcc)

Fix PR 88253

gcc/ChangeLog:

PR rtl-optimization/88253
* combine.c (combine_simplify_rtx): Test for side-effects before
substituting by zero.

gcc/testsuite/ChangeLog:

PR rtl-optimization/88253
* gcc.target/avr/pr88253.c: New test.

From-SVN: r267198

5 years agoAdd a loop versioning pass
Richard Sandiford [Mon, 17 Dec 2018 10:05:51 +0000 (10:05 +0000)]
Add a loop versioning pass

This patch adds a pass that versions loops with variable index strides
for the case in which the stride is 1.  E.g.:

    for (int i = 0; i < n; ++i)
      x[i * stride] = ...;

becomes:

    if (stepx == 1)
      for (int i = 0; i < n; ++i)
        x[i] = ...;
    else
      for (int i = 0; i < n; ++i)
        x[i * stride] = ...;

This is useful for both vector code and scalar code, and in some cases
can enable further optimisations like loop interchange or pattern
recognition.

The pass gives a 7.6% improvement on Cortex-A72 for 554.roms_r at -O3
and a 2.4% improvement for 465.tonto.  I haven't found any SPEC tests
that regress.

Sizewise, there's a 10% increase in .text for both 554.roms_r and
465.tonto.  That's obviously a lot, but in tonto's case it's because
the whole program is written using assumed-shape arrays and pointers,
so a large number of functions really do benefit from versioning.
roms likewise makes heavy use of assumed-shape arrays, and that
improvement in performance IMO justifies the code growth.

The next biggest .text increase is 4.5% for 548.exchange2_r.  I did see
a small (0.4%) speed improvement there, but although both 3-iteration runs
produced stable results, that might still be noise.  There was a slightly
larger (non-noise) improvement for a 256-bit SVE model.

481.wrf and 521.wrf_r .text grew by 2.8% and 2.5% respectively, but
without any noticeable improvement in performance.  No other test grew
by more than 2%.

Although the main SPEC beneficiaries are all Fortran tests, the
benchmarks we use for SVE also include some C and C++ tests that
benefit.

Using -frepack-arrays gives the same benefits in many Fortran cases.
The problem is that using that option inappropriately can force a full
array copy for arguments that the function only reads once, and so it
isn't really something we can turn on by default.  The new pass is
supposed to give most of the benefits of -frepack-arrays without
the risk of unnecessary repacking.

The patch therefore enables the pass by default at -O3.

2018-12-17  Richard Sandiford  <richard.sandiford@arm.com>
    Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
    Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

gcc/
* doc/invoke.texi (-fversion-loops-for-strides): Document
(loop-versioning-group-size, loop-versioning-max-inner-insns)
(loop-versioning-max-outer-insns): Document new --params.
* Makefile.in (OBJS): Add gimple-loop-versioning.o.
* common.opt (fversion-loops-for-strides): New option.
* opts.c (default_options_table): Enable fversion-loops-for-strides
at -O3.
* params.def (PARAM_LOOP_VERSIONING_GROUP_SIZE)
(PARAM_LOOP_VERSIONING_MAX_INNER_INSNS)
(PARAM_LOOP_VERSIONING_MAX_OUTER_INSNS): New parameters.
* passes.def: Add pass_loop_versioning.
* timevar.def (TV_LOOP_VERSIONING): New time variable.
* tree-ssa-propagate.h
(substitute_and_fold_engine::substitute_and_fold): Add an optional
block parameter.
* tree-ssa-propagate.c
(substitute_and_fold_engine::substitute_and_fold): Likewise.
When passed, only walk blocks dominated by that block.
* tree-vrp.h (range_includes_p): Declare.
(range_includes_zero_p): Turn into an inline wrapper around
range_includes_p.
* tree-vrp.c (range_includes_p): New function, generalizing...
(range_includes_zero_p): ...this.
* tree-pass.h (make_pass_loop_versioning): Declare.
* gimple-loop-versioning.cc: New file.

gcc/testsuite/
* gcc.dg/loop-versioning-1.c: New test.
* gcc.dg/loop-versioning-10.c: Likewise.
* gcc.dg/loop-versioning-11.c: Likewise.
* gcc.dg/loop-versioning-2.c: Likewise.
* gcc.dg/loop-versioning-3.c: Likewise.
* gcc.dg/loop-versioning-4.c: Likewise.
* gcc.dg/loop-versioning-5.c: Likewise.
* gcc.dg/loop-versioning-6.c: Likewise.
* gcc.dg/loop-versioning-7.c: Likewise.
* gcc.dg/loop-versioning-8.c: Likewise.
* gcc.dg/loop-versioning-9.c: Likewise.
* gfortran.dg/loop_versioning_1.f90: Likewise.
* gfortran.dg/loop_versioning_2.f90: Likewise.
* gfortran.dg/loop_versioning_3.f90: Likewise.
* gfortran.dg/loop_versioning_4.f90: Likewise.
* gfortran.dg/loop_versioning_5.f90: Likewise.
* gfortran.dg/loop_versioning_6.f90: Likewise.
* gfortran.dg/loop_versioning_7.f90: Likewise.
* gfortran.dg/loop_versioning_8.f90: Likewise.

From-SVN: r267197

5 years agore PR fortran/85314 (gcc/fortran/resolve.c:9222: unreachable code ?)
Steven G. Kargl [Mon, 17 Dec 2018 02:19:58 +0000 (02:19 +0000)]
re PR fortran/85314 (gcc/fortran/resolve.c:9222: unreachable code ?)

2018-12-16  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85314
* resolve.c (resolve_transfer): Remove dead code.

From-SVN: r267196

5 years agoDaily bump.
GCC Administrator [Mon, 17 Dec 2018 00:16:51 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r267195

5 years agolibphobos: Merge common version blocks for core.sys.posix.sys.msg.
Iain Buclaw [Sun, 16 Dec 2018 23:18:25 +0000 (23:18 +0000)]
libphobos: Merge common version blocks for core.sys.posix.sys.msg.

This is a continuation of simplifying C bindings so there aren't dozens
of duplicated code for each architecture.  For this particular module,
it now more closely resembles how glibc arranges msq.h, fixing a couple
of targets in the process, notably X32.

Backport from upstream druntime 2.084.

Reviewed-on: https://github.com/dlang/druntime/pull/2362

From-SVN: r267192

5 years agoipa-fnsummary.c (remap_edge_change_prob): Do not ICE when changes are not streamed in.
Jan Hubicka [Sun, 16 Dec 2018 18:57:48 +0000 (19:57 +0100)]
ipa-fnsummary.c (remap_edge_change_prob): Do not ICE when changes are not streamed in.

* ipa-fnsummary.c (remap_edge_change_prob): Do not ICE when changes
are not streamed in.

From-SVN: r267191

5 years agore PR fortran/88116 (ICE in gfc_convert_constant(): Unexpected type)
Steven G. Kargl [Sun, 16 Dec 2018 16:29:43 +0000 (16:29 +0000)]
re PR fortran/88116 (ICE in gfc_convert_constant(): Unexpected type)

2018-12-16  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88116
PR fortran/88467
* array.c (gfc_match_array_constructor): Check return value of
gfc_convert_type().  Skip constructor elements with BT_UNKNOWN,
which need to go through resolution.
* intrinsic.c (gfc_convert_type_warn): Return early if the types
martch (i.e., no conversion is required).
* simplify.c (gfc_convert_constant): Remove a gfc_internal_error,
and return gfc_bad_expr.

2018-12-16  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88116
* gfortran.dg/pr88116_1.f90: New test.
* gfortran.dg/pr88116_2.f90: Ditto.

PR fortran/88467
* gfortran.dg/pr88467.f90: New test.

From-SVN: r267189

5 years agodecl.c (variable_decl): Typo fixes.
Steven G. Kargl [Sun, 16 Dec 2018 16:01:19 +0000 (16:01 +0000)]
decl.c (variable_decl): Typo fixes.

2018-12-16  Steven G. Kargl  <kargl@gcc.gnu.org>

* decl.c (variable_decl): Typo fixes.

2018-12-16  Steven G. Kargl  <kargl@gcc.gnu.org>

* gfortran.dg/pr88138.f90: Remove extraneous 's' in comment.

From-SVN: r267188

5 years agoPF fortran/88364
Thomas Koenig [Sun, 16 Dec 2018 14:32:46 +0000 (14:32 +0000)]
PF fortran/88364

2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PF fortran/88364
* trans-expr.c (gfc_conv_expr_reference): Do not add clobber if
the expression contains a reference.

2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/88363
* intent_out_13.f90: New test.

From-SVN: r267187

5 years agox86: Revert reversion 267133
H.J. Lu [Sun, 16 Dec 2018 13:55:18 +0000 (13:55 +0000)]
x86: Revert reversion 267133

Revert commit:

commit 76c21b271247ccbd681bdb4530426d2fe35dbfa5
Author: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Fri Dec 14 12:38:04 2018 +0000

    x86: Don't use get_frame_size when finalizing stack frame

gcc/

PR target/88483
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Revert
reversion 267133.

gcc/testsuite/

PR target/88483
* gcc.target/i386/stackalign/pr88483.c: Removed.  Revert
reversion 267133.

From-SVN: r267186

5 years agoipa-fnsummary.c (analyze_function_body): Do not loeak conds and size_time_table.
Jan Hubicka [Sun, 16 Dec 2018 12:05:04 +0000 (13:05 +0100)]
ipa-fnsummary.c (analyze_function_body): Do not loeak conds and size_time_table.

* ipa-fnsummary.c (analyze_function_body): Do not loeak conds and
size_time_table.
(ipa_fn_summary_generate): Add prevails parameter; do not allocate
data when symbol is not prevailing.
(inline_read_section): Likewise.

From-SVN: r267185

5 years agore PR fortran/87994 (ICE in match_data_constant, at fortran/decl.c:399)
Steven G. Kargl [Sun, 16 Dec 2018 03:33:05 +0000 (03:33 +0000)]
re PR fortran/87994 (ICE in match_data_constant, at fortran/decl.c:399)

2018-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/87944
* decl.c (match_data_constant): Allow inquiry parameter as data
constant in data statement.

2018-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/87944
* gfortran.dg/pr87994_1.f90: New test.
* gfortran.dg/pr87994_2.f90: Ditto.
* gfortran.dg/pr87994_3.f90: Ditto.

From-SVN: r267184

5 years agoDaily bump.
GCC Administrator [Sun, 16 Dec 2018 00:16:43 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r267183

5 years agore PR c++/88482 (ICE when wrongly declaring __cxa_allocate_exception)
Jakub Jelinek [Sat, 15 Dec 2018 23:51:31 +0000 (00:51 +0100)]
re PR c++/88482 (ICE when wrongly declaring __cxa_allocate_exception)

PR c++/88482
* except.c (verify_library_fn): New function.
(declare_library_fn): Use it.  Initialize TM even if the non-TM
library function has been user declared.
(do_end_catch): Don't set TREE_NOTHROW on error_mark_node.
(expand_start_catch_block): Don't call initialize_handler_parm
for error_mark_node.
(build_throw): Use verify_library_fn.  Initialize TM even if the
non-TM library function has been user declared.  Don't crash if
any library fn is error_mark_node.

* g++.dg/eh/builtin5.C: New test.
* g++.dg/eh/builtin6.C: New test.
* g++.dg/eh/builtin7.C: New test.
* g++.dg/eh/builtin8.C: New test.
* g++.dg/eh/builtin9.C: New test.
* g++.dg/eh/builtin10.C: New test.
* g++.dg/eh/builtin11.C: New test.
* g++.dg/parse/crash55.C: Adjust expected diagnostics.

* eh_cpp.cc (__cxa_throw): Change DEST argument type from
void * to void (*) (void *).
(_ITM_cxa_throw): Likewise.
* libitm.h (_ITM_cxa_throw): Likewise.
* libitm.texi (_ITM_cxa_throw): Likewise.

From-SVN: r267179

5 years agore PR fortran/88138 (ICE in gfc_arith_concat, at fortran/arith.c:1007)
Steven G. Kargl [Sat, 15 Dec 2018 22:53:26 +0000 (22:53 +0000)]
re PR fortran/88138 (ICE in gfc_arith_concat, at fortran/arith.c:1007)

2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88138
* decl.c (variable_decl): Check that a derived isn't being assigned
an incompatible entity in an initialization.

2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/88138
* gfortran.dg/pr88138.f90: new test.

From-SVN: r267177

5 years agoSmall lambda instantiation tweak.
Jason Merrill [Sat, 15 Dec 2018 22:10:18 +0000 (17:10 -0500)]
Small lambda instantiation tweak.

While looking at something else I noticed that we were passing 0 to the
"nonclass" parameter here; we might as well pass 1, since capture proxies
are always at block scope.

* pt.c (tsubst_expr) [DECL_EXPR]: Ignore class-scope bindings when
looking up a capture proxy.

From-SVN: r267176

5 years agocgraph.h (cgraph_node): Add predicate prevailing_p.
Jan Hubicka [Sat, 15 Dec 2018 21:24:52 +0000 (22:24 +0100)]
cgraph.h (cgraph_node): Add predicate prevailing_p.

* cgraph.h (cgraph_node): Add predicate prevailing_p.
(cgraph_edge): Add predicate possible_call_in_translation_unit_p.
* ipa-prop.c (ipa_write_jump_function): Optimize streaming of ADDR_EXPR.
(ipa_read_jump_function): Add prevails parameter; optimize streaming.
(ipa_read_edge_info): Break out from ...
(ipa_read_node_info): ... here; optimize streaming.
* cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): New
predicate.

From-SVN: r267175

5 years agoipa-utils.c (ipa_merge_profiles): Do no merging when source function has zero count.
Jan Hubicka [Sat, 15 Dec 2018 21:04:29 +0000 (22:04 +0100)]
ipa-utils.c (ipa_merge_profiles): Do no merging when source function has zero count.

* ipa-utils.c (ipa_merge_profiles): Do no merging when source function
has zero count.

From-SVN: r267174

5 years agore PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with...
Jakub Jelinek [Sat, 15 Dec 2018 11:04:41 +0000 (12:04 +0100)]
re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")

PR tree-optimization/88464
PR target/88498
* tree-vect-stmts.c (vect_build_gather_load_calls): For NARROWING
and mask with integral masktype, don't try to permute mask vectors,
instead emit VEC_UNPACK_{LO,HI}_EXPR.  Fix up NOP_EXPR operand.
(vectorizable_store): Handle masked scatters with decl and integral
mask type.
(permute_vec_elements): Allow scalar_dest to be NULL.
* config/i386/i386.c (ix86_get_builtin)
<case IX86_BUILTIN_GATHER3ALTDIV16SF>: Use lowpart_subreg for masks.
<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Don't assume mask and src have
to be the same.

* gcc.target/i386/avx512f-pr88462-1.c: Rename to ...
* gcc.target/i386/avx512f-pr88464-1.c: ... this.  Fix up PR number.
Expect 4 vectorized loops instead of 3.
(f4): New function.
* gcc.target/i386/avx512f-pr88462-2.c: Rename to ...
* gcc.target/i386/avx512f-pr88464-2.c: ... this.  Fix up PR number
and #include.
(avx512f_test): Prepare arguments for f4 and check the results.
* gcc.target/i386/avx512f-pr88464-3.c: New test.
* gcc.target/i386/avx512f-pr88464-4.c: New test.

From-SVN: r267170

5 years agore PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with...
Jakub Jelinek [Sat, 15 Dec 2018 11:02:28 +0000 (12:02 +0100)]
re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")

PR tree-optimization/88464
PR target/88498
* tree-vect-stmts.c (vect_build_gather_load_calls): For NARROWING
and mask with integral masktype, don't try to permute mask vectors,
instead emit VEC_UNPACK_{LO,HI}_EXPR.  Fix up NOP_EXPR operand.
(vectorizable_store): Handle masked scatters with decl and integral
mask type.
(permute_vec_elements): Allow scalar_dest to be NULL.
* config/i386/i386.c (ix86_get_builtin)
<case IX86_BUILTIN_GATHER3ALTDIV16SF>: Use lowpart_subreg for masks.
<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Don't assume mask and src have
to be the same.

* gcc.target/i386/avx512f-pr88462-1.c: Rename to ...
* gcc.target/i386/avx512f-pr88464-1.c: ... this.  Fix up PR number.
Expect 4 vectorized loops instead of 3.
(f4): New function.
* gcc.target/i386/avx512f-pr88462-2.c: Rename to ...
* gcc.target/i386/avx512f-pr88464-2.c: ... this.  Fix up PR number
and #include.
(avx512f_test): Prepare arguments for f4 and check the results.
* gcc.target/i386/avx512f-pr88464-3.c: New test.
* gcc.target/i386/avx512f-pr88464-4.c: New test.

From-SVN: r267169

5 years agoipa.c (cgraph_build_static_cdtor_1): Add OPTIMIZATION and TARGET parameters.
Jan Hubicka [Sat, 15 Dec 2018 10:31:37 +0000 (11:31 +0100)]
ipa.c (cgraph_build_static_cdtor_1): Add OPTIMIZATION and TARGET parameters.

* ipa.c (cgraph_build_static_cdtor_1): Add OPTIMIZATION and TARGET
parameters.
(cgraph_build_static_cdtor): Update.
(build_cdtor): Use OPTIMIZATION and TARGET of the first real cdtor
callsed.

From-SVN: r267168

5 years agore PR c++/84644 (internal compiler error: in warn_misplaced_attr_for_class_type,...
Paolo Carlini [Sat, 15 Dec 2018 09:07:38 +0000 (09:07 +0000)]
re PR c++/84644 (internal compiler error: in warn_misplaced_attr_for_class_type, at cp/decl.c:4718)

/cp
2018-12-15  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84644
* decl.c (check_tag_decl): A decltype with no declarator
doesn't declare anything.

/testsuite
2018-12-15  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84644
* g++.dg/cpp0x/decltype68.C: New.
* g++.dg/cpp0x/decltype-33838.C: Adjust.
* g++.dg/template/spec32.C: Likewise.
* g++.dg/template/ttp22.C: Likewise.

From-SVN: r267165

5 years ago[RS6000] Use gen_hard_reg_clobber in rs6000.c
Alan Modra [Sat, 15 Dec 2018 07:13:19 +0000 (17:43 +1030)]
[RS6000] Use gen_hard_reg_clobber in rs6000.c

I noticed when looking at PR88311 that rs6000_call_sysv should be
using gen_hard_reg_clobber (as the sysv call insns did prior to
introducing rs6000_call_sysv).  This patch fixes that minor
regression, and other like places in rs6000.c.

* config/rs6000/rs6000.c (generate_set_vrsave, rs6000_emit_savres_rtx),
(rs6000_emit_prologue, rs6000_call_aix, rs6000_call_sysv),
(rs6000_call_darwin_1): Use gen_hard_reg_clobber.

From-SVN: r267164

5 years agoDaily bump.
GCC Administrator [Sat, 15 Dec 2018 00:16:20 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r267163

5 years agore PR target/88489 (FAIL: gcc.target/i386/avx512f-vfixupimmss-2.c execution test)
Jakub Jelinek [Fri, 14 Dec 2018 23:21:10 +0000 (00:21 +0100)]
re PR target/88489 (FAIL: gcc.target/i386/avx512f-vfixupimmss-2.c execution test)

PR target/88489
* config/i386/sse.md (UNSPEC_SFIXUPIMM): New unspec enumerator.
(avx512f_sfixupimm<mode><mask_name><round_saeonly_name>): Use it
instead of UNSPEC_FIXUPIMM.

* gcc.target/i386/avx512vl-vfixupimmsd-2.c: New test.
* gcc.target/i386/avx512vl-vfixupimmss-2.c: New test.

From-SVN: r267160

5 years agore PR rtl-optimization/88478 (valgrind error in cselib_record_sets)
Jakub Jelinek [Fri, 14 Dec 2018 23:17:03 +0000 (00:17 +0100)]
re PR rtl-optimization/88478 (valgrind error in  cselib_record_sets)

PR rtl-optimization/88478
* cselib.c (cselib_record_sets): Move sets[i].src_elt tests
after REG_P (dest) test.

* g++.dg/opt/pr88478.C: New test.

From-SVN: r267159

5 years agoPR tree-optimization/88372 - alloc_size attribute is ignored on function pointers
Martin Sebor [Fri, 14 Dec 2018 22:45:55 +0000 (22:45 +0000)]
PR tree-optimization/88372 - alloc_size attribute is ignored on function pointers

gcc/ChangeLog:

PR tree-optimization/88372
* calls.c (maybe_warn_alloc_args_overflow): Handle function pointers.
* tree-object-size.c (alloc_object_size): Same.  Simplify.
* doc/extend.texi (Object Size Checking): Update.
(Other Builtins): Add __builtin_object_size.
(Common Type Attributes): Add alloc_size.
(Common Variable Attributes): Ditto.

gcc/testsuite/ChangeLog:

PR tree-optimization/88372
* gcc.dg/Walloc-size-larger-than-18.c: New test.
* gcc.dg/builtin-object-size-19.c: Same.

From-SVN: r267158

5 years agoPR tree-optimization/87096 - Optimised snprintf is not POSIX conformant
Martin Sebor [Fri, 14 Dec 2018 22:38:08 +0000 (22:38 +0000)]
PR tree-optimization/87096 - Optimised snprintf is not POSIX conformant

gcc/ChangeLog:

PR rtl-optimization/87096
* gimple-ssa-sprintf.c (sprintf_dom_walker::handle_gimple_call): Avoid
folding calls whose bound may exceed INT_MAX.  Diagnose bound ranges
that exceed the limit.

gcc/testsuite/ChangeLog:

PR tree-optimization/87096
* gcc.dg/tree-ssa/builtin-snprintf-4.c: New test.

From-SVN: r267157

5 years agoPR 79738 - Documentation for __attribute__((const)) slightly misleading
Martin Sebor [Fri, 14 Dec 2018 22:16:43 +0000 (22:16 +0000)]
PR 79738 - Documentation for __attribute__((const)) slightly misleading

gcc/ChangeLog:
* doc/extend.texi (attribute const, pure): Clarify.

From-SVN: r267156

5 years ago[PR c++/87814] undefer deferred noexcept on tsubst if request
Alexandre Oliva [Fri, 14 Dec 2018 21:57:07 +0000 (21:57 +0000)]
[PR c++/87814] undefer deferred noexcept on tsubst if request

tsubst_expr and tsubst_copy_and_build are not expected to handle
DEFERRED_NOEXCEPT exprs, but if tsubst_exception_specification takes a
DEFERRED_NOEXCEPT expr with !defer_ok, it just passes the expr on for
tsubst_copy_and_build to barf.

This patch arranges for tsubst_exception_specification to combine the
incoming args with those already stored in a DEFERRED_NOEXCEPT, and
then substitute them into the pattern, when retaining a deferred
noexcept is unacceptable.

for  gcc/cp/ChangeLog

PR c++/87814
* pt.c (tsubst_exception_specification): Handle
DEFERRED_NOEXCEPT with !defer_ok.

for  gcc/testsuite/ChangeLog

PR c++/87814
* g++.dg/cpp1z/pr87814.C: New.

From-SVN: r267155

5 years agox86; Add -mmanual-endbr and cf_check function attribute
H.J. Lu [Fri, 14 Dec 2018 21:35:36 +0000 (21:35 +0000)]
x86; Add -mmanual-endbr and cf_check function attribute

Currently GCC inserts ENDBR instruction at entries of all non-static
functions, unless LTO compilation is used.  Marking all functions,
which are not called indirectly with nocf_check attribute, is not
ideal since 99% of functions in a program may be of this kind.

This patch adds -mmanual-endbr and cf_check function attribute.  They
can be used together with -fcf-protection such that ENDBR instruction
is inserted only at entries of functions with cf_check attribute.  It
can limit number of ENDBR instructions to reduce program size.

gcc/

* config/i386/i386.c (rest_of_insert_endbranch): Insert ENDBR
at the function entry only when -mmanual-endbr isn't used or
there is cf_check function attribute.
(ix86_attribute_table): Add cf_check.
* config/i386/i386.opt: Add -mmanual-endbr.
* doc/extend.texi: Document cf_check attribute.
* doc/invoke.texi: Document -mmanual-endbr.

gcc/testsuite/

* gcc.target/i386/cf_check-1.c: New test.
* gcc.target/i386/cf_check-2.c: Likewise.
* gcc.target/i386/cf_check-3.c: Likewise.
* gcc.target/i386/cf_check-4.c: Likewise.
* gcc.target/i386/cf_check-5.c: Likewise.

From-SVN: r267154

5 years agoMissing changes from "Adjust copy/copyin/copyout/create for OpenACC 2.5"
Thomas Schwinge [Fri, 14 Dec 2018 20:43:12 +0000 (21:43 +0100)]
Missing changes from "Adjust copy/copyin/copyout/create for OpenACC 2.5"

Most of that patch's changes were already committed as part of r261813 "Update
OpenACC data clause semantics to the 2.5 behavior", but not all of them.

libgomp/
* oacc-mem.c (acc_present_or_create): Remove definition and change
to alias of acc_create.
(acc_present_or_copyin): Remove definition and change to alias of
acc_copyin.
* oacc-parallel.c (GOACC_enter_exit_data): Call acc_create instead
of acc_present_or_create.
* testsuite/libgomp.oacc-c-c++-common/data-already-1.c: Remove.
* testsuite/libgomp.oacc-c-c++-common/data-already-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-3.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-4.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-5.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-6.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-7.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-already-8.c: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-1.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-2.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-3.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-4.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-5.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-6.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-7.f: Likewise.
* testsuite/libgomp.oacc-fortran/data-already-8.f: Likewise.

Co-Authored-By: Chung-Lin Tang <cltang@codesourcery.com>
From-SVN: r267153

5 years ago[PR88495] An OpenACC async queue is always synchronized with itself
Thomas Schwinge [Fri, 14 Dec 2018 20:43:02 +0000 (21:43 +0100)]
[PR88495] An OpenACC async queue is always synchronized with itself

An OpenACC async queue is always synchronized with itself, so invocations like
"#pragma acc wait(0) async(0)", or "acc_wait_async (0, 0)" don't make a lot of
sense, but are still valid.

libgomp/
PR libgomp/88495
* plugin/plugin-nvptx.c (nvptx_wait_async): Don't refuse
"identical parameters".
* testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c: Update.
* testsuite/libgomp.oacc-c-c++-common/lib-80.c: Remove.

From-SVN: r267152

5 years ago[PR88484] OpenACC wait directive without wait argument but with async clause
Thomas Schwinge [Fri, 14 Dec 2018 20:42:50 +0000 (21:42 +0100)]
[PR88484] OpenACC wait directive without wait argument but with async clause

We don't correctly handle "#pragma acc wait async (a)" for "a >= 0", handling
as a no-op whereas it should enqueue the appropriate wait operations on
"async (a)".

libgomp/
PR libgomp/88484
* oacc-parallel.c (GOACC_wait): Correct handling for "async >= 0".
* testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c: New file.

From-SVN: r267151

5 years ago[PR88407] [OpenACC] Correctly handle unseen async-arguments
Thomas Schwinge [Fri, 14 Dec 2018 20:42:40 +0000 (21:42 +0100)]
[PR88407] [OpenACC] Correctly handle unseen async-arguments

... which turn the operation into a no-op.

libgomp/
PR libgomp/88407
* plugin/plugin-nvptx.c (nvptx_async_test, nvptx_wait)
(nvptx_wait_async): Unseen async-argument is a no-op.
* testsuite/libgomp.oacc-c-c++-common/async_queue-1.c: Update.
* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-79.c: Likewise.
* testsuite/libgomp.oacc-fortran/lib-12.f90: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-71.c: Merge into...
* testsuite/libgomp.oacc-c-c++-common/lib-69.c: ... this.  Update.
* testsuite/libgomp.oacc-c-c++-common/lib-77.c: Merge into...
* testsuite/libgomp.oacc-c-c++-common/lib-74.c: ... this.  Update

From-SVN: r267150

5 years agoRevise libgomp.oacc-c-c++-common/data-2-lib.c, libgomp.oacc-c-c++-common/data-2.c
Thomas Schwinge [Fri, 14 Dec 2018 20:42:29 +0000 (21:42 +0100)]
Revise libgomp.oacc-c-c++-common/data-2-lib.c, libgomp.oacc-c-c++-common/data-2.c

These are meant to be functionally equivalent (but no longer are), just using
different means.  Also, use the OpenACC "*_async" functions recently added.

libgomp/
* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Revise.
* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.

From-SVN: r267149

5 years agoCorrectly describe OpenACC async/wait dependencies
Chung-Lin Tang [Fri, 14 Dec 2018 20:42:18 +0000 (20:42 +0000)]
Correctly describe OpenACC async/wait dependencies

libgomp/
* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Adjust.
* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/data-3.c: Likewise.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
From-SVN: r267148

5 years ago[PR88370] acc_get_cuda_stream/acc_set_cuda_stream: acc_async_sync, acc_async_noval
Thomas Schwinge [Fri, 14 Dec 2018 20:42:08 +0000 (21:42 +0100)]
[PR88370] acc_get_cuda_stream/acc_set_cuda_stream: acc_async_sync, acc_async_noval

Per my reading of the OpenACC specification (and as supported by secondary
documentation, such as code examples, or presentations), it's valid to call
"acc_get_cuda_stream"/"acc_set_cuda_stream" also with "acc_async_sync",
"acc_async_noval" arguments, not just with the nonnegative values as currently
implemented.

libgomp/
PR libgomp/88370
* libgomp.texi (acc_get_current_cuda_context, acc_get_cuda_stream)
(acc_set_cuda_stream): Clarify.
* oacc-cuda.c (acc_get_cuda_stream, acc_set_cuda_stream): Use
"async_valid_p".
* plugin/plugin-nvptx.c (nvptx_set_cuda_stream): Refuse "async ==
acc_async_sync".
* testsuite/libgomp.oacc-c-c++-common/acc_set_cuda_stream-1.c: New file.
* testsuite/libgomp.oacc-c-c++-common/async_queue-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-84.c: Update.
* testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.

From-SVN: r267147

5 years agoAdd user-friendly diagnostics for OpenACC loop parallelism assigned
Thomas Schwinge [Fri, 14 Dec 2018 20:41:58 +0000 (21:41 +0100)]
Add user-friendly diagnostics for OpenACC loop parallelism assigned

gcc/
* omp-offload.c (inform_oacc_loop): New function.
(execute_oacc_device_lower): Use it to display loop parallelism.
gcc/testsuite/
* c-c++-common/goacc/note-parallelism.c: New test.
* gfortran.dg/goacc/note-parallelism.f90: New test.
* c-c++-common/goacc/classify-kernels-unparallelized.c: Update.
* c-c++-common/goacc/classify-kernels.c: Likewise.
* c-c++-common/goacc/classify-parallel.c: Likewise.
* c-c++-common/goacc/classify-routine.c: Likewise.
* c-c++-common/goacc/kernels-1.c: Likewise.
* c-c++-common/goacc/kernels-double-reduction-n.c: Likewise.
* c-c++-common/goacc/kernels-double-reduction.c: Likewise.
* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise.
* gfortran.dg/goacc/classify-kernels.f95: Likewise.
* gfortran.dg/goacc/classify-parallel.f95: Likewise.
* gfortran.dg/goacc/classify-routine.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-inner.f95: Likewise.

Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
From-SVN: r267146

5 years agoRepair liboffloadmic after "(Partial) OpenMP 5.0 support for GCC 9"
Thomas Schwinge [Fri, 14 Dec 2018 20:41:46 +0000 (21:41 +0100)]
Repair liboffloadmic after "(Partial) OpenMP 5.0 support for GCC 9"

..., which now failed to build, as follows:

    In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    [...]/source-gcc/liboffloadmic/runtime/offload.h:220:12: error: conflicting declaration of C function 'int omp_target_is_present(void*, int)'
      220 | extern int omp_target_is_present(
          |            ^~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                     from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    ./../libgomp/omp.h:166:12: note: previous declaration 'int omp_target_is_present(const void*, int)'
      166 | extern int omp_target_is_present (const void *, int) __GOMP_NOTHROW;
          |            ^~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    [...]/source-gcc/liboffloadmic/runtime/offload.h:236:12: error: conflicting declaration of C function 'int omp_target_memcpy(void*, void*, size_t, size_t, size_t, int, int)'
      236 | extern int omp_target_memcpy(
          |            ^~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                     from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    ./../libgomp/omp.h:167:12: note: previous declaration 'int omp_target_memcpy(void*, const void*, long unsigned int, long unsigned int, long unsigned int, int, int)'
      167 | extern int omp_target_memcpy (void *, const void *, __SIZE_TYPE__,
          |            ^~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    [...]/source-gcc/liboffloadmic/runtime/offload.h:262:12: error: conflicting declaration of C function 'int omp_target_memcpy_rect(void*, void*, size_t, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, int, int)'
      262 | extern int omp_target_memcpy_rect(
          |            ^~~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                     from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    ./../libgomp/omp.h:170:12: note: previous declaration 'int omp_target_memcpy_rect(void*, const void*, long unsigned int, int, const long unsigned int*, const long unsigned int*, const long unsigned int*, const long unsigned int*, const long unsigned int*, int, int)'
      170 | extern int omp_target_memcpy_rect (void *, const void *, __SIZE_TYPE__, int,
          |            ^~~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    [...]/source-gcc/liboffloadmic/runtime/offload.h:285:12: error: conflicting declaration of C function 'int omp_target_associate_ptr(void*, void*, size_t, size_t, int)'
      285 | extern int omp_target_associate_ptr(
          |            ^~~~~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                     from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    ./../libgomp/omp.h:177:12: note: previous declaration 'int omp_target_associate_ptr(const void*, const void*, long unsigned int, long unsigned int, int)'
      177 | extern int omp_target_associate_ptr (const void *, const void *, __SIZE_TYPE__,
          |            ^~~~~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    [...]/source-gcc/liboffloadmic/runtime/offload.h:299:12: error: conflicting declaration of C function 'int omp_target_disassociate_ptr(void*, int)'
      299 | extern int omp_target_disassociate_ptr(
          |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                     from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                     from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
    ./../libgomp/omp.h:179:12: note: previous declaration 'int omp_target_disassociate_ptr(const void*, int)'
      179 | extern int omp_target_disassociate_ptr (const void *, int) __GOMP_NOTHROW;
          |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    Makefile:904: recipe for target 'liboffloadmic_target_la-dv_util.lo' failed
    make[3]: *** [liboffloadmic_target_la-dv_util.lo] Error 1
    make[3]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu/x86_64-intelmicemul-linux-gnu/liboffloadmic'
    Makefile:1031: recipe for target 'all-recursive' failed
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu/x86_64-intelmicemul-linux-gnu/liboffloadmic'
    Makefile:12707: recipe for target 'all-target-liboffloadmic' failed
    make[1]: *** [all-target-liboffloadmic] Error 2
    make[1]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu'
    Makefile:941: recipe for target 'all' failed
    make: *** [all] Error 2

liboffloadmic/
* runtime/offload.h (omp_target_is_present, omp_target_memcpy)
(omp_target_memcpy_rect, omp_target_associate_ptr)
(omp_target_disassociate_ptr): Adjust to libgomp changes.

From-SVN: r267145

5 years ago[PR86823] retain deferred access checks from outside firewall
Alexandre Oliva [Fri, 14 Dec 2018 20:06:15 +0000 (20:06 +0000)]
[PR86823] retain deferred access checks from outside firewall

We used to preserve deferred access check along with resolved template
ids, but a tentative parsing firewall introduced additional layers of
deferred access checks, so that we don't preserve the checks we
want to any more.

This patch moves the deferred access checks from outside the firewall
into it.

From: Jason Merrill <jason@redhat.com>
for  gcc/cp/ChangeLog

PR c++/86823
* parser.c (cp_parser_template_id): Rearrange deferred access
checks into the firewall.

From: Alexandre Oliva <aoliva@redhat.com>
for  gcc/testsuite/ChangeLog

PR c++/86823
* g++.dg/pr86823.C: New.

From-SVN: r267144

5 years agore PR c++/82294 (Array of objects with constexpr constructors initialized from space...
Jakub Jelinek [Fri, 14 Dec 2018 19:37:38 +0000 (20:37 +0100)]
re PR c++/82294 (Array of objects with constexpr constructors initialized from space-inefficient memory image)

PR c++/82294
PR c++/87436
* expr.h (categorize_ctor_elements): Add p_unique_nz_elts argument.
* expr.c (categorize_ctor_elements_1): Likewise.  Compute it like
p_nz_elts, except don't multiply it by mult.  Adjust recursive call.
Fix up COMPLEX_CST handling.
(categorize_ctor_elements): Add p_unique_nz_elts argument, initialize
it and pass it through to categorize_ctor_elements_1.
(mostly_zeros_p, all_zeros_p): Adjust categorize_ctor_elements callers.
* gimplify.c (gimplify_init_constructor): Likewise.  Don't force
ctor into readonly data section if num_unique_nonzero_elements is
smaller or equal to 1/8 of num_nonzero_elements and size is >= 64
bytes.

* g++.dg/tree-ssa/pr82294.C: New test.
* g++.dg/tree-ssa/pr87436.C: New test.

From-SVN: r267143

5 years agore PR c++/82294 (Array of objects with constexpr constructors initialized from space...
Jakub Jelinek [Fri, 14 Dec 2018 19:36:33 +0000 (20:36 +0100)]
re PR c++/82294 (Array of objects with constexpr constructors initialized from space-inefficient memory image)

PR c++/82294
PR c++/87436
* init.c (build_vec_init): Change num_initialized_elts type from int
to HOST_WIDE_INT.  Build a RANGE_EXPR if e needs to be repeated more
than once.

From-SVN: r267142

5 years agoARM] Improve robustness of -mslow-flash-data
Thomas Preud'homme [Fri, 14 Dec 2018 19:20:29 +0000 (19:20 +0000)]
ARM] Improve robustness of -mslow-flash-data

Current code to handle -mslow-flash-data in machine description files
suffers from a number of issues which this patch fixes:

1) The insn_and_split in vfp.md to load a generic floating-point
constant via GPR first and move it to VFP register are guarded by
!reload_completed which is forbidden explicitely in the GCC internals
documentation section 17.2 point 3;

2) A number of testcase in the testsuite ICEs under -mslow-flash-data
when targeting the hardfloat ABI [1];

3) Instructions performing load from literal pool are not disabled.

These problems are addressed by 2 separate actions:

1) Making the splitters take a clobber and changing the expanders
accordingly to generate a mov with clobber in cases where a literal
pool would be used. The splitter can thus be enabled after reload since
it does not call gen_reg_rtx anymore;

2) Adding new predicates and constraints to disable literal pool loads
in existing instructions when -mslow-flash-data is in effect.

The patch also rework the splitter for DFmode slightly to generate an
intermediate DI load instead of 2 intermediate SI loads, thus relying on
the existing DI splitters instead of redoing their job. At last, the
patch adds some missing arm_fp_ok effective target to some of the
slow-flash-data testcases.

[1]
c-c++-common/Wunused-var-3.c
gcc.c-torture/compile/pr72771.c
gcc.c-torture/compile/vector-5.c
gcc.c-torture/compile/vector-6.c
gcc.c-torture/execute/20030914-1.c
gcc.c-torture/execute/20050316-1.c
gcc.c-torture/execute/pr59643.c
gcc.dg/builtin-tgmath-1.c
gcc.dg/debug/pr55730.c
gcc.dg/graphite/interchange-7.c
gcc.dg/pr56890-2.c
gcc.dg/pr68474.c
gcc.dg/pr80286.c
gcc.dg/torture/pr35227.c
gcc.dg/torture/pr65077.c
gcc.dg/torture/pr86363.c
g++.dg/torture/pr81112.C
g++.dg/torture/pr82985.C
g++.dg/warn/Wunused-var-7.C
and a lot more in libstdc++ in special_functions/*_comp_ellint_* and
special_functions/*_ellint_* directories.

2018-12-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.md (arm_movdi): Split if -mslow-flash-data and
    source is a constant that would be loaded by literal pool.
    (movsf expander): Generate a no_literal_pool_sf_immediate insn if
    -mslow-flash-data is present, targeting hardfloat ABI and source is a
    float constant that cannot be loaded via vmov.
    (movdf expander): Likewise but generate a no_literal_pool_df_immediate
    insn.
    (arm_movsf_soft_insn): Split if -mslow-flash-data and source is a
    float constant that would be loaded by literal pool.
    (softfloat constant movsf splitter): Splitter for the above case.
    (movdf_soft_insn): Split if -mslow-flash-data and source is a float
    constant that would be loaded by literal pool.
    (softfloat constant movdf splitter): Splitter for the above case.
    * config/arm/constraints.md (Pz): Document existing constraint.
    (Ha): Define constraint.
    (Tu): Likewise.
    * config/arm/predicates.md (hard_sf_operand): New predicate.
    (hard_df_operand): Likewise.
    * config/arm/thumb2.md (thumb2_movsi_insn): Split if
    -mslow-flash-data and constant would be loaded by literal pool.
    * constant/arm/vfp.md (thumb2_movsi_vfp): Likewise and disable constant
    load in VFP register.
    (movdi_vfp): Likewise.
    (thumb2_movsf_vfp): Use hard_sf_operand as predicate for source to
    prevent match for a constant load if -mslow-flash-data and constant
    cannot be loaded via vmov.  Adapt constraint accordingly by
    using Ha instead of E for generic floating-point constant load.
    (thumb2_movdf_vfp): Likewise using hard_df_operand predicate instead.
    (no_literal_pool_df_immediate): Add a clobber to use as the
    intermediate general purpose register and also enable it after reload
    but disable it constant is a valid FP constant.  Add constraints and
    generate a DI intermediate load rather than 2 SI loads.
    (no_literal_pool_sf_immediate): Add a clobber to use as the
    intermediate general purpose register and also enable it after
    reload.

2018-11-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/testsuite/
    * gcc.target/arm/thumb2-slow-flash-data-2.c: Require arm_fp_ok
    effective target.
    * gcc.target/arm/thumb2-slow-flash-data-3.c: Likewise.
    * gcc.target/arm/thumb2-slow-flash-data-4.c: Likewise.
    * gcc.target/arm/thumb2-slow-flash-data-5.c: Likewise.

From-SVN: r267141

5 years agodigest: Remove empty directory.
Iain Buclaw [Fri, 14 Dec 2018 18:03:58 +0000 (18:03 +0000)]
digest: Remove empty directory.

libphobos/ChangeLog:

2018-12-14  Iain Buclaw  <ibuclaw@gdcproject.org>

* src/std/internal/digest: Remove empty directory.

From-SVN: r267138

5 years agore PR target/88474 (Inline built-in hypot for -ffast-math)
Uros Bizjak [Fri, 14 Dec 2018 17:04:48 +0000 (18:04 +0100)]
re PR target/88474 (Inline built-in hypot for -ffast-math)

PR target/88474
* internal-fn.def (HYPOT): New.
* optabs.def (hypot_optab): New.
* config/i386/i386.md (hypot<mode>3): New expander.

From-SVN: r267137

5 years ago* target.def (post_cfi_startproc): Fix text.
Jeff Law [Fri, 14 Dec 2018 16:48:50 +0000 (09:48 -0700)]
* target.def (post_cfi_startproc): Fix text.

From-SVN: r267136

5 years ago[PATCH 1/3][GCC] Add new target hook asm_post_cfi_startproc
Sam Tebbs [Fri, 14 Dec 2018 15:52:05 +0000 (15:52 +0000)]
[PATCH 1/3][GCC] Add new target hook asm_post_cfi_startproc

2018-12-14  Sam Tebbs  <sam.tebbs@arm.com>

* doc/tm.texi (TARGET_ASM_POST_CFI_STARTPROC): Define.
* doc/tm.texi.in (TARGET_ASM_POST_CFI_STARTPROC): Define.
* dwarf2out.c (dwarf2out_do_cfi_startproc): Trigger the hook.
* hooks.c (hook_void_FILEptr_tree): Define.
* hooks.h (hook_void_FILEptr_tree): Define.
* target.def (post_cfi_startproc): Define.

From-SVN: r267135

5 years ago[offloading] Error on missing symbols
Tom de Vries [Fri, 14 Dec 2018 13:48:56 +0000 (13:48 +0000)]
[offloading] Error on missing symbols

When compiling an OpenMP or OpenACC program containing a reference in the
offloaded code to a symbol that has not been included in the offloaded code,
the offloading compiler may ICE in lto1.

Fix this by erroring out instead, mentioning the problematic symbol:
...
error: variable 'var' has been referenced in offloaded code but hasn't
  been marked to be included in the offloaded code
lto1: fatal error: errors during merging of translation units
compilation terminated.
...

Build x86_64 with nvptx accelerator and reg-tested libgomp.

Build x86_64 and reg-tested libgomp.

2018-12-14  Tom de Vries  <tdevries@suse.de>

* lto-cgraph.c (verify_node_partition): New function.
(input_overwrite_node, input_varpool_node): Use verify_node_partition.

* testsuite/libgomp.c-c++-common/function-not-offloaded-aux.c: New test.
* testsuite/libgomp.c-c++-common/function-not-offloaded.c: New test.
* testsuite/libgomp.c-c++-common/variable-not-offloaded.c: New test.
* testsuite/libgomp.oacc-c-c++-common/function-not-offloaded.c: New test.
* testsuite/libgomp.oacc-c-c++-common/variable-not-offloaded.c: New test.

From-SVN: r267134

5 years agox86: Don't use get_frame_size when finalizing stack frame
H.J. Lu [Fri, 14 Dec 2018 12:38:04 +0000 (12:38 +0000)]
x86: Don't use get_frame_size when finalizing stack frame

get_frame_size () returns used stack slots during compilation, which
may be optimized out later.  Since ix86_find_max_used_stack_alignment
is called by ix86_finalize_stack_frame_flags to check if stack frame
is required, there is no need to call get_frame_size () which may give
inaccurate final stack frame size.

Tested on AVX512 machine configured with

--with-arch=native --with-cpu=native

gcc/

PR target/88483
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Don't
use get_frame_size ().

gcc/testsuite/

PR target/88483
* gcc.target/i386/stackalign/pr88483.c: New test.

From-SVN: r267133

5 years agoFix LRA bug
Andrew Stubbs [Fri, 14 Dec 2018 11:49:28 +0000 (11:49 +0000)]
Fix LRA bug

This patch fixes an ICE building libgfortran/random.c.

The problem was an adddi3 instruction that had an eliminable frame pointer.
GCN adddi3 includes a match_scratch, which LRA substitutes with a REG, and
checks if it can be converted back to a scratch afterwards.  In the meantime,
the add was converted to a move, meaning that the instruction pattern
completely changed, thus causing a segfault when the instruction is revisited
in restore_scratches.

2018-12-14  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* gcc/lra-int.h (lra_register_new_scratch_op): Add third parameter.
* gcc/lra-remat.c (update_scratch_ops): Pass icode to
lra_register_new_scratch_op.
* gcc/lra.c (struct sloc): Add icode field.
(lra_register_new_scratch_op): Add icode parameter.
Use icode to skip insns that have changed beyond recognition.

From-SVN: r267132