[Bug tree-optimization/109002] -O1 -ftree-pre -ftree-partial-pre results in stall value
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Mar 3 09:38:02 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109002
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
When doing partial PRE we somehow lose the effect of
g = 1;
we also generate weird PHIs:
<bb 2>
pretmp_20 = h;
pretmp_22 = g;
<bb 3>
# prephitmp_21 = PHI <pretmp_20(2), prephitmp_25(10)>
# prephitmp_23 = PHI <pretmp_22(2), prephitmp_24(10)>
# prephitmp_24 = PHI <pretmp_22(2), prephitmp_24(10)>
# prephitmp_25 = PHI <pretmp_20(2), prephitmp_25(10)>
those are all unnecessary ...
There's one old detail I never understood in partial ANTIC compute and that
gets us weird expressions in here, which is that we do not PHI translate
ANTIC_IN when computing PA_OUT. Fixing that fixes this bug.
I have no idea how to create a testcase for the testsuite though besides
verifying we're not inserting any PHI - but we also fail to partial-PRE the
load
of h here, likely because of the iteration order imposed by the infinite
loop which is probably also key to the miscompilation.
Anyway, I have a fix, but I'm not 100% sure it fixes the actual cause.
More information about the Gcc-bugs
mailing list