aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-10-28 10:09:37 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-10-28 10:09:37 +0000
commit056b09955b97083e9dfcd9825160a408433143bf (patch)
treeba80069b39df85d44caecbb6100e56528305f45d /gcc
parent6d27d749d70f21c40b58918b9aca2cfbb2f8d5e4 (diff)
downloadgcc-056b09955b97083e9dfcd9825160a408433143bf.zip
gcc-056b09955b97083e9dfcd9825160a408433143bf.tar.gz
gcc-056b09955b97083e9dfcd9825160a408433143bf.tar.bz2
re PR middle-end/65962 (Missed vectorization of strided stores)
2015-10-28 Richard Biener <rguenther@suse.de> PR tree-optimization/65962 * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Avoid creating loop carried dependences also for outer loops of the loop a use to replace is in. * gcc.dg/vect/vect-62.c: Adjust. From-SVN: r229481
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-62.c7
-rw-r--r--gcc/tree-ssa-pre.c10
4 files changed, 20 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 416bc15..883f1b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2015-10-28 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/65962
+ * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
+ Avoid creating loop carried dependences also for outer loops
+ of the loop a use to replace is in.
+
+2015-10-28 Richard Biener <rguenther@suse.de>
+
* common.opt (fchecking): New flag controlling flag_checking.
* passes.c (verify_curr_properties): Drop DEBUG_FUNCTION.
* timevar.c (timer::print): Adjust output.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9d7a47c..2fd643e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2015-10-28 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/65962
+ * gcc.dg/vect/vect-62.c: Adjust.
+
+2015-10-28 Richard Biener <rguenther@suse.de>
+
PR middle-end/68067
* gcc.dg/torture/pr68067-1.c: New testcase.
* gcc.dg/torture/pr68067-2.c: Likewise.
diff --git a/gcc/testsuite/gcc.dg/vect/vect-62.c b/gcc/testsuite/gcc.dg/vect/vect-62.c
index 64be339..f11301c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-62.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-62.c
@@ -33,9 +33,8 @@ int main1 ()
}
/* Multidimensional array. Aligned. The "inner" dimensions
- are invariant in the inner loop. Vectorizable, but the
- vectorizer detects that everything is invariant and that
- the loop is better left untouched. (it should be optimized away). */
+ are invariant in the inner loop. The outer loop is
+ vectorizable after invariant/store motion. */
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
@@ -65,5 +64,5 @@ int main (void)
return main1 ();
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index c5af63d..7deb5a4 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -4082,8 +4082,9 @@ eliminate_dom_walker::before_dom_children (basic_block b)
gimple *def_stmt = SSA_NAME_DEF_STMT (sprime);
basic_block def_bb = gimple_bb (def_stmt);
if (gimple_code (def_stmt) == GIMPLE_PHI
- && b->loop_father->header == def_bb)
+ && def_bb->loop_father->header == def_bb)
{
+ loop_p loop = def_bb->loop_father;
ssa_op_iter iter;
tree op;
bool found = false;
@@ -4092,9 +4093,8 @@ eliminate_dom_walker::before_dom_children (basic_block b)
affine_iv iv;
def_bb = gimple_bb (SSA_NAME_DEF_STMT (op));
if (def_bb
- && flow_bb_inside_loop_p (b->loop_father, def_bb)
- && simple_iv (b->loop_father,
- b->loop_father, op, &iv, true))
+ && flow_bb_inside_loop_p (loop, def_bb)
+ && simple_iv (loop, loop, op, &iv, true))
{
found = true;
break;
@@ -4110,7 +4110,7 @@ eliminate_dom_walker::before_dom_children (basic_block b)
print_generic_expr (dump_file, sprime, 0);
fprintf (dump_file, " which would add a loop"
" carried dependence to loop %d\n",
- b->loop_father->num);
+ loop->num);
}
/* Don't keep sprime available. */
sprime = NULL_TREE;