Commit Graph

155354 Commits

Author SHA1 Message Date
Segher Boessenkool d5e2c91a26 print-rtl: NOT is ~, not !
Slim RTL dumps print the RTL code NOT as !, but that is misleading:
its semantics are like the C operator ~.  This fixes it.


	* print-rtl.c (print_exp): Print NOT as "~" instead of as "!".

From-SVN: r250913
2017-08-07 12:21:32 +02:00
Marek Polacek 1653a86549 re PR middle-end/81737 (164.gzip in SPEC CPU 2000 failed to build)
PR middle-end/81737
	* fold-const.c (fold_indirect_ref_1): Check type_domain.

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

From-SVN: r250912
2017-08-07 09:13:02 +00:00
Martin Liska 577eec5656 Canonicalize names of attributes.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* attribs.h (canonicalize_attr_name): New function.
	(cmp_attribs): Move from c-format.c and adjusted.
	(is_attribute_p): Moved from tree.h.
	* tree-inline.c: Add new includes.
	* tree.c (cmp_attrib_identifiers): Use cmp_attribs.
	(private_is_attribute_p): Remove.
	(private_lookup_attribute): Likewise.
	(private_lookup_attribute_by_prefix): Simplify.
	(remove_attribute): Use is_attribute_p.
	* tree.h: Remove removed declarations.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* array-notation-common.c: Add new includes.
	* c-format.c( handle_format_attribute): Canonicalize a format
	function name.
	* c-lex.c (c_common_has_attribute): Canonicalize name of an
	attribute.
	* c-pretty-print.c: Add new include.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* parser.c (cp_parser_gnu_attribute_list): Canonicalize name of an
	attribute.
	(cp_parser_std_attribute): Likewise.
	* tree.c: Add new include.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* c-parser.c (c_parser_attributes): Canonicalize name of an
	attribute.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* go-gcc.cc (Gcc_backend::function): Look up for no_split_stack
	and not __no_split_stack__.
2017-08-07  Martin Liska  <mliska@suse.cz>

	* g++.dg/cpp0x/pr65558.C: Update scanned pattern.
	* gcc.dg/parm-impl-decl-1.c: Likewise.
	* gcc.dg/parm-impl-decl-3.c: Likewise.
	* gcc.dg/Wattributes-5.c: New test.

From-SVN: r250911
2017-08-07 08:37:07 +00:00
Jakub Jelinek a5320f3ce2 * include/system/sys/ptrace.h: New file.
From-SVN: r250910
2017-08-07 10:32:47 +02:00
Jakub Jelinek f5b328d964 re PR middle-end/81698 (expand_case uses wrong edge as default edge)
PR middle-end/81698
	* stmt.c (emit_case_dispatch_table): Add DEFAULT_EDGE argument,
	instead of computing it in the function.  Formatting fix.
	(expand_case): Don't rely on default_edge being the first edge,
	clear it if removing it, pass default_edge to
	emit_case_dispatch_table.
	(expand_sjlj_dispatch_table): Pass NULL as DEFAULT_EDGE, formatting
	fix.

From-SVN: r250909
2017-08-07 10:29:21 +02:00
GCC Administrator c0e5f294e8 Daily bump.
From-SVN: r250908
2017-08-07 00:16:37 +00:00
Andrew Pinski 537bf9ac02 target_attr_10.c: Add -mcpu=generic.
2017-08-06  Andrew Pinski  <apinski@cavium.com>

        * gcc.target/aarch64/target_attr_10.c: Add -mcpu=generic.
        * gcc.target/aarch64/target_attr_13.c: LIkewise.
        * gcc.target/aarch64/target_attr_15.c: LIkewise.
        * gcc.target/aarch64/target_attr_4.c: Likewise.
        * gcc.target/aarch64/target_attr_1.c: Add -march=armv8-a.
        * gcc.target/aarch64/target_attr_2.c: Likewise.
        * gcc.target/aarch64/target_attr_7.c: Likewise.
        * gcc.target/aarch64/target_attr_crypto_ice_1.c: Likewise.
        * gcc.target/aarch64/target_attr_crypto_ice_2.c: Likewise.
        * gcc.target/aarch64/target_attr_3.c: Add -mcpu=generic -march=armv8-a.

From-SVN: r250904
2017-08-06 12:04:57 -07:00
Andrew Pinski 905964740f atomic_cmp_exchange_zero_reg_1.c: Pass -march=armv8-a+nolse, skip if -mcpu= is passed.
2017-08-06  Andrew Pinski  <apinski@cavium.com>

        * gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c: Pass
        -march=armv8-a+nolse, skip if -mcpu= is passed.
        * gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c: Likewise.

From-SVN: r250903
2017-08-06 11:10:58 -07:00
Andrew Pinski 08e9cb5a49 _Float16_1.c: Skip if supplied a -mcpu= option.
2017-08-06  Andrew Pinski  <apinski@cavium.com>

        * gcc.target/aarch64/_Float16_1.c: Skip if supplied a -mcpu= option.
        * gcc.target/aarch64/_Float16_2.c: Likewise.
        * gcc.target/aarch64/_Float16_3.c: Likewise.

From-SVN: r250902
2017-08-06 10:47:03 -07:00
Uros Bizjak cc8a9b8755 alpha.c (alpha_reorg): If trap is the last active insn in the function, emit NOP after the insn.
* config/alpha/alpha.c (alpha_reorg): If trap is the last active
	insn in the function, emit NOP after the insn.

From-SVN: r250901
2017-08-06 17:48:37 +02:00
Tom de Vries 9fba2943f1 Add missing edge probabilities in expand_oacc_for, tile case
;;   basic block 11, loop depth 2, freq 0, maybe hot
 ;;    prev block 22, next block 23, flags: (NEW, REACHABLE)
 ;;    pred:       22 (TRUE_VALUE)
 ;;                24 (TRUE_VALUE)
   ...
   if (.e_offset.15D.1971 < .e_bound.14D.1972)
-    goto <bb 23>; [100.00%] [count: INV]
+    goto <bb 23>; [80.01%] [count: INV]
   else
-    goto <bb 24>; [INV] [count: INV]
+    goto <bb 24>; [19.99%] [count: INV]

 ;;   basic block 23, loop depth 3, freq 0, maybe hot
 ;;    prev block 11, next block 24, flags: (NEW)
 ;;    pred:       11 [always]  (TRUE_VALUE)
 ;;                23 (TRUE_VALUE)
   ixD.1974 = .outer.4D.1967 + .e_offset.15D.1971;
   .e_offset.15D.1971 = .e_offset.15D.1971 + .e_step.16D.1973;
   if (.e_offset.15D.1971 < .e_bound.14D.1972)
-    goto <bb 23>; [INV] [count: INV]
+    goto <bb 23>; [80.01%] [count: INV]
   else
-    goto <bb 24>; [100.00%] [count: INV]
+    goto <bb 24>; [19.99%] [count: INV]

2017-08-06  Tom de Vries  <tom@codesourcery.com>

	* omp-expand.c (expand_oacc_for): Add missing edge probability for tile
	and element loops.

From-SVN: r250900
2017-08-06 09:56:38 +00:00
Tom de Vries f38057cc11 Add missing edge probability in expand_oacc_for
;;   basic block 10, loop depth 1, freq 0, maybe hot
 ;;    prev block 9, next block 19, flags: (NEW, REACHABLE)
 ;;    pred:       18 (FALSE_VALUE)
 ;;                9 (FALSE_VALUE)
   GIMPLE_NOP
   .chunk_no.7D.1948 = .chunk_no.7D.1948 + 1;
   if (.chunk_no.7D.1948 < .chunk_max.6D.1949)
-    goto <bb 18>; [INV] [count: INV]
+    goto <bb 18>; [80.01%] [count: INV]
   else
-    goto <bb 19>; [100.00%] [count: INV]
+    goto <bb 19>; [19.99%] [count: INV]

2017-08-06  Tom de Vries  <tom@codesourcery.com>

	* omp-expand.c (expand_oacc_for): Add missing edge probability for chunk
	loop.

From-SVN: r250899
2017-08-06 09:56:25 +00:00
Tom de Vries 4a6ad0832b Require nonlocal_goto for gcc.dg/pr78582.c
2017-08-06  Tom de Vries  <tom@codesourcery.com>

	* gcc.dg/pr78582.c: Require effective target nonlocal_goto.

From-SVN: r250898
2017-08-06 08:26:24 +00:00
Tom de Vries b363e7266c Fix my_memmove in gcc.c-torture/execute/builtins/memops-asm-lib.c
2017-08-06  Tom de Vries  <tom@codesourcery.com>

	* gcc.c-torture/execute/builtins/memops-asm-lib.c (my_memmove):  Fix return
	type.  Add missing return.

From-SVN: r250897
2017-08-06 08:26:12 +00:00
Tom de Vries 8fbcf07529 Fix call arguments mismatch in gcc.dg/torture/pr78218.c
2017-08-06  Tom de Vries  <tom@codesourcery.com>

	PR testsuite/81731
	* gcc.dg/torture/pr78218.c (struct v): New type, factored type out of
	variable 'a' definition.
	(b): Remove unused variable.
	(gp): New variable.
	(check): Add parameter corresponding to call in main, and handle.

From-SVN: r250896
2017-08-06 07:54:29 +00:00
GCC Administrator 366d1ec888 Daily bump.
From-SVN: r250894
2017-08-06 00:16:54 +00:00
Eric Botcazou b854df3cd8 c-ada-spec.c (has_static_fields): Look only into variables.
* c-ada-spec.c (has_static_fields): Look only into variables.
	(print_constructor): Add TYPE parameter and use it for the name.
	(print_destructor): Likewise.
	(print_ada_declaration): Adjust to new constructor/destructor names.
	Adjust calls to print_constructor and print_destructor.
	(print_ada_struct_decl): Do not test TREE_STATIC on FIELD_DECL.
	Look only into variables in the final loop.

From-SVN: r250890
2017-08-05 22:00:41 +00:00
GCC Administrator e7e5639eb2 Daily bump.
From-SVN: r250889
2017-08-05 00:16:30 +00:00
Joseph Myers 872c506b14 Regenerate .pot files.
gcc/po:
	* gcc.pot: Regenerate.

libcpp/po:
	* cpplib.pot: Regenerate.

From-SVN: r250885
2017-08-04 23:21:23 +01:00
Paolo Carlini 23d12941a3 re PR c++/79790 ([C++17] ICE class template argument deduction failed)
/cp
2017-08-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/79790
	* pt.c (do_class_deduction): Handle the case of no viable implicit
	deduction guides; simplify the code generating implicit deduction
	guides.

/testsuite
2017-08-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/79790
	* g++.dg/cpp1z/class-deduction42.C: New.

From-SVN: r250883
2017-08-04 22:15:48 +00:00
Paolo Carlini 67695c075d re PR c++/79790 ([C++17] ICE class template argument deduction failed)
/cp
2017-08-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/79790
	* pt.c (do_class_deduction): Handle the case of no viable implicit
	deduction guides; simplify the code generating implicit deduction
	guides.

/testsuite
2017-08-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/79790
	* g++.dg/cpp1z/class-deduction42.C: New.

From-SVN: r250882
2017-08-04 22:13:46 +00:00
Yury Gribov c779bea5b9 Remove useless floating point casts in comparisons.
2017-08-04  Yury Gribov  <tetra2005@gmail.com>

	PR tree-optimization/57371

gcc/
	* match.pd: New pattern.

gcc/testsuite/
	* c-c++-common/pr57371-1.c: New test.
	* c-c++-common/pr57371-2.c: New test.
	* c-c++-common/pr57371-3.c: New test.
	* c-c++-common/pr57371-4.c: New test.
	* gcc.dg/pr57371-5.c: New test.

From-SVN: r250877
2017-08-04 20:29:12 +00:00
Carl Love e52341f161 builtins-3.c: Remove ISA 3.0 word variant builtin test cases for vec_mule, and vec_mulo.
gcc/testsuite/ChangeLog:

2017-08-04  Carl Love  <cel@us.ibm.com>

	* gcc.target/powerpc/builtins-3.c: Remove ISA 3.0 word variant
	builtin test cases for vec_mule, and vec_mulo.
	* gcc.target/powerpc/builtins-3-p8.c: Add  ISA 3.0 word variant
	builtin test cases for vec_mule, and vec_mulo.

From-SVN: r250876
2017-08-04 18:39:30 +00:00
H.J. Lu 295940c3c2 i386: Rewrite check for AVX512 features
Add a new file, avx512-check.h, to check all AVX512 features.  The test
is skipped if any requested AVX512 features are unavailable.

	PR target/81590
	* gcc.target/i386/avx512-check.h: New file.
	* gcc.target/i386/avx5124fmaps-check.h: Removed.
	* gcc.target/i386/avx5124vnniw-check.h: Likewise.
	* gcc.target/i386/avx512cd-check.h: Likewise.
	* gcc.target/i386/avx512ifma-check.h: Likewise.
	* gcc.target/i386/avx512vbmi-check.h: Likewise.
	* gcc.target/i386/avx512vpopcntdq-check.h: Likewise.
	* gcc.target/i386/avx512bw-check.h: Rewrite.
	* gcc.target/i386/avx512dq-check.h: Likewise.
	* gcc.target/i386/avx512er-check.h: Likewise.
	* gcc.target/i386/avx512f-check.h: Likewise.
	* gcc.target/i386/avx512vl-check.h: Likewise.
	* gcc.target/i386/avx512f-helper.h: Include "avx512-check.h"
	only.
	(test_512): Removed.
	(avx512*_test): Likewise.
	* gcc.target/i386/avx512f-pr71559.c (TEST): Undef.

From-SVN: r250875
2017-08-04 10:48:57 -07:00
Henry Linjamäki 8c05890538 re PR hsa/81713 (BIT_FIELD_REF produced by Brig FE do not pass new verification)
Fix PR 81713
 * brigfrontend/brig-basic-inst-handler.cc: replace build_int_cst with
   bitsize_int in building BIT_FIELD_REF.
 * brigfrontend/brig-code-entry-handler.cc: likewise.

From-SVN: r250874
2017-08-04 15:50:14 +00:00
Ian Lance Taylor 8ffe2be85e runtime: dump registers for Alpha
Patch from Uros Bizjak.
    
    Reviewed-on: https://go-review.googlesource.com/53350

From-SVN: r250873
2017-08-04 13:46:39 +00:00
Marek Polacek f4f2c2ece3 re PR middle-end/81695 (internal compiler error: in size_binop_loc, at fold-const.c:1768)
PR middle-end/81695
	* fold-const.c (fold_indirect_ref_1): For ((int *)&a + 4 -> a[1],
	perform the computation in offset_int.

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

From-SVN: r250871
2017-08-04 11:28:04 +00:00
Richard Sandiford 62c8a2cf17 Pool alignment information for common bases
This patch is a follow-on to the fix for PR81136.  The testcase for that
PR shows that we can (correctly) calculate different base alignments
for two data_references but still tell that their misalignments wrt the
vector size are equal.  This is because we calculate the base alignments
for each dr individually, without looking at the other drs, and in
general the alignment we calculate is only guaranteed if the dr's DR_REF
actually occurs.

This is working as designed, but it does expose a missed opportunity.
We know that if a vectorised loop is reached, all statements in that
loop execute at least once, so it should be safe to pool the alignment
information for all the statements we're vectorising.  The only catch is
that DR_REFs for masked loads and stores only occur if the mask value is
nonzero.  For example, in:

    struct s __attribute__((aligned(32))) {
      int misaligner;
      int array[N];
    };

    int *ptr;
    for (int i = 0; i < n; ++i)
      ptr[i] = c[i] ? ((struct s *) (ptr - 1))->array[i] : 0;

we can only guarantee that ptr points to a "struct s" if at least
one c[i] is true.

This patch adds a DR_IS_CONDITIONAL_IN_STMT flag to record whether
the DR_REF is guaranteed to occur every time that the statement
executes to completion.  It then pools the alignment information
for references that aren't conditional in this sense.

2017-08-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR tree-optimization/81136
	* tree-vectorizer.h: Include tree-hash-traits.h.
	(vec_base_alignments): New typedef.
	(vec_info): Add a base_alignments field.
	(vect_record_base_alignments): Declare.
	* tree-data-ref.h (data_reference): Add an is_conditional_in_stmt
	field.
	(DR_IS_CONDITIONAL_IN_STMT): New macro.
	(create_data_ref): Add an is_conditional_in_stmt argument.
	* tree-data-ref.c (create_data_ref): Likewise.  Use it to initialize
	the is_conditional_in_stmt field.
	(data_ref_loc): Add an is_conditional_in_stmt field.
	(get_references_in_stmt): Set the is_conditional_in_stmt field.
	(find_data_references_in_stmt): Update call to create_data_ref.
	(graphite_find_data_references_in_stmt): Likewise.
	* tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Likewise.
	* tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.
	(vect_record_base_alignment): New function.
	(vect_record_base_alignments): Likewise.
	(vect_compute_data_ref_alignment): Adjust base_addr and aligned_to
	for nested statements even if we fail to compute a misalignment.
	Use pooled base alignments for unconditional references.
	(vect_find_same_alignment_drs): Compare base addresses instead
	of base objects.
	(vect_analyze_data_refs_alignment): Call vect_record_base_alignments.
	* tree-vect-slp.c (vect_slp_analyze_bb_1): Likewise.

gcc/testsuite/
	PR tree-optimization/81136
	* gcc.dg/vect/pr81136.c: Add scan test.

From-SVN: r250870
2017-08-04 10:42:53 +00:00
Richard Sandiford 2c515559f9 C++-ify vec_info structures
This patch uses new, delete, constructors and desctructors to manage
vec_info.  This includes making ~vec_info free all the data shared
by bb_vec_info and loop_vec_info, whereas previously the code was
duplicated in destroy_bb_vec_info and destroy_loop_vec_info.  This
in turn meant changing the order of:

  FOR_EACH_VEC_ELT (slp_instances, i, instance)
    vect_free_slp_instance (instance);

and:

  gimple_set_uid (stmt, -1);

in destroy_bb_vec_info/~_bb_vec_info, so that now vect_free_slp_instance
could see a uid of -1 as well as 0.  The patch updates vinfo_for_stmt
so that it returns NULL for a uid of -1.

2017-08-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-vectorizer.h (vec_info): Add a constructor and destructor.
	Add an explicit name for the enum.  Use auto_vec for slp_instances
	and grouped_stores.
	(_loop_vec_info): Add a constructor and destructor.  Use auto_vec
	for all vectors.
	(_bb_vec_info): Add a constructor and destructor.
	(vinfo_for_stmt): Return NULL for uids of -1 as well.
	(destroy_loop_vec_info): Delete.
	(vect_destroy_datarefs): Likewise.
	* tree-vectorizer.c (vect_destroy_datarefs): Delete.
	(vec_info::vec_info): New function.
	(vec_info::~vec_info): Likewise.
	(vectorize_loops): Use delete instead of destroy_loop_vec_info.
	* tree-parloops.c (gather_scalar_reductions): Use delete instead of
	destroy_loop_vec_info.
	* tree-vect-loop.c (new_loop_vec_info): Replace with...
	(_loop_vec_info::_loop_vec_info): ...this.
	(destroy_loop_vec_info): Replace with...
	(_loop_vec_info::~_loop_vec_info): ...this.  Unconditionally delete
	the stmt_vec_infos.  Leave handling of vec_info information to its
	destructor.  Remove explicit vector releases.
	(vect_analyze_loop_form): Use new instead of new_loop_vec_info.
	(vect_analyze_loop): Use delete instead of destroy_loop_vec_info.
	* tree-vect-slp.c (new_bb_vec_info): Replace with...
	(_bb_vec_info::_bb_vec_info): ...this.  Don't reserve space in
	BB_VINFO_GROUPED_STORES or BB_VINFO_SLP_INSTANCES.
	(destroy_bb_vec_info): Replace with...
	(_bb_vec_info::~_bb_vec_info): ...this.  Leave handling of vec_info
	information to its destructor.
	(vect_slp_analyze_bb_1): Use new and delete instead of
	new_bb_vec_info and destroy_bb_vec_info.
	(vect_slp_bb): Replace 2 calls to destroy_bb_vec_info with a
	single delete.

From-SVN: r250869
2017-08-04 10:41:12 +00:00
Richard Sandiford 9adee30521 Use base inequality for some vector alias checks
This patch checks whether two data references x and y cannot
partially overlap and so are independent whenever &x != &y.
We can then use this in the vectoriser to optimise alias checks.

gcc/
2016-08-04  Richard Sandiford  <richard.sandiford@linaro.org>

	* hash-traits.h (pair_hash): New struct.
	* tree-data-ref.h (data_dependence_relation): Add object_a and
	object_b fields.
	(DDR_OBJECT_A, DDR_OBJECT_B): New macros.
	* tree-data-ref.c (initialize_data_dependence_relation): Initialize
	DDR_OBJECT_A and DDR_OBJECT_B.
	* tree-vectorizer.h (vec_object_pair): New type.
	(_loop_vec_info): Add a check_unequal_addrs field.
	(LOOP_VINFO_CHECK_UNEQUAL_ADDRS): New macro.
	(LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Return true if there is an
	entry in check_unequal_addrs.  Check comp_alias_ddrs instead of
	may_alias_ddrs.
	* tree-vect-loop.c (destroy_loop_vec_info): Release
	LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
	(vect_analyze_loop_2): Likewise, when restarting.
	(vect_estimate_min_profitable_iters): Estimate the cost of
	LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
	* tree-vect-data-refs.c: Include tree-hash-traits.h.
	(vect_prune_runtime_alias_test_list): Try to handle conflicts
	using LOOP_VINFO_CHECK_UNEQUAL_ADDRS, if the data dependence allows.
	Count such tests in the final summary.
	* tree-vect-loop-manip.c (chain_cond_expr): New function.
	(vect_create_cond_for_align_checks): Use it.
	(vect_create_cond_for_unequal_addrs): New function.
	(vect_loop_versioning): Call it.

gcc/testsuite/
	* gcc.dg/vect/vect-alias-check-6.c: New test.

From-SVN: r250868
2017-08-04 10:40:35 +00:00
Richard Sandiford dfbddbeb1c Handle data dependence relations with different bases
This patch tries to calculate conservatively-correct distance
vectors for two references whose base addresses are not the same.
It sets a new flag DDR_COULD_BE_INDEPENDENT_P if the dependence
isn't guaranteed to occur.

The motivating example is:

  struct s { int x[8]; };
  void
  f (struct s *a, struct s *b)
  {
    for (int i = 0; i < 8; ++i)
      a->x[i] += b->x[i];
  }

in which the "a" and "b" accesses are either independent or have a
dependence distance of 0 (assuming -fstrict-aliasing).  Neither case
prevents vectorisation, so we can vectorise without an alias check.

I'd originally wanted to do the same thing for arrays as well, e.g.:

  void
  f (int a[][8], struct b[][8])
  {
    for (int i = 0; i < 8; ++i)
      a[0][i] += b[0][i];
  }

I think this is valid because C11 6.7.6.2/6 says:

  For two array types to be compatible, both shall have compatible
  element types, and if both size specifiers are present, and are
  integer constant expressions, then both size specifiers shall have
  the same constant value.

So if we access an array through an int (*)[8], it must have type X[8]
or X[], where X is compatible with int.  It doesn't seem possible in
either case for "a[0]" and "b[0]" to overlap when "a != b".

However, as the comment above "if (same_base_p)" explains, GCC is more
forgiving: it supports arbitrary overlap of arrays and allows arrays to
be accessed with different dimensionality.  There are examples of this
in PR50067.  The patch therefore only handles references that end in a
structure field access.

There are two ways of handling these dependences in the vectoriser:
use them to limit VF, or check at runtime as before.  I've gone for
the approach of checking at runtime if we can, to avoid limiting VF
unnecessarily, but falling back to a VF cap when runtime checks aren't
allowed.

The patch tests whether we queued an alias check with a dependence
distance of X and then picked a VF <= X, in which case it's safe to
drop the alias check.  Since vect_prune_runtime_alias_check_list
can be called twice with different VF for the same loop, it's no
longer safe to clear may_alias_ddrs on exit.  Instead we should use
comp_alias_ddrs to check whether versioning is necessary.

2017-08-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-data-ref.h (subscript): Add access_fn field.
	(data_dependence_relation): Add could_be_independent_p.
	(SUB_ACCESS_FN, DDR_COULD_BE_INDEPENDENT_P): New macros.
	(same_access_functions): Move to tree-data-ref.c.
	* tree-data-ref.c (ref_contains_union_access_p): New function.
	(access_fn_component_p): Likewise.
	(access_fn_components_comparable_p): Likewise.
	(dr_analyze_indices): Add a reference to access_fn_component_p.
	(dump_data_dependence_relation): Use SUB_ACCESS_FN instead of
	DR_ACCESS_FN.
	(constant_access_functions): Likewise.
	(add_other_self_distances): Likewise.
	(same_access_functions): Likewise.  (Moved from tree-data-ref.h.)
	(initialize_data_dependence_relation): Use XCNEW and remove
	explicit zeroing of DDR_REVERSED_P.  Look for a subsequence
	of access functions that have the same type.  Allow the
	subsequence to end with different bases in some circumstances.
	Record the chosen access functions in SUB_ACCESS_FN.
	(build_classic_dist_vector_1): Replace ddr_a and ddr_b with
	a_index and b_index.  Use SUB_ACCESS_FN instead of DR_ACCESS_FN.
	(subscript_dependence_tester_1): Likewise dra and drb.
	(build_classic_dist_vector): Update calls accordingly.
	(subscript_dependence_tester): Likewise.
	* tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Check
	DDR_COULD_BE_INDEPENDENT_P.
	* tree-vectorizer.h (LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Test
	comp_alias_ddrs instead of may_alias_ddrs.
	* tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr):
	New function.
	(vect_analyze_data_ref_dependence): Use it if
	DDR_COULD_BE_INDEPENDENT_P, but fall back to using the recorded
	distance vectors if that fails.
	(dependence_distance_ge_vf): New function.
	(vect_prune_runtime_alias_test_list): Use it.  Don't clear
	LOOP_VINFO_MAY_ALIAS_DDRS.

gcc/testsuite/
	* gcc.dg/vect/vect-alias-check-3.c: New test.
	* gcc.dg/vect/vect-alias-check-4.c: Likewise.
	* gcc.dg/vect/vect-alias-check-5.c: Likewise.

From-SVN: r250867
2017-08-04 10:39:44 +00:00
Richard Biener 165b2f5f5d re PR middle-end/81705 (UBSAN: yet another false positive)
2017-08-04  Richard Biener  <rguenther@suse.de>

	PR middle-end/81705
	* fold-const.c (fold_binary_loc): Properly restrict
	minus_var0 && minus_var1 case when associating undefined overflow
	entities.

	* c-c++-common/ubsan/pr81705.c: New testcase.

From-SVN: r250866
2017-08-04 10:33:39 +00:00
Tom de Vries 54cb4e2006 Add missing edge probability in simd_clone_adjust
Currently we generate an if with probability set on only one of the two edges:
  <bb 5> [0.00%] [count: INV]:
  _5 = mask.3[iter.6_3];
  if (_5 == 0)
    goto <bb 6>; [INV] [count: INV]
  else
    goto <bb 2>; [100.00%] [count: INV]

Add the missing edge probability, and set the split to unlikely/likely:
  if (_5 == 0)
    goto <bb 6>; [19.99%] [count: INV]
  else
    goto <bb 2>; [80.01%] [count: INV]

2017-08-04  Tom de Vries  <tom@codesourcery.com>

	* omp-simd-clone.c (simd_clone_adjust): Add missing edge probability.

From-SVN: r250865
2017-08-04 07:27:05 +00:00
GCC Administrator 07cf14668f Daily bump.
From-SVN: r250864
2017-08-04 00:16:34 +00:00
Bill Schmidt 7c0881d531 rs6000-c.c (altivec_resolve_overloaded_builtin): Don't start diagnostic messages with a capital letter.
[gcc]

2017-08-03  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Don't start diagnostic messages with a capital letter.
	* config/rs6000/rs6000.c (rs6000_option_override_internal):
	Likewise.
	(rs6000_invalid_builtin): Likewise.
	(rs6000_trampoline_init): Likewise.

[gcc/testsuite]

2017-08-03  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c: Adjust for error
	messages that used to start with a capital letter.
	* gcc.target/powerpc/bfp/scalar-cmp-exp-gt-2.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-cmp-exp-lt-2.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-cmp-unordered-2.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-extract-exp-1.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-extract-exp-4.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-extract-sig-1.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-extract-sig-4.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-insert-exp-1.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-insert-exp-10.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-insert-exp-4.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-insert-exp-7.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-data-class-11.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-data-class-6.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-data-class-7.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-neg-2.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-neg-3.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-neg-5.c: Likewise.
	* gcc.target/powerpc/bfp/vec-extract-exp-2.c: Likewise.
	* gcc.target/powerpc/bfp/vec-extract-exp-3.c: Likewise.
	* gcc.target/powerpc/bfp/vec-extract-sig-2.c: Likewise.
	* gcc.target/powerpc/bfp/vec-extract-sig-3.c: Likewise.
	* gcc.target/powerpc/bfp/vec-insert-exp-2.c: Likewise.
	* gcc.target/powerpc/bfp/vec-insert-exp-3.c: Likewise.
	* gcc.target/powerpc/bfp/vec-insert-exp-6.c: Likewise.
	* gcc.target/powerpc/bfp/vec-insert-exp-7.c: Likewise.
	* gcc.target/powerpc/bfp/vec-test-data-class-2.c: Likewise.
	* gcc.target/powerpc/bfp/vec-test-data-class-3.c: Likewise.
	* gcc.target/powerpc/byte-in-either-range-1.c: Likewise.
	* gcc.target/powerpc/byte-in-range-1.c: Likewise.
	* gcc.target/powerpc/byte-in-set-1.c: Likewise.
	* gcc.target/powerpc/crypto-builtin-2.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-1.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-11.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-16.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-21.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-26.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-31.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-36.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-41.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-46.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-51.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-56.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-6.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-61.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-66.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-71.c: Likewise.
	* gcc.target/powerpc/dfp/dtstsfi-76.c: Likewise.
	* gcc.target/powerpc/vsu/vec-all-nez-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-any-eqz-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-cmpnez-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c: Likewise.
	* gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Likewise.
	* gcc.target/powerpc/vsu/vec-xl-len-12.c: Likewise.
	* gcc.target/powerpc/vsu/vec-xlx-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-xrx-7.c: Likewise.
	* gcc.target/powerpc/vsu/vec-xst-len-12.c: Likewise.

From-SVN: r250860
2017-08-03 21:22:03 +00:00
Ian Lance Taylor 194f08aeae re PR go/81617 (mksigtab.sh fails to resolve NSIG with glibc 2.26)
PR go/81617
    libgo: change mksigtab to recognize glibc 2.26 NSIG expression
    
    Fixes golang/go#21147
    Fixes GCC PR 81617
    
    Reviewed-on: https://go-review.googlesource.com/52611

From-SVN: r250858
2017-08-03 18:09:12 +00:00
Jakub Jelinek 2fdaed8980 re PR target/81621 (ICE in delete_insn, at cfgrtl.c:167 with s390x cross compiler)
PR target/81621
	* bb-reorder.c (pass_partition_blocks::execute): Return TODO_df_finish
	after setting changeable df flags.

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

From-SVN: r250857
2017-08-03 16:41:08 +02:00
Richard Biener 63e434cafa lto-symtab.h (lto_symtab_prevail_decl): Do not use DECL_ABSTRACT_ORIGIN as flag we can end up using that.
2017-08-03  Richard Biener  <rguenther@suse.de>

	* lto-symtab.h (lto_symtab_prevail_decl): Do not use
	DECL_ABSTRACT_ORIGIN as flag we can end up using that.  Instead
	use DECL_LANG_FLAG_0.
	(lto_symtab_prevail_decl): Likewise.

From-SVN: r250856
2017-08-03 14:08:56 +00:00
Richard Biener 297db27910 tree-ssa-reassoc.c (should_break_up_subtract): Also break up if the use is in USE - X.
2017-08-03  Richard Biener  <rguenther@suse.de>

	* tree-ssa-reassoc.c (should_break_up_subtract): Also break
	up if the use is in USE - X.

	* gcc.dg/tree-ssa/reassoc-23.c: Adjust to fool early folding
	and CSE.

From-SVN: r250855
2017-08-03 14:08:15 +00:00
Alexander Monakov 75560de5f5 toplev: avoid recursive emergency_dump_function
* toplev.c (dumpfile.h): New include.
	(internal_error_reentered): New static function.  Use it...
	(internal_error_function): ...here to handle reentered internal_error.

From-SVN: r250854
2017-08-03 16:39:47 +03:00
Richard Biener 2d7744d4ef re PR sanitizer/81148 (UBSAN: two more false positives)
2017-08-03 Richard Biener  <rguenther@suse.de>

	PR middle-end/81148
	* fold-const.c (split_tree): Add minus_var and minus_con
	arguments, remove unused loc arg.  Never generate NEGATE_EXPRs
	here but always use minus_*.
	(associate_trees): Assert we never associate with MINUS_EXPR
	and NULL first operand.  Do not recurse for PLUS_EXPR operands
	when associating as MINUS_EXPR either.
	(fold_binary_loc): Track minus_var and minus_con.

	* c-c++-common/ubsan/pr81148.c: New testcase.

From-SVN: r250853
2017-08-03 11:52:00 +00:00
Tom de Vries 3cd361256d Apply finish_options on DECL_FUNCTION_SPECIFIC_OPTIMIZATION for ACCEL_COMPILER
2017-08-03  Tom de Vries  <tom@codesourcery.com>

	PR lto/81430
	* tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): If
	ACCEL_COMPILER, apply finish_options on
	DECL_FUNCTION_SPECIFIC_OPTIMIZATION.

From-SVN: r250852
2017-08-03 11:37:55 +00:00
Tom de Vries cad136a40b Error out on nvptx for fpatchable-function-entry
2017-08-03  Tom de Vries  <tom@codesourcery.com>

	PR target/81662
	* config/nvptx/nvptx.c (nvptx_option_override): Emit sorry if
	function_entry_patch_area_size > 0.

	* gcc.target/nvptx/patchable_function_entry-default.c: New test.

From-SVN: r250851
2017-08-03 11:18:09 +00:00
Jakub Jelinek 2392baa59e re PR driver/81650 (gcc -m32 mishandles -Walloc-size-larger-than=9223372036854775807)
PR driver/81650
	* calls.c (alloc_max_size): Use HOST_WIDE_INT_UC (10??)
	instead of 10??LU, perform unit multiplication in wide_int,
	don't change alloc_object_size_limit if the limit is larger
	than SSIZE_MAX.

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

From-SVN: r250850
2017-08-03 11:43:11 +02:00
Jakub Jelinek 1f9be5050f re PR tree-optimization/81655 (new test case gcc.dg/tree-ssa/pr81588.c fails on powerpc64)
PR tree-optimization/81655
	PR tree-optimization/81588
	* tree-ssa-reassoc.c (optimize_range_tests_var_bound): Handle also
	the case when ranges[i].low and high are 1 for unsigned type with
	precision 1.

From-SVN: r250849
2017-08-03 11:41:55 +02:00
Paolo Carlini e5e691a53f re PR c++/71440 (ICE on invalid C++ code in instantiate_type, at cp/class.c:8247)
/cp
2017-08-03  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71440
	* typeck.c (build_x_unary_op): Avoid pretty-printing constructor /
	destructor as expressions.

/testsuite
2017-08-03  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71440
	* g++.dg/template/crash127.C: New.

From-SVN: r250848
2017-08-03 09:26:17 +00:00
Jakub Jelinek 0a734553cc re PR middle-end/81052 (ICE in verify_dominators, at dominance.c:1184)
PR middle-end/81052
	* omp-low.c (diagnose_sb_0): Handle flag_openmp_simd like flag_openmp.
	(pass_diagnose_omp_blocks::gate): Enable also for flag_openmp_simd.

	* c-c++-common/pr81052.c: New test.

From-SVN: r250847
2017-08-03 10:34:16 +02:00
Prathamesh Kulkarni 96715b4baf tree-vrp.h: Add include guard.
2017-08-03  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	* tree-vrp.h: Add include guard.

From-SVN: r250846
2017-08-03 07:42:36 +00:00
Tom de Vries 673aef33be Require alias for gcc.dg/pr56727-2.c
2017-08-03  Tom de Vries  <tom@codesourcery.com>

	* gcc.dg/pr56727-2.c: Require alias.

From-SVN: r250845
2017-08-03 07:08:30 +00:00
Tom de Vries 2a8485f600 Require alloca for gcc.dg/attr-noipa.c
2017-08-03  Tom de Vries  <tom@codesourcery.com>

	* gcc.dg/attr-noipa.c: Require alloca.

From-SVN: r250844
2017-08-03 07:08:19 +00:00