diff options
author | Changpeng Fang <changpeng.fang@amd.com> | 2010-08-12 22:18:32 +0000 |
---|---|---|
committer | Changpeng Fang <cfang@gcc.gnu.org> | 2010-08-12 22:18:32 +0000 |
commit | 3cb35c125045f8c470dcf0e58f7d7b81bb437091 (patch) | |
tree | 272cdeba51c3ef614b9354e283c5f3383c30e8c0 /gcc | |
parent | 95718cf89d773741e7b8cc876104b5b6483c1399 (diff) | |
download | gcc-3cb35c125045f8c470dcf0e58f7d7b81bb437091.zip gcc-3cb35c125045f8c470dcf0e58f7d7b81bb437091.tar.gz gcc-3cb35c125045f8c470dcf0e58f7d7b81bb437091.tar.bz2 |
pr45241 give up dot_prod pattern searching if stmt is outside the loop.
* tree-vect-patterns.c (vect_recog_dot_prod_pattern): Give
up dot_prod pattern searching if a stmt is outside the loop.
* gcc.dg/vect/no-tree-pre-pr45241.c: New.
From-SVN: r163207
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/no-tree-pre-pr45241.c | 20 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 5 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39b2e75..e5d92f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-08-12 Changpeng Fang <changpeng.fang@amd.com> + + * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Give + up dot_prod pattern searching if a stmt is outside the loop. + 2010-08-12 H.J. Lu <hongjiu.lu@intel.com> Uros Bizjak <ubizjak@gmail.com> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0f2a7cc..e0a2b96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-12 Changpeng Fang <changpeng.fang@amd.com> + + PR tree-optimization/45241 + * gcc.dg/vect/no-tree-pre-pr45241.c: New test. + 2010-08-12 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/pr40906-1.c: Add -fno-asynchronous-unwind-tables diff --git a/gcc/testsuite/gcc.dg/vect/no-tree-pre-pr45241.c b/gcc/testsuite/gcc.dg/vect/no-tree-pre-pr45241.c new file mode 100644 index 0000000..289a930 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/no-tree-pre-pr45241.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/45241 */ +/* { dg-do compile } */ +/* { dg-options "-ftree-vectorize" } */ + +int +foo (short x) +{ + short i, y; + int sum; + + for (i = 0; i < x; i++) + y = x * i; + + for (i = x; i > 0; i--) + sum += y; + + return sum; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 19f0ae6..19df13f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -255,6 +255,11 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out) prod_type = half_type; stmt = SSA_NAME_DEF_STMT (oprnd0); + + /* It could not be the dot_prod pattern if the stmt is outside the loop. */ + if (!flow_bb_inside_loop_p (loop, gimple_bb (stmt))) + return NULL; + /* FORNOW. Can continue analyzing the def-use chain when this stmt in a phi inside the loop (in case we are analyzing an outer-loop). */ if (!is_gimple_assign (stmt)) |