aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-01-27 12:53:21 +0100
committerRichard Biener <rguenth@gcc.gnu.org>2025-01-27 14:45:58 +0100
commit6a510dea7f3b047d0650a48e558a4911973930eb (patch)
treef34d65c0840265021e098d0943e48f603a525330 /gcc
parentc6977f765838a5ca8d321d916221a7368622bdd9 (diff)
downloadgcc-6a510dea7f3b047d0650a48e558a4911973930eb.zip
gcc-6a510dea7f3b047d0650a48e558a4911973930eb.tar.gz
gcc-6a510dea7f3b047d0650a48e558a4911973930eb.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr118653.c15
-rw-r--r--gcc/tree-vect-loop.cc3
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr118653.c b/gcc/testsuite/gcc.dg/vect/pr118653.c
new file mode 100644
index 0000000..9322b23
--- /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 edd7d4d..ce674a7 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
{