]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
middle-end: Fix phi-ssa assertion triggers. [PR106519]
authorTamar Christina <tamar.christina@arm.com>
Thu, 4 Aug 2022 15:35:31 +0000 (16:35 +0100)
committerTamar Christina <tamar.christina@arm.com>
Thu, 4 Aug 2022 15:35:31 +0000 (16:35 +0100)
For the diamond PHI form in tree_ssa_phiopt_worker we need to
extract edge e2 sooner.  This changes it so we extract it at the
same time we determine we have a diamond shape.

gcc/ChangeLog:

PR middle-end/106519
* tree-ssa-phiopt.cc (tree_ssa_phiopt_worker): Check final phi edge for
diamond shapes.

gcc/testsuite/ChangeLog:

PR middle-end/106519
* gcc.dg/pr106519.c: New test.

gcc/testsuite/gcc.dg/pr106519.c [new file with mode: 0644]
gcc/tree-ssa-phiopt.cc

diff --git a/gcc/testsuite/gcc.dg/pr106519.c b/gcc/testsuite/gcc.dg/pr106519.c
new file mode 100644 (file)
index 0000000..3d4662d
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+
+int bytestart, bytemem_0_0, modlookup_l_p;
+
+void
+modlookup_l() {
+  long j;
+  while (modlookup_l_p)
+    while (bytestart && j && bytemem_0_0)
+      j = j + 1;
+}
index a8e55e040649e17f83a2fc3340e368cf9c4c5e70..ef4c0b78f4e8fb4b323e8bb379602478994be9b6 100644 (file)
@@ -269,7 +269,10 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool do_hoist_loads, bool early_p)
        }
       else if (EDGE_SUCC (bb1, 0)->dest == EDGE_SUCC (bb2, 0)->dest
               && !empty_block_p (bb1))
-       diamond_p = true;
+       {
+         diamond_p = true;
+         e2 = EDGE_SUCC (bb2, 0);
+       }
       else
        continue;
 
@@ -324,7 +327,6 @@ tree_ssa_phiopt_worker (bool do_store_elim, bool do_hoist_loads, bool early_p)
          if (!candorest)
            continue;
 
-         e2 = diamond_p ? EDGE_SUCC (bb2, 0) : e2;
          phi = single_non_singleton_phi_for_edges (phis, e1, e2);
          if (!phi)
            continue;