https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125501

--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Macleod from comment #9)
> (In reply to Richard Biener from comment #7)
> > What unswitch produces still looks OK.  Instead of if (a4 == 0) return;
> > we'll do if (a4 == a5) if (a4 == 0) return;  But the inner if is gone
> > in .optimized, DOM3/threadfull2/VRP2 remove it.
> > 
> > I suspect sth is amiss with ranger/relations, we have some unreachable ()
> > on some unrelated path.
> > 
> > Andrew, can you have a look please?
> 
> I'll look later when I get a chance, but at first glance on my build, it
> shows
>  
>   q.i.225t.cddce3:Deleting : if (a4_14(D) == 0B)
> 
>   its there through store-merging, and then cddce3 deleted the second if... ?

There's three of them, one guarding an unreachable path (but we don't reach
that at runtime):

a-t.c.211t.thread2:  if (a4_14(D) == a5_16(D))
a-t.c.211t.thread2:  if (a4_14(D) == 0B)
a-t.c.211t.thread2:  if (a4_14(D) == 0B)
a-t.c.212t.dom3:Folding predicate a4_14(D) == 0B to 0
a-t.c.212t.dom3:  if (a4_14(D) == a5_16(D))
a-t.c.212t.dom3:  if (a4_14(D) == 0B)

DOM3 elided the important one.  CDDCE3 elides

-  <bb 3> [count: 0]:
-  if (a4_14(D) == 0B)
-    goto <bb 15>; [4.02%]
-  else
-    goto <bb 4>; [95.98%]
-
-  <bb 4> [count: 0]:
-  f11_c17.1_29 = f11_c17;
-  goto <bb 15>; [100.00%]
...
-  <bb 15> [local count: 396743138]:
+  <bb 13> [local count: 396743138]:
 <L12>:
   return;

because the code in BB4 is dead now, but that's fine.

Reply via email to