[Bug tree-optimization/106615] redundant load and store introduced in if-true-branch
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Aug 14 16:28:00 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106615
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Keywords| |missed-optimization
Last reconfirmed| |2022-08-14
Status|UNCONFIRMED |NEW
Severity|normal |enhancement
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Reduced testcase:
int g_44;
void func_16(int *a, unsigned long int b) {
*a = 5;
if ((g_44 = 1) <= b)
;
else
*a = 0;
}
---- CUT ----
So CSElim on the gimple level goes from:
*a_3(D) = 5;
g_44 = 1;
if (b_6(D) != 0)
goto <bb 4>; [50.00%]
else
goto <bb 3>; [50.00%]
<bb 3> [local count: 536870913]:
*a_3(D) = 0;
<bb 4> [local count: 1073741824]:
return;
to:
*a_3(D) = 5;
g_44 = 1;
if (b_6(D) != 0)
goto <bb 3>; [50.00%]
else
goto <bb 4>; [50.00%]
<bb 3> [local count: 536870912]:
cstore_8 = MEM <int> [(void *)a_3(D)];
<bb 4> [local count: 1073741824]:
# cstore_9 = PHI <cstore_8(3), 0(2)>
MEM <int> [(void *)a_3(D)] = cstore_9;
Thinking it might be able to remove the load inside the if branch (for an
example at -O2 with 1 instead of 5, GCC can remove the load).
And then nothing afterwards will undo that transformation.
More information about the Gcc-bugs
mailing list