aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-04-06 07:51:19 +0000
committerRichard Biener <rguenther@suse.de>2016-04-06 07:51:19 +0000
commita238b7f5a77507c0a42530cf65926134d3f05737 (patch)
treea769417a487e4de6810cdc6690d62e09a7b32cc4
parente29f3d65b9aba15bd35a337c79c3241f97b84309 (diff)
2016-04-06 Richard Biener <rguenther@suse.de>
Backport from mainline 2016-03-01 Richard Biener <rguenther@suse.de> PR middle-end/70022 * fold-const.c (fold_indirect_ref_1): Fix range checking for vector BIT_FIELD_REF extract. * gcc.dg/pr70022.c: New testcase. 2016-03-07 Richard Biener <rguenther@suse.de> PR tree-optimization/70115 * tree-ssa-loop-ivcanon.c (propagate_into_all_uses): Remove. (propagate_constants_for_unrolling): Use replace_uses_by. * gcc.dg/torture/pr70115.c: New testcase. 2016-03-29 Richard Biener <rguenther@suse.de> PR middle-end/70424 * ipa-prop.c (ipa_compute_jump_functions_for_edge): Always use alignment returned by get_pointer_alignment_1 if it is bigger than BITS_PER_UNIT. * builtins.c (get_pointer_alignment_1): Do not return true for alignment extracted from SSA info. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@234773 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/builtins.c2
-rw-r--r--gcc/ipa-prop.c3
-rw-r--r--gcc/testsuite/ChangeLog13
-rw-r--r--gcc/testsuite/gcc.dg/pr70022.c10
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr70115.c20
-rw-r--r--gcc/tree-ssa-loop-ivcanon.c36
7 files changed, 72 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b575f8dd6c..b48331d74a5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,30 @@
2016-04-06 Richard Biener <rguenther@suse.de>
Backport from mainline
+ 2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70022
+ * fold-const.c (fold_indirect_ref_1): Fix range checking for
+ vector BIT_FIELD_REF extract.
+
+ 2016-03-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70115
+ * tree-ssa-loop-ivcanon.c (propagate_into_all_uses): Remove.
+ (propagate_constants_for_unrolling): Use replace_uses_by.
+
+ 2016-03-29 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70424
+ * ipa-prop.c (ipa_compute_jump_functions_for_edge): Always
+ use alignment returned by get_pointer_alignment_1 if it is
+ bigger than BITS_PER_UNIT.
+ * builtins.c (get_pointer_alignment_1): Do not return true
+ for alignment extracted from SSA info.
+
+2016-04-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
2016-03-30 Richard Biener <rguenther@suse.de>
PR middle-end/70450
diff --git a/gcc/builtins.c b/gcc/builtins.c
index e7fc95677c8..18b4c344003 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -502,7 +502,7 @@ get_pointer_alignment_1 (tree exp, unsigned int *alignp,
if (*alignp == 0)
*alignp = 1u << (HOST_BITS_PER_INT - 1);
/* We cannot really tell whether this result is an approximation. */
- return true;
+ return false;
}
else
{
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 9298fac9d56..747ab18f845 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -1683,7 +1683,8 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi,
unsigned HOST_WIDE_INT hwi_bitpos;
unsigned align;
- if (get_pointer_alignment_1 (arg, &align, &hwi_bitpos)
+ get_pointer_alignment_1 (arg, &align, &hwi_bitpos);
+ if (align > BITS_PER_UNIT
&& align % BITS_PER_UNIT == 0
&& hwi_bitpos % BITS_PER_UNIT == 0)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d51487403f3..fe2ad4ec3d4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,6 +1,19 @@
2016-04-06 Richard Biener <rguenther@suse.de>
Backport from mainline
+ 2016-03-01 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/70022
+ * gcc.dg/pr70022.c: New testcase.
+
+ 2016-03-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/70115
+ * gcc.dg/torture/pr70115.c: New testcase.
+
+2016-04-06 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
2016-03-30 Richard Biener <rguenther@suse.de>
PR middle-end/70450
diff --git a/gcc/testsuite/gcc.dg/pr70022.c b/gcc/testsuite/gcc.dg/pr70022.c
new file mode 100644
index 00000000000..30eb7ece250
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70022.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-w -Wno-psabi" } */
+
+typedef int v4si __attribute__ ((vector_size (16)));
+
+int
+foo (v4si v)
+{
+ return v[~0UL];
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr70115.c b/gcc/testsuite/gcc.dg/torture/pr70115.c
new file mode 100644
index 00000000000..0044fe4c2b1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr70115.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+typedef int size_t;
+char a;
+int main()
+{
+ size_t b, c;
+ for (;;)
+ {
+ b = 0;
+ for (; c;)
+ ;
+ for (; b < sizeof(long); b++)
+ ;
+ for (; b < c; b++)
+ a++;
+ for (; c < b; c++)
+ ;
+ }
+}
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c
index 138468d396a..f97c81912a6 100644
--- a/gcc/tree-ssa-loop-ivcanon.c
+++ b/gcc/tree-ssa-loop-ivcanon.c
@@ -1193,38 +1193,6 @@ canonicalize_induction_variables (void)
return 0;
}
-/* Propagate VAL into all uses of SSA_NAME. */
-
-static void
-propagate_into_all_uses (tree ssa_name, tree val)
-{
- imm_use_iterator iter;
- gimple use_stmt;
-
- FOR_EACH_IMM_USE_STMT (use_stmt, iter, ssa_name)
- {
- gimple_stmt_iterator use_stmt_gsi = gsi_for_stmt (use_stmt);
- use_operand_p use;
-
- FOR_EACH_IMM_USE_ON_STMT (use, iter)
- SET_USE (use, val);
-
- if (is_gimple_assign (use_stmt)
- && get_gimple_rhs_class (gimple_assign_rhs_code (use_stmt))
- == GIMPLE_SINGLE_RHS)
- {
- tree rhs = gimple_assign_rhs1 (use_stmt);
-
- if (TREE_CODE (rhs) == ADDR_EXPR)
- recompute_tree_invariant_for_addr_expr (rhs);
- }
-
- fold_stmt_inplace (&use_stmt_gsi);
- update_stmt (use_stmt);
- maybe_clean_or_replace_eh_stmt (use_stmt, use_stmt);
- }
-}
-
/* Propagate constant SSA_NAMEs defined in basic block BB. */
static void
@@ -1241,7 +1209,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& gimple_phi_num_args (phi) == 1
&& TREE_CODE (arg) == INTEGER_CST)
{
- propagate_into_all_uses (result, arg);
+ replace_uses_by (result, arg);
gsi_remove (&gsi, true);
release_ssa_name (result);
}
@@ -1260,7 +1228,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{
- propagate_into_all_uses (lhs, gimple_assign_rhs1 (stmt));
+ replace_uses_by (lhs, gimple_assign_rhs1 (stmt));
gsi_remove (&gsi, true);
release_ssa_name (lhs);
}