diff options
author | Richard Biener <rguenther@suse.de> | 2019-10-28 13:42:03 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-10-28 13:42:03 +0000 |
commit | 97c6bea819ec0a773041308e62a7c05c33f093b0 (patch) | |
tree | fd82c1940beb67c5d5fae3fcd85d1f4ef7a94fc8 /gcc/tree-vect-patterns.c | |
parent | 14c835a01ceac44e685589489b46ffaabd034177 (diff) | |
download | gcc-97c6bea819ec0a773041308e62a7c05c33f093b0.zip gcc-97c6bea819ec0a773041308e62a7c05c33f093b0.tar.gz gcc-97c6bea819ec0a773041308e62a7c05c33f093b0.tar.bz2 |
re PR tree-optimization/92241 (ice in vect_mark_pattern_st mts, at tree-vect-patterns.c:5175)
2019-10-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92241
* tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): When
we failed to update the reduction index do not use the pattern
stmts for the reduction chain.
(vectorizable_reduction): When the reduction chain is corrupt,
fail.
* tree-vect-patterns.c (vect_mark_pattern_stmts): Stop when we
fail to update the reduction chain.
* gcc.dg/torture/pr92241.c: New testcase.
From-SVN: r277516
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r-- | gcc/tree-vect-patterns.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 31e9e2a..c0fdde6 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -5110,6 +5110,9 @@ vect_mark_pattern_stmts (stmt_vec_info orig_stmt_info, gimple *pattern_stmt, for (gimple_stmt_iterator si = gsi_start (def_seq); !gsi_end_p (si); gsi_next (&si)) { + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "extra pattern stmt: %G", gsi_stmt (si)); stmt_vec_info pattern_stmt_info = vect_init_pattern_stmt (gsi_stmt (si), orig_stmt_info, pattern_vectype); @@ -5169,10 +5172,13 @@ vect_mark_pattern_stmts (stmt_vec_info orig_stmt_info, gimple *pattern_stmt, found = true; break; } - if (found && s == pattern_stmt) - break; if (s == pattern_stmt) - gcc_unreachable (); + { + if (!found && dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "failed to update reduction index.\n"); + break; + } if (gsi_end_p (si)) s = pattern_stmt; else |