[Bug middle-end/115388] [15 Regression] wrong code at -O3 on x86_64-linux-gnu since r15-571-g1e0ae1f52741f7

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jun 10 09:26:03 GMT 2024


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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's DSE5 deleting

  Deleted dead store: a[b.19_216] = 1;

there's a big irreducible region following the loop with this store, but
I fail to see how we can reach the load without going through the other
redundant store.

Ah, wait - it's the same as with loops in irreducible regions and triggering
a latent issue.  We do

                      /* If we visit this PHI by following a backedge then we
                         have to make sure ref->ref only refers to SSA names
                         that are invariant with respect to the loop
                         represented by this PHI node.  */
                      if (dominated_by_p (CDI_DOMINATORS, gimple_bb (stmt),
                                          gimple_bb (use_stmt))
                          && !for_each_index (ref->ref ? &ref->ref :
&ref->base,
                                              check_name, gimple_bb
(use_stmt)))
                        return DSE_STORE_LIVE;

but we identify backedges by using dominators which only works for natural
loops and not irreducible regions.  We have to either disregard all refs in
irreducible regions or check for invariantness in the irreducible (sub-)region
spanned by the PHI and the backedge source.

I'm going to check the latter.


More information about the Gcc-bugs mailing list