diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-20 07:20:16 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-04-20 07:20:16 +0000 |
commit | 60d393e89c924e71208f72a7007e16dc8720bcc9 (patch) | |
tree | 675e34a118d4a53b661615e673aea77f0a5a8312 /gcc/tree-vect-stmts.c | |
parent | 82c6f58aaf17c769c7b1cb389ca15026c64ffb32 (diff) | |
download | gcc-60d393e89c924e71208f72a7007e16dc8720bcc9.zip gcc-60d393e89c924e71208f72a7007e16dc8720bcc9.tar.gz gcc-60d393e89c924e71208f72a7007e16dc8720bcc9.tar.bz2 |
re PR tree-optimization/70726 (Internal compiler error (ICE) on valid code)
2016-04-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/70726
* tree-vect-stmts.c (vectorizable_shift): Do not use scalar
shift amounts from a pattern stmt operand.
* g++.dg/vect/pr70726.cc: New testcase.
From-SVN: r235236
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 5f054c5..9ab4af4 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -4532,6 +4532,16 @@ vectorizable_shift (gimple *stmt, gimple_stmt_iterator *gsi, if (!operand_equal_p (gimple_assign_rhs2 (slpstmt), op1, 0)) scalar_shift_arg = false; } + + /* If the shift amount is computed by a pattern stmt we cannot + use the scalar amount directly thus give up and use a vector + shift. */ + if (dt[1] == vect_internal_def) + { + gimple *def = SSA_NAME_DEF_STMT (op1); + if (is_pattern_stmt_p (vinfo_for_stmt (def))) + scalar_shift_arg = false; + } } else { |