diff mbox series

tree-optimization/116380 - bogus SSA update with loop distribution

Message ID 20240821121911.C42A9386F46C@sourceware.org
State New
Headers show
Series tree-optimization/116380 - bogus SSA update with loop distribution | expand

Commit Message

Richard Biener Aug. 21, 2024, 12:18 p.m. UTC
When updating LC PHIs after copying loops we have to handle defs
defined outside of the loop appropriately (by not setting them to
NULL ...).  This mimics how we handle this in the SSA updating
code of the vectorizer.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

	PR tree-optimization/116380
	* tree-loop-distribution.cc (copy_loop_before): Handle
	out-of-loop defs appropriately.

	* gcc.dg/torture/pr116380.c: New testcase.
---
 gcc/testsuite/gcc.dg/torture/pr116380.c | 16 ++++++++++++++++
 gcc/tree-loop-distribution.cc           |  3 +++
 2 files changed, 19 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/torture/pr116380.c
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/pr116380.c b/gcc/testsuite/gcc.dg/torture/pr116380.c
new file mode 100644
index 00000000000..5ffd99459d2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr116380.c
@@ -0,0 +1,16 @@ 
+/* { dg-do compile } */
+/* { dg-additional-options "-fno-tree-scev-cprop" } */
+
+int a[3], d[3], c;
+int f(int e, int b)
+{
+  for (; e < 3; e++)
+    {
+      a[0] = 0;
+      if (b)
+	c = b;
+      d[e] = 0;
+      a[e] = 0;
+    }
+  return e;
+}
diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc
index f87393ee94d..10f261a8769 100644
--- a/gcc/tree-loop-distribution.cc
+++ b/gcc/tree-loop-distribution.cc
@@ -980,6 +980,9 @@  copy_loop_before (class loop *loop, bool redirect_lc_phi_defs)
 	  if (TREE_CODE (USE_FROM_PTR (use_p)) == SSA_NAME)
 	    {
 	      tree new_def = get_current_def (USE_FROM_PTR (use_p));
+	      if (!new_def)
+		/* Something defined outside of the loop.  */
+		continue;
 	      SET_USE (use_p, new_def);
 	    }
 	}