https://gcc.gnu.org/g:6a510dea7f3b047d0650a48e558a4911973930eb
commit r15-7229-g6a510dea7f3b047d0650a48e558a4911973930eb Author: Richard Biener <rguent...@suse.de> Date: Mon Jan 27 12:53:21 2025 +0100 tree-optimization/118653 - ICE in vectorizable_live_operation The checking code didn't take into account debug uses. PR tree-optimization/118653 * tree-vect-loop.cc (vectorizable_live_operation): Also allow out-of-loop debug uses. * gcc.dg/vect/pr118653.c: New testcase. Diff: --- gcc/testsuite/gcc.dg/vect/pr118653.c | 15 +++++++++++++++ gcc/tree-vect-loop.cc | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr118653.c b/gcc/testsuite/gcc.dg/vect/pr118653.c new file mode 100644 index 000000000000..9322b23a17db --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr118653.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -g" } */ + +static short func1 (short si1, short si2) { + return (si1 - si2); +} +unsigned short g_72; +extern int g_100[]; +short g_173; +void func_42(void) +{ + for (g_173 = 10; g_173 > 0; g_173 = func1 (g_173, 1)) + for (g_72 = 1; g_72 < 5; g_72++) + g_100[g_72] &= 1; +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index edd7d4d87630..ce674a71e8a0 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -11574,7 +11574,8 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, /* There a no further out-of-loop uses of lhs by LC-SSA construction. */ FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, lhs) - gcc_assert (flow_bb_inside_loop_p (loop, gimple_bb (use_stmt))); + gcc_assert (is_gimple_debug (use_stmt) + || flow_bb_inside_loop_p (loop, gimple_bb (use_stmt))); } else {