gcc.git
5 years agoFix previous commit.
Jan Hubicka [Thu, 21 Nov 2019 14:59:20 +0000 (15:59 +0100)]
Fix previous commit.

        * ipa-prop.h (ipa_release_agg_values): Add parameter RELEASE_VECTOR.

From-SVN: r278554

5 years agoipa-fnsummary.c (evaluate_conditions_for_known_args): Be ready for some vectors to...
Jan Hubicka [Thu, 21 Nov 2019 14:58:08 +0000 (15:58 +0100)]
ipa-fnsummary.c (evaluate_conditions_for_known_args): Be ready for some vectors to not be allocated.

* ipa-fnsummary.c (evaluate_conditions_for_known_args): Be
ready for some vectors to not be allocated.
(evaluate_properties_for_edge): Document better; make
known_vals and known_aggs caller allocated; avoid determining
values of parameters which are not used.
(ipa_merge_fn_summary_after_inlining): Pre allocate known_vals and
known_aggs.
* ipa-inline-analysis.c (do_estimate_edge_time): Likewise.
(do_estimate_edge_size): Likewise.
(do_estimate_edge_hints): Likewise.
* ipa-cp.c (ipa_get_indirect_edge_target_1): Do not early exit when
values are not known.
(ipa_release_agg_values): Add option to not release vector itself.

From-SVN: r278553

5 years agoTestsuite: Fix fp-int-convert-timode-1.c testism.
Tamar Christina [Thu, 21 Nov 2019 14:08:10 +0000 (14:08 +0000)]
Testsuite: Fix fp-int-convert-timode-1.c testism.

The test fp-int-convert-timode-1.c uses FE_TONEAREST without
actually checking if the target has defined it.

Like the rest of the tests I now add a check to see if the target
has actually implemented it.

This fixed Arm newlib target failures.

Regtested on aarch64-none-elf and aarch64_be-none-elf and no issues.

Committed under the GCC obvious rules.

gcc/testsuite/ChangeLog:

* gcc.dg/torture/fp-int-convert-timode-1.c: Add check for FE_TONEAREST.

From-SVN: r278552

5 years agocfgloop.h (loop_iterator::~loop_iterator): Remove.
Richard Biener [Thu, 21 Nov 2019 13:46:18 +0000 (13:46 +0000)]
cfgloop.h (loop_iterator::~loop_iterator): Remove.

2019-11-21  Richard Biener  <rguenther@suse.de>

* cfgloop.h (loop_iterator::~loop_iterator): Remove.
(loop_iterator::to_visit): Use an auto_vec with internal storage.
(loop_iterator::loop_iterator): Adjust.
* cfganal.c (compute_dominance_frontiers_1): Fold into...
(compute_dominance_frontiers): ... this.  Hoist invariant
get_immediate_dominator call.
(compute_idf): Use a work-set instead of a work-list for more
optimal iteration order and duplicate avoidance.
* tree-into-ssa.c (mark_phi_for_rewrite): Avoid re-allocating
the vector all the time, instead pre-allocate the vector only
once.
(delete_update_ssa): Simplify.
* vec.h (va_heap::release): Disable -Wfree-nonheap-object around it.

From-SVN: r278550

5 years ago[AArch64] Add -fno-vect-cost-model to sve2/whilerw_1.c
Richard Sandiford [Thu, 21 Nov 2019 12:03:54 +0000 (12:03 +0000)]
[AArch64] Add -fno-vect-cost-model to sve2/whilerw_1.c

Bumping the cost of vec_to_scalar made the .s loop in
gcc.target/aarch64/sve2/whilerw_1.c use a runtime profitability check,
like the .d version already did.  Since the cost model isn't really
being tested here, the most robust fix seemed to be to disable it,
which I should really have done from the outset.

2019-11-21  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.target/aarch64/sve2/whilerw_1.c: Add -fno-vect-cost-model.
Require x0 in the .d test too.

From-SVN: r278549

5 years agore PR tree-optimization/91355 (optimized code does not call destructor while unwindin...
Jakub Jelinek [Thu, 21 Nov 2019 10:59:27 +0000 (11:59 +0100)]
re PR tree-optimization/91355 (optimized code does not call destructor while unwinding after exception)

PR tree-optimization/91355
* tree-ssa-sink.c (select_best_block): Use >= rather than >
for early_bb scaled count with best_bb count comparison.

* g++.dg/torture/pr91355.C: New test.

From-SVN: r278548

5 years ago[Darwin, testsuite] Fix fail of gnu2x-attrs-1.c.
Iain Sandoe [Thu, 21 Nov 2019 10:41:41 +0000 (10:41 +0000)]
[Darwin, testsuite] Fix fail of gnu2x-attrs-1.c.

This test fails on targets without symbol alias support, but we don't
want to skip it entirely with the usual dg-requires, thus expect the
error on the alias line.

gcc/testsuite/ChangeLog:

2019-11-21  Iain Sandoe  <iain@sandoe.co.uk>

* gcc.dg/gnu2x-attrs-1.c: Expect an error for the alias case
on Darwin.

From-SVN: r278547

5 years agoipa-fnsummary.h (enum ipa_hints_vals): Fix comment typo, preffer -> prefer.
Jakub Jelinek [Thu, 21 Nov 2019 09:39:47 +0000 (10:39 +0100)]
ipa-fnsummary.h (enum ipa_hints_vals): Fix comment typo, preffer -> prefer.

* ipa-fnsummary.h (enum ipa_hints_vals): Fix comment typo,
preffer -> prefer.
* ipa-inline.c (edge_badness): Likewise.
* lto-streamer.h (class lto_location_cache): Likewise.
* tree-ssa-sink.c (select_best_block): Likewise.  Fix comment typos,
gratutious -> gratuitous.

From-SVN: r278546

5 years agorevert: re PR tree-optimization/91790 (ICE: verify_ssa failed (error: definition...
Richard Biener [Thu, 21 Nov 2019 09:16:46 +0000 (09:16 +0000)]
revert: re PR tree-optimization/91790 (ICE: verify_ssa failed (error: definition in block 2 follows the use))

2019-11-21  Richard Biener  <rguenther@suse.de>

Revert
2019-09-17  Richard Biener  <rguenther@suse.de>

PR tree-optimization/91790
* tree-vect-stmts.c (vectorizable_load): For BB vectorization
use the correct DR for setting up realignment.

From-SVN: r278544

5 years agocfganal.c (pre_and_rev_post_order_compute_fn): Use an auto_bb_flag instead of an...
Richard Biener [Thu, 21 Nov 2019 08:39:53 +0000 (08:39 +0000)]
cfganal.c (pre_and_rev_post_order_compute_fn): Use an auto_bb_flag instead of an sbitmap for visited handling.

2019-11-21  Richard Biener  <rguenther@suse.de>

* cfganal.c (pre_and_rev_post_order_compute_fn): Use an
auto_bb_flag instead of an sbitmap for visited handling.
* lra.c (lra_insn_recog_data_pool): New.
(free_insn_recog_data): Adjust.
(finish_insn_recog_data): Release lra_insn_recog_data_pool.
(lra_set_insn_recog_data): Allocate from lra_insn_recog_data_pool.
* tree-ssa-structalias.c (equiv_class_hasher): Change to nofree.
(equiv_class_obstack): New.
(equiv_class_lookup_or_add): Allocate from equiv_class_obstack.
(perform_var_substitution): Initialize equiv_class_obstack.
(free_var_substitution_info): Free equiv_class_obstack.

From-SVN: r278543

5 years agoAvoid quadratic behaviour of early inliner.
Jan Hubicka [Thu, 21 Nov 2019 08:15:47 +0000 (09:15 +0100)]
Avoid quadratic behaviour of early inliner.

* ipa-inline.c (want_early_inline_function_p): Do not estimate
edge growth when callee function is very large.
* ipa-inline.h (estimate_min_edge_growth): New.

From-SVN: r278542

5 years agoIncremental updating of inline summaries.
Jan Hubicka [Thu, 21 Nov 2019 08:03:01 +0000 (09:03 +0100)]
Incremental updating of inline summaries.

        * ipa-fnsummary.c (ipa_fn_summary::account_size_time): Allow
negative time in calls summary; correct roundoff errors
leading to negative times.
(ipa_merge_fn_summary_after_inlining): Update calls size time table
if present.
(ipa_update_overall_fn_summary): Add RESET parameter.
* ipa-fnsummary.h (ipa_update_overall_fn_summary): Update prototype.
* ipa-inline-transform.c (inline_call): Enable incremental updates.

From-SVN: r278541

5 years agore PR go/92605 (r278509 causes/reveals issue in building go library)
Ian Lance Taylor [Thu, 21 Nov 2019 01:06:47 +0000 (01:06 +0000)]
re PR go/92605 (r278509 causes/reveals issue in building go library)

PR go/92605
    runtime: declare runtime_usestackmaps in stack.c, not runtime.h

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/208161

From-SVN: r278540

5 years agomksysinfo: use type aliases for time struct field types
Ian Lance Taylor [Thu, 21 Nov 2019 01:03:55 +0000 (01:03 +0000)]
mksysinfo: use type aliases for time struct field types

    Also fix a case where grep wasn't redirecting to /dev/null.

    Fixes golang/go#35713

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/208160

From-SVN: r278539

5 years agore PR c++/90842 (ICE in poplevel, at cp/decl.c:585)
Jakub Jelinek [Thu, 21 Nov 2019 01:00:43 +0000 (02:00 +0100)]
re PR c++/90842 (ICE in poplevel, at cp/decl.c:585)

PR c++/90842
* parser.c (cp_parser_decl_specifier_seq): For concept or typedef
break early if CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR.
For type specifiers, set CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS
if CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR is set.

* g++.dg/cpp1y/lambda-generic-90842.C: New test.

Co-Authored-By: Jason Merrill <jason@redhat.com>
From-SVN: r278538

5 years agoDaily bump.
GCC Administrator [Thu, 21 Nov 2019 00:16:35 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r278537

5 years agoAdd test for PR c++/92443.
Marek Polacek [Wed, 20 Nov 2019 22:59:20 +0000 (22:59 +0000)]
Add test for PR c++/92443.

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

From-SVN: r278534

5 years agoRestore stmt def types after scheduling two-operation SLP
Richard Sandiford [Wed, 20 Nov 2019 21:15:54 +0000 (21:15 +0000)]
Restore stmt def types after scheduling two-operation SLP

2019-11-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-slp.c (vect_schedule_slp_instance): Restore stmt
def types for two-operation SLP.

From-SVN: r278533

5 years agoRestrict bb-slp-40.c to targets with VnQI addition (PR 92366)
Richard Sandiford [Wed, 20 Nov 2019 21:13:05 +0000 (21:13 +0000)]
Restrict bb-slp-40.c to targets with VnQI addition (PR 92366)

bb-slp-40.c fails on SPARC targets without VIS4 because it
requires addition on vectors of bytes.  There doesn't seem to be
an existing target selector for this, so I added vect_char_add.
(Wasn't sure whether to use vect_char_add, for consistency
with vect_no_int_add/vect_int_mult etc., or vect_add_char for
consistency with vect_shift_char etc.)

I took the target list from vect_int and removed targets that didn't
seem to support the operation (namely sparc*, since we don't seem to
have any test for VIS4, niagara7 or m8, and alpha*-*-*.)

2019-11-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR testsuite/92366
* doc/sourcebuild.texi (vect_char_add): Document.

gcc/testsuite/
PR testsuite/92366
* lib/target-supports.exp (check_effective_target_vect_char_add):
New proc.
* gcc.dg/vect/bb-slp-40.c: Require vect_char_add instead of vect_int.

From-SVN: r278532

5 years agoAdjust expected output for bb-slp-21.c (PR 92527)
Richard Sandiford [Wed, 20 Nov 2019 21:08:52 +0000 (21:08 +0000)]
Adjust expected output for bb-slp-21.c (PR 92527)

After r278246, we can try building the out[] store value from scalars
if the target has no multiplication support.  That's not necessarily
a good thing, but like most of vect/, this test is run with the cost
model disabled.

2019-11-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
PR testsuite/92527
* gcc.dg/vect/bb-slp-21.c: Expect both SLP groups to be vectorized,
regardless of whether the target supports multiplication.

From-SVN: r278531

5 years agotypeck2.c (build_x_arrow): Early return if decay_conversion returns error_mark_node.
Paolo Carlini [Wed, 20 Nov 2019 21:03:05 +0000 (21:03 +0000)]
typeck2.c (build_x_arrow): Early return if decay_conversion returns error_mark_node.

/gcc
2019-11-20  Paolo Carlini  <paolo.carlini@oracle.com>

* typeck2.c (build_x_arrow): Early return if decay_conversion
returns error_mark_node.

/testsuite
2019-11-20  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/parse/error43.C: Adjust expected error.

From-SVN: r278530

5 years agodrop attempt to reuse cgraph callees for -fcallgraph-info
Alexandre Oliva [Wed, 20 Nov 2019 20:54:31 +0000 (20:54 +0000)]
drop attempt to reuse cgraph callees for -fcallgraph-info

The information in cgraph callees is released long before we get to
the point in which -fcallgraph-info edges are dumped, or even
expanded.  It doesn't make sense to retain it longer: the edges
created for -fcallgraph-info are much smaller, and they don't even
coexist, so not even peak use grows.

for  gcc/ChangeLog

* function.h (CALLEE_FROM_CGRAPH_P): Remove.
* function.c (record_final_call): Record even calls that might
have been in the cgraph.
* toplev.c (dump_final_node_vcg): Skip iteration over cgraph
callees.

From-SVN: r278529

5 years agoSwitch gcc ftp URL's to https
Janne Blomqvist [Wed, 20 Nov 2019 20:24:48 +0000 (22:24 +0200)]
Switch gcc ftp URL's to https

The FTP protocol is getting long in the tooth, and we should emphasize
HTTPS where that is available. This patch changes various gcc.gnu.org
URL's to instead use HTTPS.

For instance, kernel.org shut down FTP access in 2017, with the
explanation:

- The protocol is inefficient and requires adding awkward kludges to
  firewalls and load-balancing daemons
- FTP servers have no support for caching or accelerators, which has
  significant performance impacts
- Most software implementations have stagnated and see infrequent
  updates

ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

        * configure.ac: Use https for gcc.gnu.org.
        * configure: Regenerated.

gcc/ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

        * configure.ac: Use https for gcc.gnu.org.
        * configure: Regenerated.
        * doc/install.texi: Use https for gcc.gnu.org.
        * doc/sourcebuild.texi: Likewise.

gcc/testsuite/ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

        * README: Use https for gcc.gnu.org.

libstdc++-v3/ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

        * doc/html/api.html: Use https for gcc.gnu.org.
        * doc/xml/api.xml: Likewise.

maintainer-scripts/ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

        * gcc_release: Use https for gcc.gnu.org.

From-SVN: r278526

5 years agoPR 92463 MPFR modernization: Revert r269139
Janne Blomqvist [Wed, 20 Nov 2019 20:08:29 +0000 (22:08 +0200)]
PR 92463 MPFR modernization: Revert r269139

Commit r269139 fixed an accidental dependency on MPFR 3.0. As we now
require at least MPFR 3.1.0+ we can revert it and instead use the
simpler MPFR 3.0+ code.

ChangeLog entry of the original commit was:

2019-02-23  David Malcolm  <dmalcolm@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>

        PR middle-end/88074
        * simplify.c (norm2_do_sqrt, gfc_simplify_norm2): Use
        mpfr_number_p && !mpfr_zero_p instead of mpfr_regular_p.
        (norm2_add_squared): Likewise.  Use mp_exp_t rather than mpfr_exp_t.

ChangeLog for this commit:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

PR fortran/92463
Revert r269139
* simplify.c (norm2_do_sqrt, gfc_simplify_norm2): Use
mpfr_regular_p instead of mpfr_number_p && !mpfr_zero_p.
(norm2_add_squared): Likewise.  Use mpfr_exp_t rather than
mp_exp_t.

From-SVN: r278525

5 years agoPR 92463 MPFR modernization in GFortran
Janne Blomqvist [Wed, 20 Nov 2019 20:01:25 +0000 (22:01 +0200)]
PR 92463 MPFR modernization in GFortran

Now that we require a minimum of MPFR 3.1.0+ to build GCC, we can do
some modernization of the MPFR usage in the GFortran frontend.

This patch replaces

1) GMP_RND* with MPFR_RND*

2) mp_exp_t with mpfr_exp_t

3) mp_prec_t with mpfr_prec_t

4) mp_rnd_t with mpfr_rnd_t

gcc/fortran/ChangeLog:

2019-11-20  Janne Blomqvist  <jb@gcc.gnu.org>

PR fortran/92463
* arith.c (gfc_mpfr_to_mpz): Change mp_exp_t to mpfr_exp_t.
(gfc_check_real_range): Likewise.
* gfortran.h (GFC_RND_MODE): Change GMP_RNDN to MPFR_RNDN.
* module.c (mio_gmp_real): Change mp_exp_t to mpfr_exp_t.
* simplify.c (degrees_f): Change mp_rnd_t to mpfr_rnd_t.
(radians_f): Likewise.
(fullprec_erfc_scaled): Change mp_prec_t to mpfr_prec_t.
(asympt_erfc_scaled): Likewise.
(gfc_simplify_nearest): Change mp_exp_t to mpfr_exp_t, and
GMP_RND* to MPFR_RND*.

From-SVN: r278523

5 years ago[AArch64] Fix vrbit_1.c test failure
Wilco Dijkstra [Wed, 20 Nov 2019 17:58:39 +0000 (17:58 +0000)]
[AArch64] Fix vrbit_1.c test failure

The vrbit_1 test which was missing a flag to disable code sharing.
Committed as obvious.

    testsuite/
* gcc.target/aarch64/simd/vrbit_1.c: Add -fno-ipa-icf.

From-SVN: r278519

5 years agoAMD GCN symbol output with null cfun
Julian Brown [Wed, 20 Nov 2019 17:58:30 +0000 (17:58 +0000)]
AMD GCN symbol output with null cfun

gcc/
* config/gcn/gcn.c (gcn_asm_output_symbol_ref): Handle null cfun.

Reviewed-by: Andrew Stubbs <ams@codesourcery.com>
From-SVN: r278518

5 years agoAMD GCN libgomp plugin queue-full condition locking fix
Julian Brown [Wed, 20 Nov 2019 17:56:30 +0000 (17:56 +0000)]
AMD GCN libgomp plugin queue-full condition locking fix

libgomp/
* plugin/plugin-gcn.c (wait_for_queue_nonfull): Don't lock/unlock
aq->mutex here.
(queue_push_launch): Lock aq->mutex before calling
wait_for_queue_nonfull.
(queue_push_callback): Likewise.
(queue_push_asyncwait): Likewise.
(queue_push_placeholder): Likewise.

Reviewed-by: Andrew Stubbs <ams@codesourcery.com>
From-SVN: r278517

5 years agoFix host-to-device copies from rodata for AMD GCN
Julian Brown [Wed, 20 Nov 2019 17:53:31 +0000 (17:53 +0000)]
Fix host-to-device copies from rodata for AMD GCN

libgomp/
* plugin/plugin-gcn.c (hsa_memory_copy_wrapper): New.
(copy_data, GOMP_OFFLOAD_host2dev): Use above function.
(GOMP_OFFLOAD_dev2host, GOMP_OFFLOAD_dev2dev): Check hsa_memory_copy
return code.

Reviewed-by: Andrew Stubbs <ams@codesourcery.com>
From-SVN: r278516

5 years agojit: fix ICE with GCC_JIT_BOOL_OPTION_SELFCHECK_GC since r278084 (PR jit/92483)
David Malcolm [Wed, 20 Nov 2019 17:51:41 +0000 (17:51 +0000)]
jit: fix ICE with GCC_JIT_BOOL_OPTION_SELFCHECK_GC since r278084 (PR jit/92483)

Since r278084 (part of the params refactoring), most of libgccjit's
test suite has been ICEing.

The root cause is that jit-playback.c injects params to its fake_args
here:

  /* Aggressively garbage-collect, to shake out bugs: */
  if (get_bool_option (GCC_JIT_BOOL_OPTION_SELFCHECK_GC))
    {
      ADD_ARG ("--param");
      ADD_ARG ("ggc-min-expand=0");
      ADD_ARG ("--param");
      ADD_ARG ("ggc-min-heapsize=0");
    }

(building a vec of char * where the char * are allocated using xstrdup)

and r278084 added this logic to decode_cmdline_options_to_array:

964       /* Interpret "--param" "key=name" as "--param=key=name".  */
965       const char *needle = "--param";
966       if (i + 1 < argc && strcmp (opt, needle) == 0)
967 {
968   const char *replacement
969     = opts_concat (needle, "=", argv[i + 1], NULL);
970   argv[++i] = replacement;
971 }

Note that at line 970 it manipulates the argv in-place, inserting a
new option allocated with opts_concat, which uses opts_obstack
(itself initialized from toplev::main).

jit-playback.c cleans up its fake arguments using "free", at which
point we have a free of the middle of an obstack and an ICE.

This patch fixes the issue by using the new syntax for the params.

Fixes all 60 FAILs in jit.sum, restoring the number of PASS results
from 2033 to 10469.

gcc/jit/ChangeLog:
PR jit/92483
* jit-playback.c (gcc::jit::playback::context::make_fake_args):
Update GCC_JIT_BOOL_OPTION_SELFCHECK_GC for new --param syntax.

From-SVN: r278515

5 years agoOpenACC "present" subarrays: runtime API return value and unmapping fixes
Julian Brown [Wed, 20 Nov 2019 17:51:09 +0000 (17:51 +0000)]
OpenACC "present" subarrays: runtime API return value and unmapping fixes

PR libgomp/92511

libgomp/
* oacc-mem.c (present_create_copy): Fix device pointer return value in
case of "present" subarray.  Use tgt->tgt_start instead of tgt->to_free
in non-present/create case.
(delete_copyout): Change error condition to fail only on copies outside
of mapped block.  Adjust error message accordingly.
* testsuite/libgomp.oacc-c-c++-common/copyin-devptr-1.c: New test.
* testsuite/libgomp.oacc-c-c++-common/copyin-devptr-2.c: New test.
* testsuite/libgomp.oacc-c-c++-common/lib-20.c: Adjust expected error
message.
* testsuite/libgomp.oacc-c-c++-common/lib-23.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-22.c: Allow test to pass now.
* testsuite/libgomp.oacc-c-c++-common/lib-30.c: Likewise.

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

5 years agoImplement inline call summaries.
Jan Hubicka [Wed, 20 Nov 2019 17:03:43 +0000 (18:03 +0100)]
Implement inline call summaries.

* ipa-fnsummary.c (ipa_fn_summary::account_size_time): Add CALL
parameter and update call_size_time_table.
(ipa_fn_summary::max_size_time_table_size): New constant.
(estimate_calls_size_and_time_1): Break out from ...
(estimate_calls_size_and_time): ... here; implement summary production.
(summarize_calls_size_and_time): New function.
(ipa_call_context::estimate_size_and_time): Bypass
estimate_calls_size_and_time for leaf functions.
(ipa_update_overall_fn_summary): Likewise.
* ipa-fnsummary.h (call_size_time_table): New.
(ipa_fn_summary::account_size_time): Update prototype.

From-SVN: r278513

5 years agoDocument -Wc11-c2x-compat.
Joseph Myers [Wed, 20 Nov 2019 16:38:37 +0000 (16:38 +0000)]
Document -Wc11-c2x-compat.

My patch that added initial C2X support and associated command-line
options missed documenting -Wc11-c2x-compat although the other options
were properly documented.  This patch adds the missing documentation.

Tested with "make info" and "make pdf".

* doc/invoke.texi (-Wc11-c2x-compat): Document.

From-SVN: r278510

5 years agoPR85678: Change default to -fno-common
Wilco Dijkstra [Wed, 20 Nov 2019 16:29:23 +0000 (16:29 +0000)]
PR85678: Change default to -fno-common

GCC currently defaults to -fcommon.  As discussed in the PR, this is an ancient
C feature which is not conforming with the latest C standards.  On many targets
this means global variable accesses have a codesize and performance penalty.
This applies to C code only, C++ code is not affected by -fcommon.  It is about
time to change the default.

    gcc/
PR85678
* common.opt (fcommon): Change init to 1.
* invoke.texi (-fcommon): Update documentation.

    testsuite/
* g++.dg/lto/odr-6_1.c: Add -fcommon.
* gcc.dg/alias-15.c: Likewise.
* gcc.dg/fdata-sections-1.c: Likewise.
* gcc.dg/ipa/pr77653.c: Likewise.
* gcc.dg/lto/20090729_0.c: Likewise.
* gcc.dg/lto/20111207-1_0.c: Likewise.
* gcc.dg/lto/c-compatible-types-1_0.c: Likewise.
* gcc.dg/lto/pr55525_0.c: Likewise.
* gcc.dg/lto/pr88077_0.c: Use long to avoid alignment warning.
* gcc.dg/lto/pr88077_1.c: Add -fcommon.
* gcc.target/aarch64/sve/peel_ind_1.c: Allow ANCHOR0.
* gcc.target/aarch64/sve/peel_ind_2.c: Likewise.
* gcc.target/aarch64/sve/peel_ind_3.c: Likewise.
* gcc.target/i386/volatile-bitfields-2.c: Allow movl or movq.

From-SVN: r278509

5 years agolibgomp/test: Add flags to find libatomic in build-tree testing
Maciej W. Rozycki [Wed, 20 Nov 2019 15:49:23 +0000 (15:49 +0000)]
libgomp/test: Add flags to find libatomic in build-tree testing

Add flags to find libatomic in build-tree testing, fixing a catastrophic
libgomp testsuite failure with `riscv*-*-linux*' targets, which imply
`-latomic' with the `-pthread' GCC option, implied in turn by the
`-fopenacc' and `-fopenmp' options, removing failures like:

.../bin/riscv64-linux-gnu-ld: cannot find -latomic
collect2: error: ld returned 1 exit status
compiler exited with status 1
FAIL: libgomp.c/../libgomp.c-c++-common/atomic-18.c (test for excess errors)
Excess errors:
.../bin/riscv64-linux-gnu-ld: cannot find -latomic

UNRESOLVED: libgomp.c/../libgomp.c-c++-common/atomic-18.c compilation failed to produce executable

and bringing overall test results for the `riscv64-linux-gnu' target
(here with the `x86_64-linux-gnu' host and RISC-V QEMU in the Linux user
emulation mode as the target board) from:

=== libgomp Summary ===

# of expected passes 90
# of unexpected failures 3267
# of expected failures 2
# of unresolved testcases 3247
# of unsupported tests 548

to:

=== libgomp Summary ===

# of expected passes 6834
# of unexpected failures 4
# of expected failures 4
# of unsupported tests 518

libgomp/
* testsuite/lib/libgomp.exp (libgomp_init): Add flags to find
libatomic in build-tree testing.

From-SVN: r278505

5 years agoWorkaround bogus warning in fibonacci_heap<K,V>::consolidate.
Jan Hubicka [Wed, 20 Nov 2019 15:45:53 +0000 (16:45 +0100)]
Workaround bogus warning in fibonacci_heap<K,V>::consolidate.

* fibonacci_heap.h (fibonacci_heap<K,V>::consolidate): Turn auto_vec
to ordinary array.

From-SVN: r278504

5 years agoAdd pool_allocator for fibonaci heaps.
Jan Hubicka [Wed, 20 Nov 2019 15:04:34 +0000 (16:04 +0100)]
Add pool_allocator for fibonaci heaps.

* fibonacci_heap.h (fibonacci_heap<K,V>::fibonacci_heap):
Add allocator parameter.
(fibonacci_heap<K,V>::~fibonacci_heap): Optimize destruction.
(fibonacci_heap<K,V>::m_allocator): New.
(fibonacci_heap<K,V>::m_own_allocator): New.
(fibonacci_heap<K,V>::insert): Use allocator.
(fibonacci_heap<K,V>::extract_min): Likewise.
(fibonacci_heap<K,V>::union_with): Assert that both heaps share
allocator.
(fibonacci_heap<K,V>::consolidate): Allocate constant sized vector
on stack.
* fibonacci_heap.c: Include alloc-pool
(test_empty_heap): Initialize allocator.
(test_union): Likewise.
* bb-reorder.c: Include alloc-pool.h.
* tracer.c: Inlclude alloc-pool.h.

From-SVN: r278501

5 years agoUpdate comment in libsanitizer/*/libtool-version files.
Martin Liska [Wed, 20 Nov 2019 14:52:05 +0000 (15:52 +0100)]
Update comment in libsanitizer/*/libtool-version files.

2019-11-20  Martin Liska  <mliska@suse.cz>

* libtool-version: Remove.
* lsan/libtool-version: Upate comment to not mention libmudflap.
* tsan/libtool-version: Likewise.
* ubsan/libtool-version: Likewise.

From-SVN: r278500

5 years agolto-streamer-out.c (DFS::sccstack): Turn into auto-vec.
Jan Hubicka [Wed, 20 Nov 2019 14:10:41 +0000 (15:10 +0100)]
lto-streamer-out.c (DFS::sccstack): Turn into auto-vec.

* lto-streamer-out.c (DFS::sccstack): Turn into auto-vec.
Preallocate for 32 entries.
(DFS::worklist): Likewise.
(DFS::DFS): Do not initialize sccstack and worklist.
(DFS::~DFS): Do not release sccstack.

From-SVN: r278498

5 years agors6000: Fix UNORDERED without NaNs, for DFP (PR92573)
Segher Boessenkool [Wed, 20 Nov 2019 13:38:52 +0000 (14:38 +0100)]
rs6000: Fix UNORDERED without NaNs, for DFP (PR92573)

This is the analogue of r278103, but for DFP.

PR target/92573
* config/rs6000/dfp.md (dfptstsfi_<code>_<mode> for DFP_TEST and DDTD):
Handle UNORDERED if !HONOR_NANS.

From-SVN: r278497

5 years agoOptimize updating of badness after applying inline
Jan Hubicka [Wed, 20 Nov 2019 11:46:41 +0000 (12:46 +0100)]
Optimize updating of badness after applying inline

        * ipa-inline.c (wrapper_heuristics_may_apply): Break out from ...
(edge_badness): ... here.
(inline_small_functions): Use monotonicity of badness calculation
to avoid redundant updates.

From-SVN: r278496

5 years agotree-vect-slp.c (vect_analyze_slp_instance): Dump constructors we are actually analyzing.
Richard Biener [Wed, 20 Nov 2019 11:12:48 +0000 (11:12 +0000)]
tree-vect-slp.c (vect_analyze_slp_instance): Dump constructors we are actually analyzing.

2019-11-20  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_analyze_slp_instance): Dump
constructors we are actually analyzing.
(vect_slp_check_for_constructors): Do not vectorize uniform
constuctors, do not dump here.

* gcc.dg/vect/bb-slp-42.c: Adjust.
* gcc.dg/vect/bb-slp-40.c: Likewise.

From-SVN: r278495

5 years agore PR tree-optimization/92537 (ICE in vect_slp_analyze_node_operations, at tree-vect...
Richard Biener [Wed, 20 Nov 2019 10:40:09 +0000 (10:40 +0000)]
re PR tree-optimization/92537 (ICE in vect_slp_analyze_node_operations, at tree-vect-slp.c:2775)

2019-11-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92537
* tree-vect-slp.c (vect_analyze_slp_instance): Move CTOR
vectorization validity check...
(vect_slp_analyze_operations): ... here.

* gfortran.dg/pr92537.f90: New testcase.

From-SVN: r278494

5 years ago[testsuite][arm] Fix asm-flag-[45].c tests
Christophe Lyon [Wed, 20 Nov 2019 09:31:10 +0000 (09:31 +0000)]
[testsuite][arm] Fix asm-flag-[45].c tests

In asm-flag-4.c, we need to use dg-message instead of dg-error because
we have to match "sorry, unimplemented:" rather than "error:".  In
asm-flag-5.c, fix the dg-error syntax.

2019-11-20  Christophe Lyon  <christophe.lyon@linaro.org>

* gcc.target/arm/asm-flag-4.c: Replace dg-error with dg-message.
* gcc.target/arm/asm-flag-5.c: Add quotes around dg-error
messages.

From-SVN: r278487

5 years agoRemove my name from AArch64 port maintainers
James Greenhalgh [Wed, 20 Nov 2019 09:29:13 +0000 (09:29 +0000)]
Remove my name from AArch64 port maintainers

* MAINTAINERS (aarch64 port): Remove my name, move to...
(Write After Approval): ...Here.

From-SVN: r278486

5 years ago[ARC] Register ARC specific passes with a .def file.
Claudiu Zissulescu [Wed, 20 Nov 2019 08:39:21 +0000 (09:39 +0100)]
[ARC] Register ARC specific passes with a .def file.

New arc-passes.def to register ARC specific passes.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc-protos.h (make_pass_arc_ifcvt): Declare.
(make_pass_arc_predicate_delay_insns): Likewise.
* config/arc/arc.c (class pass_arc_ifcvt): Reformat text, add gate
method, remove clone.
(class pass_arc_predicate_delay_insns): Likewise.
(arc_init): Remove registering of ARC specific passes.
* config/arc/t-arc (PASSES_EXTRA): Add arc-passes.def.
* config/arc/arc-passes.def: New file.

From-SVN: r278485

5 years agore PR c++/90767 (jumbled error message with this and const)
Jakub Jelinek [Wed, 20 Nov 2019 08:33:56 +0000 (09:33 +0100)]
re PR c++/90767 (jumbled error message with this and const)

PR c++/90767
* call.c (complain_about_no_candidates_for_method_call): If
conv->from is not a type, pass to complain_about_bad_argument
lvalue_type of conv->from.

* g++.dg/diagnostic/pr90767-1.C: New test.
* g++.dg/diagnostic/pr90767-2.C: New test.

From-SVN: r278484

5 years agore PR middle-end/90840 (ICE in simplify_subreg, at simplify-rtx.c:6441)
Jakub Jelinek [Wed, 20 Nov 2019 08:32:56 +0000 (09:32 +0100)]
re PR middle-end/90840 (ICE in simplify_subreg, at simplify-rtx.c:6441)

PR middle-end/90840
* expmed.c (store_bit_field_1): Handle the case where op0 is not a MEM
and has a mode that doesn't have corresponding integral type.

* gcc.c-torture/compile/pr90840.c: New test.

From-SVN: r278483

5 years agore PR target/90867 (Multiplication or typecast of integer and double always zero...
Jakub Jelinek [Wed, 20 Nov 2019 08:31:43 +0000 (09:31 +0100)]
re PR target/90867 (Multiplication or typecast of integer and double always zero when...)

PR target/90867
* config/i386/i386-options.c (ix86_valid_target_attribute_tree): Don't
clear opts->x_ix86_isa_flags{,2} here...
(ix86_valid_target_attribute_inner_p): ... but here when seeing
arch=.  Also clear opts->x_ix86_isa_flags{,2}_explicit.

* gcc.target/i386/pr90867.c: New test.

From-SVN: r278482

5 years agore PR c/90898 (ICE in insert_clobber_before_stack_restore, at tree-ssa-ccp.c:2112)
Jakub Jelinek [Wed, 20 Nov 2019 08:29:35 +0000 (09:29 +0100)]
re PR c/90898 (ICE in insert_clobber_before_stack_restore, at tree-ssa-ccp.c:2112)

PR c/90898
* tree-ssa-ccp.c (insert_clobber_before_stack_restore): Remove
assertion.
(insert_clobbers_for_var): Fix a typo in function comment.

* gcc.dg/pr90898.c: New test.

From-SVN: r278481

5 years agore PR middle-end/91195 (incorrect may be used uninitialized smw (272711, 273474])
Jakub Jelinek [Wed, 20 Nov 2019 08:26:52 +0000 (09:26 +0100)]
re PR middle-end/91195 (incorrect may be used uninitialized smw (272711, 273474])

PR middle-end/91195
* tree-ssa-phiopt.c (cond_store_replacement): Move lhs unsharing
earlier.  Set TREE_NO_WARNING on the rhs1 of the artificially added
load.

* gcc.dg/pr91195.c: New test.

From-SVN: r278479

5 years agoMake 0-series device specs work with older versions of avr-gcc.
Georg-Johann Lay [Wed, 20 Nov 2019 08:19:44 +0000 (08:19 +0000)]
Make 0-series device specs work with older versions of avr-gcc.

PR target/92545
* config/avr/specs.h (LINK_SPEC) <%(link_pm_base_address)>: Remove.
* config/avr/gen-avr-mmcu-specs.c (print_mcu)
<*link_pm_base_address>: Don't write spec.
<*link_arch>: Add --defsym=__RODATA_PM_OFFSET__= as needed.

From-SVN: r278478

5 years agore PR c/92088 (aggregates with VLAs and nested functions are broken)
Richard Biener [Wed, 20 Nov 2019 07:33:19 +0000 (07:33 +0000)]
re PR c/92088 (aggregates with VLAs and nested functions are broken)

2019-11-20  Richard Biener  <rguenther@suse.de>

PR c/92088
c/
* c-decl.c (grokdeclarator): Prevent inlining of nested
function with VLA arguments.

* builtins.c (compute_objsize): Deal with VLAs.

* gcc.dg/torture/pr92088-1.c: New testcase.
* gcc.dg/torture/pr92088-2.c: Likewise.

From-SVN: r278477

5 years agocvt.c (ocp_convert): Use additional warning sentinel.
Paolo Carlini [Wed, 20 Nov 2019 01:02:46 +0000 (01:02 +0000)]
cvt.c (ocp_convert): Use additional warning sentinel.

/cp
2019-11-20  Paolo Carlini  <paolo.carlini@oracle.com>

* cvt.c (ocp_convert): Use additional warning sentinel.

/testsuite
2019-11-20  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/warn/multiple-sign-compare-warn-1.C: New.

From-SVN: r278475

5 years agoDaily bump.
GCC Administrator [Wed, 20 Nov 2019 00:16:19 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r278474

5 years agoAdd more pedwarns for [[]] C attributes on types.
Joseph Myers [Wed, 20 Nov 2019 00:13:51 +0000 (00:13 +0000)]
Add more pedwarns for [[]] C attributes on types.

The standard [[]] attributes currently defined in C2x are all not
valid on types not being defined at the time.

Use on such types results in a warning from attribs.c about attributes
appertaining to types (the warning that I think is bogus in general
for both C and C++, applying as it does to all [[]] attributes
including gnu:: ones that are perfectly meaningful on types not being
defined and work fine when __attribute__ syntax is used instead).  If
that warning is removed (as I intend to do in a subsequent patch),
warnings may or may not result from the attribute handlers, depending
on whether those particular attribute handlers consider the attributes
meaningful in such a context.  In C, however, the rules about where
each [[]] attribute is valid are constraints, so a pedwarn, not a
warning, is required.

Because some handlers are shared between standard and gnu::
attributes, there can be cases that are valid for the GNU attribute
variant but not for the standard one.  So in general it is not correct
to rely on the attribute handlers to give all required pedwarns
(although in some cases, a pedwarn in the attribute handler is in
appropriate way of diagnosing an invalid use); they not have the
information about whether the attribute was a gnu:: one and can
legitimately accept a wider range of uses for the gnu:: attributes.

This patch ensures appropriate diagnostics for invalid uses of C2x
standard attributes on types, and so helps pave the way for the
subsequent removal of the bogus check in attribs.c, by adding a check
run in the front end before calling decl_attributes; this check
removes the attributes from the list after calling pedwarn to avoid
subsequent duplicate warnings.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c:
* c-decl.c (c_warn_type_attributes): New function.
(groktypename, grokdeclarator, finish_declspecs): Call
c_warn_type_attributes before applying attributes to types.
* c-tree.h (c_warn_type_attributes): Declare.

gcc/testsuite:
* gcc.dg/c2x-attr-deprecated-2.c, gcc.dg/c2x-attr-fallthrough-2.c,
gcc.dg/c2x-attr-maybe_unused-2.c: Expect errors for invalid uses
of standard attributes on types.  Add more tests of invalid uses
on types.

From-SVN: r278471

5 years agolibgo: better cmd/cgo handling for '.' in pkgpath
Ian Lance Taylor [Tue, 19 Nov 2019 23:04:08 +0000 (23:04 +0000)]
libgo: better cmd/cgo handling for '.' in pkgpath

    Updates cgo's gccgoPkgpathToSymbolNew() to bring it into
    conformance with the way that gccgo now handles package
    paths with embedded dots (see CL 200838). See also
    https://gcc.gnu.org/PR61880, a related bug. This CL is a
    copy of CL 207957 in the main Go repo.

    Updates golang/go#35623.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207977

From-SVN: r278470

5 years agore PR c++/92414 (internal compiler error: tree check: expected constructor, have...
Jakub Jelinek [Tue, 19 Nov 2019 21:28:22 +0000 (22:28 +0100)]
re PR c++/92414 (internal compiler error: tree check: expected constructor, have error_mark in cxx_eval_store_expression, at cp/constexpr.c:4009)

PR c++/92414
* constexpr.c (cxx_eval_outermost_constant_expr): If DECL_INITIAL
on object is erroneous, return t without trying to evaluate
a constexpr dtor.

* g++.dg/cpp2a/constexpr-dtor4.C: New test.

From-SVN: r278468

5 years agoConsider parm types equivalence for operator rewrite tiebreaker.
Jason Merrill [Tue, 19 Nov 2019 20:22:12 +0000 (15:22 -0500)]
Consider parm types equivalence for operator rewrite tiebreaker.

The C++ committee continues to discuss how best to avoid breaking existing
code with the new rules for reversed operators.  A recent suggestion was to
base the tie-breaker on the parameter types of the candidates, which made a
lot of sense to me, so this patch implements that.

This patch also mentions that a candidate was reversed or rewritten when
printing the list of candidates, and warns about a comparison that becomes
recursive under the new rules.  There is no flag for this warning; people
can silence it by swapping the operands.

* call.c (same_fn_or_template): Change to cand_parms_match.
(joust): Adjust.
(print_z_candidate): Mark rewritten/reversed candidates.
(build_new_op_1): Warn about recursive call with reversed arguments.

From-SVN: r278465

5 years agors6000.c (move_to_end_of_ready): New, factored out from common code.
Pat Haugen [Tue, 19 Nov 2019 19:49:37 +0000 (19:49 +0000)]
rs6000.c (move_to_end_of_ready): New, factored out from common code.

* config/rs6000/rs6000.c (move_to_end_of_ready): New, factored out
from common code.
(power6_sched_reorder2): Factored out from rs6000_sched_reorder2,
call new function.
(power9_sched_reorder2): Call new function.
(rs6000_sched_reorder2): Likewise.

From-SVN: r278463

5 years agoMove ChangeLog entry to correct file
Richard Sandiford [Tue, 19 Nov 2019 18:58:44 +0000 (18:58 +0000)]
Move ChangeLog entry to correct file

From-SVN: r278461

5 years agoRemove unused parameter PROB in ipa-fnsummary.c
Jan Hubicka [Tue, 19 Nov 2019 18:57:50 +0000 (19:57 +0100)]
Remove unused parameter PROB in ipa-fnsummary.c

        * ipa-fnsummary.c (estimate_edge_size_and_time): Drop parameter PROB.
(estimate_calls_size_and_time): Update.

From-SVN: r278460

5 years agoAvoid redundant computations in edge_badness.
Jan Hubicka [Tue, 19 Nov 2019 18:56:26 +0000 (19:56 +0100)]
Avoid redundant computations in edge_badness.

        * ipa-inline.c (inlining_speedup): New function.
(edge_badness): Use it.

From-SVN: r278459

5 years ago[MIPS] Prevent MSA branches from being put into delay slots
Dragan Mladjenovic [Tue, 19 Nov 2019 18:14:32 +0000 (18:14 +0000)]
[MIPS] Prevent MSA branches from being put into delay slots

 This patch tightens the instruction definitions to make sure
 that MSA branch instructions cannot be put into delay slots and have their
 delay slots eligible for being filled. Also, MSA *div*3 patterns use MSA
 branches for zero checks but are not marked as being multi instruction and
 thus could be put into delay slots. This patch fixes that.

gcc/ChangeLog:

2019-11-19  Zoran Jovanovic <zoran.jovanovic@mips.com>
Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* config/mips/mips-msa.md (msa_<msabr>_<msafmt_f>, msa_<msabr>_v_<msafmt_f>):
Mark as not having "likely" version.
* config/mips/mips.md (insn_count): The simd_div instruction with
TARGET_CHECK_ZERO_DIV consists of 3 instructions.
(can_delay): Exclude simd_branch.
(defile_delay *): Add simd_branch instructions.
They have one regular delay slot.

gcc/testsuite/ChangeLog:

2019-11-19  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* gcc.target/mips/msa-ds.c: New test.

From-SVN: r278458

5 years agoRevert r278441
Richard Sandiford [Tue, 19 Nov 2019 16:31:17 +0000 (16:31 +0000)]
Revert r278441

To restore powerpc bootstrap.

2019-11-19  Richard Sandiford  <richard.sandiford@arm.com>
gcc/
Revert:
2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

* cse.c (cse_insn): Delete no-op register moves too.
* simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons.
Take a second comparison to control the value for NE.
(mask_to_comparison): Handle unsigned comparisons.
(simplify_logical_relational_operation): Likewise.  Update call
to comparison_to_mask.  Handle AND if !HONOR_NANs.
(simplify_binary_operation_1): Call the above for AND too.

gcc/testsuite/
Revert:
2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

* gcc.target/aarch64/sve/acle/asm/ptest_pmore.c: New test.

From-SVN: r278455

5 years ago[AArch64] PR79262: Adjust vector cost
Wilco Dijkstra [Tue, 19 Nov 2019 15:57:54 +0000 (15:57 +0000)]
[AArch64] PR79262: Adjust vector cost

PR79262 has been fixed for almost all AArch64 cpus, however the example is still
vectorized in a few cases, resulting in lower performance.  Adjust the vector
cost slightly so that so that -mcpu=cortex-a53 now has identical performance as
-mcpu=cortex-a57 on libquantum.

    gcc/
PR target/79262
* config/aarch64/aarch64.c (generic_vector_cost): Adjust
vec_to_scalar_cost.

From-SVN: r278452

5 years agore PR c++/89913 (ICE with invalid using declaration)
Andrew Sutton [Tue, 19 Nov 2019 15:26:16 +0000 (15:26 +0000)]
re PR c++/89913 (ICE with invalid using declaration)

PR c++/89913

gcc/cp/
* pt.c (get_underlying_template): Exit loop if the original type
of the alias is null.

gcc/testsuite/
* g++.dg/cpp2a/pr89913.C: New test.

From-SVN: r278451

5 years agore PR c++/92078 (error: 'struct std::ptr<Iter>' redeclared with different access)
Andrew Sutton [Tue, 19 Nov 2019 15:18:50 +0000 (15:18 +0000)]
re PR c++/92078 (error: 'struct std::ptr<Iter>' redeclared with different access)

PR c++/92078

gcc/cp/
* pt.c (maybe_new_partial_specialization): Apply access to newly
created partial specializations. Update comment style.

gcc/testsuite/
* g++.dg/cpp2a/concepts-pr92078.C: New.
  * g++.dg/cpp2a/concepts-requires18.C: Update diagnostics.

From-SVN: r278450

5 years agoSuppress diagnostics substituting into a requires-expression (PR c++/92403).
Andrew Sutton [Tue, 19 Nov 2019 15:11:14 +0000 (15:11 +0000)]
Suppress diagnostics substituting into a requires-expression (PR c++/92403).

gcc/cp/
* pt.c (tsubst_copy_and_build): Perform the first substitution without
diagnostics and a second only if tsubst_requries_expr returns an error.

From-SVN: r278449

5 years agoRestore init_ggc_heuristics.
Martin Liska [Tue, 19 Nov 2019 15:07:26 +0000 (16:07 +0100)]
Restore init_ggc_heuristics.

2019-11-19  Martin Liska  <mliska@suse.cz>

* toplev.c (general_init): Move the call...
(toplev::main): ... here as we need init_options_struct
being called.

From-SVN: r278448

5 years ago[Arm] Set Armv7-A tune to Cortex-A53
Wilco Dijkstra [Tue, 19 Nov 2019 14:20:12 +0000 (14:20 +0000)]
[Arm] Set Armv7-A tune to Cortex-A53

By default Armv7-A tunes for Cortex-A8. This is an ancient core
today and the settings are no longer useful for newer cores. So
switch to Cortex-A53 tuning since it works well across a wide range
of modern cores.

On SPECINT2006 the performance gain is 0.7% compared to Cortex-A8 tuning,
and codesize reduces by 0.2%.

    gcc/
* config/arm/arm-cpus.in (armv7): Set tune to Cortex-A53.
(armv7-a): Likewise.
(armv7ve): Likewise.

From-SVN: r278447

5 years agoUpdate loop-1.c test for amdgcn
Andrew Stubbs [Tue, 19 Nov 2019 14:04:27 +0000 (14:04 +0000)]
Update loop-1.c test for amdgcn

2019-11-19  Andrew Stubbs  <ams@codesourcery.com>

gcc/testsuite/
* gcc.dg/tree-ssa/loop-1.c: Change amdgcn assembler scan.

From-SVN: r278446

5 years agore PR tree-optimization/92581 (condition chains vectorized wrongly)
Richard Biener [Tue, 19 Nov 2019 14:00:46 +0000 (14:00 +0000)]
re PR tree-optimization/92581 (condition chains vectorized wrongly)

2019-11-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92581
* tree-vect-loop.c (vect_create_epilog_for_reduction): For
condition reduction chains gather all conditions involved
for computing the index reduction vector.

* gcc.dg/vect/vect-cond-reduc-5.c: New testcase.

From-SVN: r278445

5 years ago[AArch64] Implement Armv8.5-A memory tagging (MTE) intrinsics
Dennis Zhang [Tue, 19 Nov 2019 13:43:39 +0000 (13:43 +0000)]
[AArch64] Implement Armv8.5-A memory tagging (MTE) intrinsics

2019-11-19  Dennis Zhang  <dennis.zhang@arm.com>

* config/aarch64/aarch64-builtins.c (enum aarch64_builtins): Add
AARCH64_MEMTAG_BUILTIN_START, AARCH64_MEMTAG_BUILTIN_IRG,
AARCH64_MEMTAG_BUILTIN_GMI, AARCH64_MEMTAG_BUILTIN_SUBP,
AARCH64_MEMTAG_BUILTIN_INC_TAG, AARCH64_MEMTAG_BUILTIN_SET_TAG,
AARCH64_MEMTAG_BUILTIN_GET_TAG, and AARCH64_MEMTAG_BUILTIN_END.
(aarch64_init_memtag_builtins): New.
(AARCH64_INIT_MEMTAG_BUILTINS_DECL): New macro.
(aarch64_general_init_builtins): Call aarch64_init_memtag_builtins.
(aarch64_expand_builtin_memtag): New.
(aarch64_general_expand_builtin): Call aarch64_expand_builtin_memtag.
(AARCH64_BUILTIN_SUBCODE): New macro.
(aarch64_resolve_overloaded_memtag): New.
(aarch64_resolve_overloaded_builtin_general): New. Call
aarch64_resolve_overloaded_memtag to handle overloaded MTE builtins.
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
__ARM_FEATURE_MEMORY_TAGGING when enabled.
(aarch64_resolve_overloaded_builtin): Call
aarch64_resolve_overloaded_builtin_general.
* config/aarch64/aarch64-protos.h
(aarch64_resolve_overloaded_builtin_general): New declaration.
* config/aarch64/aarch64.h (AARCH64_ISA_MEMTAG): New macro.
(TARGET_MEMTAG): Likewise.
* config/aarch64/aarch64.md (UNSPEC_GEN_TAG): New unspec.
(UNSPEC_GEN_TAG_RND, and UNSPEC_TAG_SPACE): Likewise.
(irg, gmi, subp, addg, ldg, stg): New instructions.
* config/aarch64/arm_acle.h (__arm_mte_create_random_tag): New macro.
(__arm_mte_exclude_tag, __arm_mte_ptrdiff): Likewise.
(__arm_mte_increment_tag, __arm_mte_set_tag): Likewise.
(__arm_mte_get_tag): Likewise.
* config/aarch64/predicates.md (aarch64_memtag_tag_offset): New.
(aarch64_granule16_uimm6, aarch64_granule16_simm9): New.
* config/arm/types.md (memtag): New.
* doc/invoke.texi (-memtag): Update description.

2019-11-19  Dennis Zhang  <dennis.zhang@arm.com>

* gcc.target/aarch64/acle/memtag_1.c: New test.
* gcc.target/aarch64/acle/memtag_2.c: New test.
* gcc.target/aarch64/acle/memtag_3.c: New test.

From-SVN: r278444

5 years agoarm: Fixes for asm-flags vs thumb1 and ilp32
Richard Henderson [Tue, 19 Nov 2019 13:14:20 +0000 (13:14 +0000)]
arm: Fixes for asm-flags vs thumb1 and ilp32

Thumb1 cannot support asm-flags currently, because we don't expose the
flags register to the compiler.  Disable the support for that case.

Adjust the asm-flag-6 test for aarch64 ilp32 correctness.

gcc/
* config/arm/arm-c.c (arm_cpu_builtins): Use def_or_undef_macro
to define __GCC_ASM_FLAG_OUTPUTS__.
* config/arm/arm.c (thumb1_md_asm_adjust): New function.
(arm_option_params_internal): Swap out targetm.md_asm_adjust
depending on TARGET_THUMB1.
* doc/extend.texi (FlagOutputOperands): Document thumb1 restriction.

gcc/testsuite/
* testsuite/gcc.target/arm/asm-flag-3.c: Skip for thumb1.
* testsuite/gcc.target/arm/asm-flag-5.c: Likewise.
* testsuite/gcc.target/arm/asm-flag-6.c: Likewise.
* testsuite/gcc.target/arm/asm-flag-4.c: New test.

* testsuite/gcc.target/aarch64/asm-flag-6.c: Use %w for
asm inputs to cmp instruction for ILP32.

From-SVN: r278443

5 years agolibstdc++: Fix declarations of variable templates
Jonathan Wakely [Tue, 19 Nov 2019 09:34:59 +0000 (09:34 +0000)]
libstdc++: Fix declarations of variable templates

This code is invalid and rejected by other compilers (see PR 92576).

* include/bits/regex.h (ranges::__detail::__enable_view_impl): Fix
declaration.
* include/bits/stl_multiset.h (ranges::__detail::__enable_view_impl):
Likewise.
* include/bits/stl_set.h (ranges::__detail::__enable_view_impl):
Likewise.
* include/bits/unordered_set.h (ranges::__detail::__enable_view_impl):
Likewise.
* include/debug/multiset.h (ranges::__detail::__enable_view_impl):
Likewise.
* include/debug/set.h (ranges::__detail::__enable_view_impl): Likewise.
* include/debug/unordered_set (ranges::__detail::__enable_view_impl):
Likewise.

From-SVN: r278440

5 years agore PR target/92549 (Use x86 xchg instruction more)
Jakub Jelinek [Tue, 19 Nov 2019 09:31:59 +0000 (10:31 +0100)]
re PR target/92549 (Use x86 xchg instruction more)

PR target/92549
* config/i386/i386.md (peephole2 for *swap<mode>): New peephole2.

* gcc.target/i386/pr92549.c: New test.

From-SVN: r278439

5 years agore PR middle-end/91450 (__builtin_mul_overflow(A,B,R) wrong code if product < 0,...
Jakub Jelinek [Tue, 19 Nov 2019 09:15:53 +0000 (10:15 +0100)]
re PR middle-end/91450 (__builtin_mul_overflow(A,B,R) wrong code if product < 0, *R is unsigned, and !(A&B))

PR middle-end/91450
* internal-fn.c (expand_mul_overflow): For s1 * s2 -> ur, if one
operand is negative and one non-negative, compare the non-negative
one against 0 rather than comparing s1 & s2 against 0.  Otherwise,
don't compare (s1 & s2) == 0, but compare separately both s1 == 0
and s2 == 0, unless one of them is known to be negative.  Remove
tem2 variable, use tem where tem2 has been used before.

* gcc.c-torture/execute/pr91450-1.c: New test.
* gcc.c-torture/execute/pr91450-2.c: New test.

From-SVN: r278437

5 years ago* doc/invoke.texi (-gno-internal-reset-location-views): Fix typo.
Eric Botcazou [Tue, 19 Nov 2019 09:12:09 +0000 (09:12 +0000)]
* doc/invoke.texi (-gno-internal-reset-location-views): Fix typo.

From-SVN: r278434

5 years agore PR c++/92504 (ICE on gcc-9 -fopenmp: internal compiler error: tree check: expected...
Jakub Jelinek [Tue, 19 Nov 2019 08:52:31 +0000 (09:52 +0100)]
re PR c++/92504 (ICE on gcc-9 -fopenmp: internal compiler error: tree check: expected tree that contains 'decl common' structure, have 'baselink' in get_inner_reference, at expr.c:7238)

PR c++/92504
* semantics.c (handle_omp_for_class_iterator): Don't call
cp_fully_fold on cond.

* g++.dg/gomp/pr92504.C: New test.

From-SVN: r278433

5 years agore PR tree-optimization/92557 (ICE in omp_clause_aligned_alignment, at omp-low.c...
Jakub Jelinek [Tue, 19 Nov 2019 08:51:31 +0000 (09:51 +0100)]
re PR tree-optimization/92557 (ICE in omp_clause_aligned_alignment, at omp-low.c:4090)

PR tree-optimization/92557
* omp-low.c (omp_clause_aligned_alignment): Punt if TYPE_MODE is not
vmode rather than asserting it always is.

* gcc.dg/gomp/pr92557.c: New test.

From-SVN: r278432

5 years agore PR tree-optimization/92554 (ICE in vect_create_epilog_for_reduction, at tree-vect...
Richard Biener [Tue, 19 Nov 2019 07:33:58 +0000 (07:33 +0000)]
re PR tree-optimization/92554 (ICE in vect_create_epilog_for_reduction, at tree-vect-loop.c:4325)

2019-11-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92554
* tree-vect-loop.c (vect_create_epilog_for_reduction): Look
for the actual condition stmt and deal with sign-changes.

* gcc.dg/vect/pr92554.c: New testcase.

From-SVN: r278431

5 years agore PR tree-optimization/92555 (ICE in exact_div, at poly-int.h:2162)
Richard Biener [Tue, 19 Nov 2019 07:31:28 +0000 (07:31 +0000)]
re PR tree-optimization/92555 (ICE in exact_div, at poly-int.h:2162)

2019-09-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92555
* tree-vect-loop.c (vect_update_vf_for_slp): Also scan PHIs
for non-SLP stmts.

* gcc.dg/vect/pr92555.c: New testcase.

From-SVN: r278430

5 years agoInitialize a variable due to -Wmaybe-uninitialized.
Martin Liska [Tue, 19 Nov 2019 07:22:21 +0000 (08:22 +0100)]
Initialize a variable due to -Wmaybe-uninitialized.

2019-11-19  Martin Liska  <mliska@suse.cz>

PR bootstrap/92540
* config/riscv/riscv.c (riscv_address_insns): Initialize
addr in order to remove boostrap -Wmaybe-uninitialized
error.

From-SVN: r278429

5 years agoChange some bad uses of C2x attributes into pedwarns.
Joseph Myers [Tue, 19 Nov 2019 00:21:49 +0000 (00:21 +0000)]
Change some bad uses of C2x attributes into pedwarns.

Certain bad uses of C2x standard attributes (that is, attributes
inside [[]] with only a name but no namespace specified) are
constraint violations, and so should be diagnosed with a pedwarn (or
error) where GCC currently uses a warning.  This patch implements this
in some cases (not yet for attributes used on types, nor for some bad
uses of fallthrough attributes).  Specifically, this applies to
unknown standard attributes (taking care not to pedwarn for nodiscard,
which is known but not implemented for C), and to all currently
implemented standard attributes in attribute declarations (including
when mixed with fallthrough) and on statements.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c:
* c-decl.c (c_warn_unused_attributes): Use pedwarn not warning for
standard attributes.
* c-parser.c (c_parser_std_attribute): Take argument for_tm.  Use
pedwarn for unknown standard attributes and return error_mark_node
for them.

gcc/c-family:
* c-common.c (attribute_fallthrough_p): In C, use pedwarn not
warning for standard attributes mixed with fallthrough attributes.

gcc/testsuite:
* gcc.dg/c2x-attr-fallthrough-5.c, gcc.dg/c2x-attr-syntax-5.c: New
tests.
* gcc.dg/c2x-attr-deprecated-2.c, gcc.dg/c2x-attr-deprecated-4.c,
gcc.dg/c2x-attr-fallthrough-2.c, gcc.dg/c2x-attr-maybe_unused-2.c,
gcc.dg/c2x-attr-maybe_unused-4.c: Expect errors in place of some
warnings.

From-SVN: r278428

5 years agoDaily bump.
GCC Administrator [Tue, 19 Nov 2019 00:16:23 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r278427

5 years agotypeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc in three places.
Paolo Carlini [Mon, 18 Nov 2019 23:02:22 +0000 (23:02 +0000)]
typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc in three places.

/cp
2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>

* typeck.c (cp_build_addr_expr_1): Use cp_expr_loc_or_input_loc
in three places.
(cxx_sizeof_expr): Use it in one additional place.
(cxx_alignof_expr): Likewise.
(lvalue_or_else): Likewise.

/testsuite
2019-11-18  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/addressof2.C: Test locations too.
* g++.dg/cpp0x/rv-lvalue-req.C: Likewise.
* g++.dg/expr/crash2.C: Likewise.
* g++.dg/expr/lval1.C: Likewise.
* g++.dg/expr/unary2.C: Likewise.
* g++.dg/ext/lvaddr.C: Likewise.
* g++.dg/ext/lvalue1.C: Likewise.
* g++.dg/tree-ssa/pr20280.C: Likewise.
* g++.dg/warn/Wplacement-new-size.C: Likewise.
* g++.old-deja/g++.brendan/alignof.C: Likewise.
* g++.old-deja/g++.brendan/sizeof2.C: Likewise.
* g++.old-deja/g++.law/temps1.C: Likewise.

From-SVN: r278424

5 years agoPR middle-end/92493 - ICE in get_origin_and_offset at gimple-ssa-sprintf.c
Martin Sebor [Mon, 18 Nov 2019 22:14:16 +0000 (22:14 +0000)]
PR middle-end/92493 - ICE in get_origin_and_offset at gimple-ssa-sprintf.c

gcc/ChangeLog:

PR tree-optimization/92493
* gimple-ssa-sprintf.c (get_origin_and_offset): Remove spurious
assignment.

gcc/testsuite/ChangeLog:

PR tree-optimization/92493
* gcc.dg/pr92493.c: New test.

From-SVN: r278423

5 years agoRefactor tree-loop-distribution.c for thread safety
Giuliano Belinassi [Mon, 18 Nov 2019 20:05:16 +0000 (20:05 +0000)]
Refactor tree-loop-distribution.c for thread safety

This patch refactors tree-loop-distribution.c for thread safety without
use of C11 __thread feature. All global variables were moved to
`class loop_distribution` which is initialized at ::execute time.

From-SVN: r278421

5 years agore PR ipa/92508 (ICE in do_estimate_edge_time, at ipa-inline-analysis.c:223 since...
Jan Hubicka [Mon, 18 Nov 2019 19:28:53 +0000 (20:28 +0100)]
re PR ipa/92508 (ICE in do_estimate_edge_time, at ipa-inline-analysis.c:223 since r278159)

PR ipa/92508
* ipa-inline.c (inline_small_functions): Add new edges after reseting
caches.
* ipa-inline-analysis.c (do_estimate_edge_time): Fix sanity check.

From-SVN: r278419

5 years agoAdd more C2x attributes tests.
Joseph Myers [Mon, 18 Nov 2019 17:41:40 +0000 (17:41 +0000)]
Add more C2x attributes tests.

This patch adds more tests of C2x attributes, where I found cases that
were handled correctly by my patches but missing from the original
tests.  Tests are added for -std=c11 -pedantic handling of C2x
attribute syntax and corresponding -Wc11-c2x-compat handling; for
struct [[deprecated]]; and for the [[__fallthrough__]] spelling of
[[fallthrough]] in the case of valid fallthrough attributes.

Tested for x86_64-pc-linux-gnu.

* gcc.dg/c11-attr-syntax-1.c, gcc.dg/c11-attr-syntax-2.c,
gcc.dg/c11-attr-syntax-3.c, gcc.dg/c2x-attr-syntax-4.c: New tests.
* gcc.dg/c2x-attr-deprecated-1.c: Also test struct [[deprecated]].
* gcc.dg/c2x-attr-fallthrough-1.c: Also test [[__fallthrough__]].

From-SVN: r278418

5 years agoPR c++/91962 - ICE with reference binding and qualification conversion.
Marek Polacek [Mon, 18 Nov 2019 16:39:24 +0000 (16:39 +0000)]
PR c++/91962 - ICE with reference binding and qualification conversion.

When fixing c++/91889 (r276251) I was assuming that we couldn't have a ck_qual
under a ck_ref_bind, and I was introducing it in the patch and so this
+   if (next_conversion (convs)->kind == ck_qual)
+     {
+       gcc_assert (same_type_p (TREE_TYPE (expr),
+                    next_conversion (convs)->type));
+       /* Strip the cast created by the ck_qual; cp_build_addr_expr
+          below expects an lvalue.  */
+       STRIP_NOPS (expr);
+     }
in convert_like_real was supposed to handle it.  But that assumption was wrong
as this test shows; here we have "(int *)f" where f is of type long int, and
we're converting it to "const int *const &", so we have both ck_ref_bind and
ck_qual.  That means that the new STRIP_NOPS strips an expression it shouldn't
have, and that then breaks when creating a TARGET_EXPR.  So we want to limit
the stripping to the new case only.  This I do by checking need_temporary_p,
which will be 0 in the new case.  Yes, we can set need_temporary_p when
binding a reference directly, but then we won't have a qualification
conversion.  It is possible to have a bit-field, convert it to a pointer,
and then convert that pointer to a more-qualified pointer, but in that case
we're not dealing with an lvalue, so gl_kind is 0, so we won't enter this
block in reference_binding:
 1747   if ((related_p || compatible_p) && gl_kind)

* call.c (convert_like_real) <case ck_ref_bind>: Check need_temporary_p.

* g++.dg/cpp0x/ref-bind7.C: New test.

From-SVN: r278416

5 years agoAdd testcase for already fixed PR ipa/92528
Martin Jambor [Mon, 18 Nov 2019 15:50:06 +0000 (16:50 +0100)]
Add testcase for already fixed PR ipa/92528

2019-11-18  Martin Jambor  <mjambor@suse.cz>

PR ipa/92528
* g++.dg/ipa/pr92528.C: New test.

From-SVN: r278415

5 years agoAdd optabs for accelerating RAW and WAR alias checks
Richard Sandiford [Mon, 18 Nov 2019 15:36:10 +0000 (15:36 +0000)]
Add optabs for accelerating RAW and WAR alias checks

This patch adds optabs that check whether a read followed by a write
or a write followed by a read can be divided into interleaved byte
accesses without changing the dependencies between the bytes.
This is one of the uses of the SVE2 WHILERW and WHILEWR instructions.
(The instructions can also be used to limit the VF at runtime,
but that's future work.)

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* doc/sourcebuild.texi (vect_check_ptrs): Document.
* optabs.def (check_raw_ptrs_optab, check_war_ptrs_optab): New optabs.
* doc/md.texi: Document them.
* internal-fn.def (IFN_CHECK_RAW_PTRS, IFN_CHECK_WAR_PTRS): New
internal functions.
* internal-fn.h (internal_check_ptrs_fn_supported_p): Declare.
* internal-fn.c (check_ptrs_direct): New macro.
(expand_check_ptrs_optab_fn): Likewise.
(direct_check_ptrs_optab_supported_p): Likewise.
(internal_check_ptrs_fn_supported_p): New fuction.
* tree-data-ref.c: Include internal-fn.h.
(create_ifn_alias_checks): New function.
(create_intersect_range_checks): Use it.
* config/aarch64/iterators.md (SVE2_WHILE_PTR): New int iterator.
(optab, cmp_op): Handle it.
(raw_war, unspec): New int attributes.
* config/aarch64/aarch64.md (UNSPEC_WHILERW, UNSPEC_WHILE_WR): New
constants.
* config/aarch64/predicates.md (aarch64_bytes_per_sve_vector_operand):
New predicate.
* config/aarch64/aarch64-sve2.md (check_<raw_war>_ptrs<mode>): New
expander.
(@aarch64_sve2_while<cmp_op><GPI:mode><PRED_ALL:mode>_ptest): New
pattern.

gcc/testsuite/
* lib/target-supports.exp (check_effective_target_vect_check_ptrs):
New procedure.
* gcc.dg/vect/vect-alias-check-14.c: Expect IFN_CHECK_WAR to be
used, if available.
* gcc.dg/vect/vect-alias-check-15.c: Likewise.
* gcc.dg/vect/vect-alias-check-16.c: Likewise IFN_CHECK_RAW.
* gcc.target/aarch64/sve2/whilerw_1.c: New test.
* gcc.target/aarch64/sve2/whilewr_1.c: Likewise.
* gcc.target/aarch64/sve2/whilewr_2.c: Likewise.

From-SVN: r278414

5 years agoAdd an empty constructor shortcut to build_vector_from_ctor
Richard Sandiford [Mon, 18 Nov 2019 15:29:53 +0000 (15:29 +0000)]
Add an empty constructor shortcut to build_vector_from_ctor

Empty vector constructors are equivalent to zero vectors.  If we handle
that case directly, we can support it for variable-length vectors and
can hopefully make things more efficient for fixed-length vectors.

This is needed by a later C++ patch.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree.c (build_vector_from_ctor): Directly return a zero vector for
empty constructors.

From-SVN: r278413

5 years agoTwo RTL CC tweaks for SVE pmore/plast conditions
Richard Sandiford [Mon, 18 Nov 2019 15:29:03 +0000 (15:29 +0000)]
Two RTL CC tweaks for SVE pmore/plast conditions

SVE has two composite conditions:

  pmore == at least one bit set && last bit clear
  plast == no bits set || last bit set

So in general we generate them from:

  A: CC = test bits
  B: reg1 = first condition
  C: CC = test bits
  D: reg2 = second condition
  E: result = (reg1 op reg2)   where op is || or &&

To fold all this into a single test, we need to be able to remove
the redundant C (the cse.c patch) and then fold B, D and E down to
a single condition (the simplify-rtx.c patch).

The underlying conditions are unsigned, so the simplify-rtx.c part needs
to support both unsigned comparisons and AND.  However, to avoid opening
the can of worms that is ANDing FP comparisons for unordered inputs,
I've restricted the new AND handling to cases in which NaNs can be
ignored.  I think this is still a strict extension of what we have now,
it just doesn't go as far as it could.  Going further would need an
entirely different set of testcases so I think would make more sense
as separate work.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* cse.c (cse_insn): Delete no-op register moves too.
* simplify-rtx.c (comparison_to_mask): Handle unsigned comparisons.
Take a second comparison to control the value for NE.
(mask_to_comparison): Handle unsigned comparisons.
(simplify_logical_relational_operation): Likewise.  Update call
to comparison_to_mask.  Handle AND if !HONOR_NANs.
(simplify_binary_operation_1): Call the above for AND too.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/asm/ptest_pmore.c: New test.

From-SVN: r278411

5 years agoHandle VIEW_CONVERT_EXPR for variable-length vectors
Richard Sandiford [Mon, 18 Nov 2019 15:27:56 +0000 (15:27 +0000)]
Handle VIEW_CONVERT_EXPR for variable-length vectors

This patch handles VIEW_CONVERT_EXPRs of variable-length VECTOR_CSTs
by adding tree-level versions of native_decode_vector_rtx and
simplify_const_vector_subreg.  It uses the same code for fixed-length
vectors, both to get more coverage and because operating directly on
the compressed encoding should be more efficient for longer vectors
with a regular pattern.

The structure and comments are very similar between the tree and
rtx routines.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* fold-const.c (native_encode_vector): Turn into a wrapper function,
splitting the main code out into...
(native_encode_vector_part): ...this new function.
(native_decode_vector_tree): New function.
(fold_view_convert_vector_encoding): Likewise.
(fold_view_convert_expr): Use it for converting VECTOR_CSTs
to VECTOR_TYPEs.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/general/temporaries_1.c: New test.

From-SVN: r278410

5 years agoOptimise WAR and WAW alias checks
Richard Sandiford [Mon, 18 Nov 2019 15:26:55 +0000 (15:26 +0000)]
Optimise WAR and WAW alias checks

For:

  void
  f1 (int *x, int *y)
  {
    for (int i = 0; i < 32; ++i)
      x[i] += y[i];
  }

we checked at runtime whether one vector at x would overlap one vector
at y.  But in cases like this, the vector code would handle x <= y just
fine, since any write to address A still happens after any read from
address A.  The only problem is if x is ahead of y by less than a
vector.

The same is true for two writes:

  void
  f2 (int *x, int *y)
  {
    for (int i = 0; i < 32; ++i)
      {
        x[i] = i;
        y[i] = 2;
      }
  }

if y <= x then a vector write at y after a vector write at x would
have the same net effect as the original scalar writes.

This patch optimises the alias checks for these two cases.  E.g.,
before the patch, f1 used:

        add     x2, x0, 15
        sub     x2, x2, x1
        cmp     x2, 30
        bls     .L2

whereas after the patch it uses:

        add     x2, x1, 4
        sub     x2, x0, x2
        cmp     x2, 8
        bls     .L2

Read-after-write cases like:

  int
  f3 (int *x, int *y)
  {
    int res = 0;
    for (int i = 0; i < 32; ++i)
      {
        x[i] = i;
        res += y[i];
      }
    return res;
  }

can cope with x == y, but otherwise don't allow overlap in either
direction.  Since checking for x == y at runtime would require extra
code, we're probably better off sticking with the current overlap test.

An overlap test is also needed if the scalar or vector accesses covered
by the alias check are mixed together, rather than all statements for
the second access following all statements for the first access.

The new code for gcc.target/aarch64/sve/var_strict_[135].c is slightly
better than before.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-data-ref.c (create_intersect_range_checks_index): If the
alias pair describes simple WAW and WAR dependencies, just check
whether the first B access overlaps later A accesses.
(create_waw_or_war_checks): New function that performs the same
optimization on addresses.
(create_intersect_range_checks): Call it.

gcc/testsuite/
* gcc.dg/vect/vect-alias-check-8.c: Expect WAR/WAW checks to be used.
* gcc.dg/vect/vect-alias-check-14.c: Likewise.
* gcc.dg/vect/vect-alias-check-15.c: Likewise.
* gcc.dg/vect/vect-alias-check-18.c: Likewise.
* gcc.dg/vect/vect-alias-check-19.c: Likewise.
* gcc.target/aarch64/sve/var_stride_1.c: Update expected sequence.
* gcc.target/aarch64/sve/var_stride_2.c: Likewise.
* gcc.target/aarch64/sve/var_stride_3.c: Likewise.
* gcc.target/aarch64/sve/var_stride_5.c: Likewise.

From-SVN: r278409

5 years agoLRA: handle memory constraints that accept more than "m"
Richard Sandiford [Mon, 18 Nov 2019 15:26:07 +0000 (15:26 +0000)]
LRA: handle memory constraints that accept more than "m"

LRA allows address constraints that are more relaxed than "p":

  /* Target hooks sometimes don't treat extra-constraint addresses as
     legitimate address_operands, so handle them specially.  */
  if (insn_extra_address_constraint (cn)
      && satisfies_address_constraint_p (&ad, cn))
    return change_p;

For SVE it's useful to allow the same thing for memory constraints.
The particular use case is LD1RQ, which is an SVE instruction that
addresses Advanced SIMD vector modes and that accepts some addresses
that normal Advanced SIMD moves don't.

Normally we require every memory to satisfy at least "m", which is
defined to be a memory "with any kind of address that the machine
supports in general".  However, LD1RQ is very much special-purpose:
it doesn't really have any relation to normal operations on these
modes.  Adding its addressing modes to "m" would lead to bad Advanced
SIMD optimisation decisions in passes like ivopts.  LD1RQ therefore
has a memory constraint that accepts things "m" doesn't.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* lra-constraints.c (valid_address_p): Take the operand and a
constraint as argument.  If the operand is a MEM and the constraint
is a memory constraint, check whether the eliminated form of the
MEM already satisfies the constraint.
(process_address_1): Update calls accordingly.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/asm/ld1rq_f16.c: Remove XFAIL.
* gcc.target/aarch64/sve/acle/asm/ld1rq_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u64.c: Likewise.

From-SVN: r278408

5 years agoRemove vestiges of MODIFY_JNI_METHOD_CALL
Tom Tromey [Mon, 18 Nov 2019 14:22:57 +0000 (14:22 +0000)]
Remove vestiges of MODIFY_JNI_METHOD_CALL

I happened to notice that MODIFY_JNI_METHOD_CALL was defined in
cygming.h and documented in tm.texi.  However, because it was only
needed for gcj, it is obsolete.  This patch removes the vestiges.

Tested by grep, and rebuilding the documentation.

gcc/ChangeLog
2019-11-18  Tom Tromey  <tromey@adacore.com>

* doc/tm.texi: Rebuild.
* doc/tm.texi.in (Misc): Don't document MODIFY_JNI_METHOD_CALL.
* config/i386/cygming.h (MODIFY_JNI_METHOD_CALL): Don't define.

From-SVN: r278407