diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-03-03 15:32:15 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-03-03 15:32:15 +0100 |
commit | 97ecdb46b1261d34e015df1f6eff20e069ca9bbf (patch) | |
tree | b2ed079d2bf0a2a11cb909b2bfd5b1e6bf1409a8 /gcc/tree-vect-patterns.c | |
parent | bc33dc51d905126cec9810da3b1c523ce73d0dc1 (diff) | |
download | gcc-97ecdb46b1261d34e015df1f6eff20e069ca9bbf.zip gcc-97ecdb46b1261d34e015df1f6eff20e069ca9bbf.tar.gz gcc-97ecdb46b1261d34e015df1f6eff20e069ca9bbf.tar.bz2 |
re PR target/70021 (Test miscompiled with -O3 option for -march=core-avx2.)
PR target/70021
* tree-vect-stmts.c (vect_mark_relevant): Remove USED_IN_PATTERN
argument, if STMT_VINFO_IN_PATTERN_P (stmt_info), always mark
the pattern no matter if it is used just by non-pattern, pattern
or mix thereof.
(process_use, vect_mark_stmts_to_be_vectorized): Adjust callers.
* tree-vect-patterns.c (vect_recog_vector_vector_shift_pattern): If
oprnd1 def_stmt is in pattern, don't look through it.
* gcc.dg/vect/pr70021.c: New test.
* gcc.target/i386/pr70021.c: New test.
From-SVN: r233940
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r-- | gcc/tree-vect-patterns.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 95ce38d..4b3065e 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -2090,7 +2090,8 @@ vect_recog_vector_vector_shift_pattern (vec<gimple *> *stmts, return NULL; tree def = NULL_TREE; - if (gimple_assign_cast_p (def_stmt)) + stmt_vec_info def_vinfo = vinfo_for_stmt (def_stmt); + if (!STMT_VINFO_IN_PATTERN_P (def_vinfo) && gimple_assign_cast_p (def_stmt)) { tree rhs1 = gimple_assign_rhs1 (def_stmt); if (TYPE_MODE (TREE_TYPE (rhs1)) == TYPE_MODE (TREE_TYPE (oprnd0)) |