https://gcc.gnu.org/g:ad9e846e25a7907920faecafa1f034526e86d348

commit r13-9315-gad9e846e25a7907920faecafa1f034526e86d348
Author: Richard Biener <rguent...@suse.de>
Date:   Wed Aug 21 13:56:40 2024 +0200

    tree-optimization/116380 - bogus SSA update with loop distribution
    
    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.
    
            PR tree-optimization/116380
            * tree-loop-distribution.cc (copy_loop_before): Handle
            out-of-loop defs appropriately.
    
            * gcc.dg/torture/pr116380.c: New testcase.
    
    (cherry picked from commit af0d2d95a5f767d92bd64f959679fb4612247b0b)

Diff:
---
 gcc/testsuite/gcc.dg/torture/pr116380.c | 16 ++++++++++++++++
 gcc/tree-loop-distribution.cc           |  3 +++
 2 files changed, 19 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/torture/pr116380.c 
b/gcc/testsuite/gcc.dg/torture/pr116380.c
new file mode 100644
index 000000000000..5ffd99459d26
--- /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 f6cd33aeec28..601ab3d0fb2e 100644
--- a/gcc/tree-loop-distribution.cc
+++ b/gcc/tree-loop-distribution.cc
@@ -966,6 +966,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);
            }
        }

Reply via email to