diff options
author | Yuri Rumyantsev <ysrumyan@gmail.com> | 2015-08-11 13:52:17 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2015-08-11 13:52:17 +0000 |
commit | dbfa87aa8704d7cb2ce147966f27bdf70ce7596c (patch) | |
tree | 99a8e7b99d3199dd01af6513354c0b5d5aa5f8cc | |
parent | b32bc1ac16670eef2a0e61ae7bad47f8cfd278ed (diff) | |
download | gcc-dbfa87aa8704d7cb2ce147966f27bdf70ce7596c.zip gcc-dbfa87aa8704d7cb2ce147966f27bdf70ce7596c.tar.gz gcc-dbfa87aa8704d7cb2ce147966f27bdf70ce7596c.tar.bz2 |
tree-vect-stmts.c (vectorizable_shift): Add missed test on vect_induction_def.
gcc/
* tree-vect-stmts.c (vectorizable_shift): Add missed test on
vect_induction_def.
gcc/testsuite:
* gcc.target/i386/avx2-vect-shift.c: New test.
From-SVN: r226781
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx2-vect-shift.c | 16 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 4 |
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 099d2c1..7e31110 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-08-11 Yuri Rumyantsev <ysrumyan@gmail.com> + + * tree-vect-stmts.c (vectorizable_shift): Add missed test on + vect_induction_def. + 2015-08-11 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/66098 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7a35aad..93cacfb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-08-11 Yuri Rumyantsev <ysrumyan@gmail.com> + + * gcc.target/i386/avx2-vect-shift.c: New test. + 2015-08-11 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/66098 diff --git a/gcc/testsuite/gcc.target/i386/avx2-vect-shift.c b/gcc/testsuite/gcc.target/i386/avx2-vect-shift.c new file mode 100644 index 0000000..c82e370 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx2-vect-shift.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target avx2 } */ +/* { dg-options "-mavx2 -O3 -fdump-tree-vect-details" } */ + +#define N 32 +typedef unsigned int u32; +u32 a[N]; + +void foo() +{ + int i; + for (i=0; i<N;i++) + a[i] = 1 << i; +} +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 33a7e0c..2ddd434 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -4461,7 +4461,9 @@ vectorizable_shift (gimple stmt, gimple_stmt_iterator *gsi, /* Determine whether the shift amount is a vector, or scalar. If the shift/rotate amount is a vector, use the vector/vector shift optabs. */ - if (dt[1] == vect_internal_def && !slp_node) + if ((dt[1] == vect_internal_def + || dt[1] == vect_induction_def) + && !slp_node) scalar_shift_arg = false; else if (dt[1] == vect_constant_def || dt[1] == vect_external_def |