diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-13 15:07:53 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-13 15:07:53 +0000 |
commit | 41b32876b8a0b8c19b35b768f942bdad1f96f893 (patch) | |
tree | 95a01f415a6fb153248e65e4d99e7d4a42dfff37 /gcc/tree-vect-loop.c | |
parent | 160576e1ac9bbee90af9e09e1507f64d58473358 (diff) | |
download | gcc-41b32876b8a0b8c19b35b768f942bdad1f96f893.zip gcc-41b32876b8a0b8c19b35b768f942bdad1f96f893.tar.gz gcc-41b32876b8a0b8c19b35b768f942bdad1f96f893.tar.bz2 |
re PR tree-optimization/87931 (ICE in vectorizable_reduction, at tree-vect-loop.c:6193 since r265876)
2018-11-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/87931
* tree-vect-loop.c (vect_is_simple_reduction): Restrict
nested cycles we support to latch computations vectorizable_reduction
handles.
* gcc.dg/graphite/pr87931.c: New testcase.
From-SVN: r266075
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index a6f0b82..1a39b3b 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -2976,6 +2976,22 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, if (nested_in_vect_loop && !check_reduction) { + /* FIXME: Even for non-reductions code generation is funneled + through vectorizable_reduction for the stmt defining the + PHI latch value. So we have to artificially restrict ourselves + for the supported operations. */ + switch (get_gimple_rhs_class (code)) + { + case GIMPLE_BINARY_RHS: + case GIMPLE_TERNARY_RHS: + break; + default: + /* Not supported by vectorizable_reduction. */ + if (dump_enabled_p ()) + report_vect_op (MSG_MISSED_OPTIMIZATION, def_stmt, + "nested cycle: not handled operation: "); + return NULL; + } if (dump_enabled_p ()) report_vect_op (MSG_NOTE, def_stmt, "detected nested cycle: "); return def_stmt_info; |