diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-06 07:51:19 +0000 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2016-04-06 07:51:19 +0000 |
commit | a238b7f5a77507c0a42530cf65926134d3f05737 (patch) | |
tree | a769417a487e4de6810cdc6690d62e09a7b32cc4 | |
parent | e29f3d65b9aba15bd35a337c79c3241f97b84309 (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/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/builtins.c | 2 | ||||
-rw-r--r-- | gcc/ipa-prop.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr70022.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr70115.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.c | 36 |
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); } |