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

commit r17-5666-gfba8ef7b727a9d3769accf7eb226af4577b738cb
Author: Richard Biener <[email protected]>
Date:   Wed Oct 28 10:27:42 2026 +0100

    tree-optimization/128236 - avoid moving abnormal defs in rewriting complex 
loads
    
    The following avoids abnormals when we attempt to rewrite a complex
    load to component loads in forwprop because we are moving the def.
    
            PR tree-optimization/128236
            * tree-ssa-forwprop.cc (pass_forwprop::execute): Avoid
            moving abnormal defs when rewriting complex loads.
    
            * gcc.dg/torture/pr128236.c: New testcase.

Diff:
---
 gcc/testsuite/gcc.dg/torture/pr128236.c | 16 ++++++++++++++++
 gcc/tree-ssa-forwprop.cc                |  5 ++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gcc/testsuite/gcc.dg/torture/pr128236.c 
b/gcc/testsuite/gcc.dg/torture/pr128236.c
new file mode 100644
index 000000000000..7e69f09df6e2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr128236.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target indirect_jumps } */
+
+#include <setjmp.h>
+
+jmp_buf jb;
+void use (double);
+void g (_Complex double *p)
+{
+  double r = 0;
+  _Complex double c = *p;
+  setjmp (jb);
+  use (r);
+  r = __real__ c;
+  use (r);
+}
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index 88f69e12ed19..b526c85ef34d 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -6898,7 +6898,10 @@ pass_forwprop::execute (function *fun)
                  if (!is_gimple_assign (use_stmt)
                      || (gimple_assign_rhs_code (use_stmt) != REALPART_EXPR
                          && gimple_assign_rhs_code (use_stmt) != IMAGPART_EXPR)
-                     || TREE_OPERAND (gimple_assign_rhs1 (use_stmt), 0) != lhs)
+                     || TREE_OPERAND (gimple_assign_rhs1 (use_stmt), 0) != lhs
+                     /* We are moving the def, so avoid abnormals.  */
+                     || SSA_NAME_OCCURS_IN_ABNORMAL_PHI
+                          (gimple_assign_lhs (use_stmt)))
                    {
                      rewrite = false;
                      break;

Reply via email to