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

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Created attachment 43540
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43540&action=edit
candidate patch

Can you check whether this patch works for you (on the unreduced testcase which
likely exists)?

The underlying issue is of course bigger and not restricted to code-hoisting.
All the new code generated by PRE (inserted for partial redundancy removal or
code-hoisting) has no SSA info attached.  That includes points-to info which
isn't flow-sensitive but of course also all the flow-sensitive information
like range info and alignment info that we can't generally preserve easily.

This means that we'd ideally have passes computing those _after_ PRE.

Which means experimenting with a larger pass pipeline re-organization like
exchanging FRE after inlining and PRE and moving CCP after inlining downstream.

The alternative would be to make the elimination phase do simple dom-style
computation and propagation of both ranges (easy with the EVRP engine)
and alignment (moderately easy with some refactoring of CCP).  That would
leave points-to info which we'd ideally tack onto the PRE expressions then.

Reply via email to