http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43491
amker.cheng <amker.cheng at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |amker.cheng at gmail dot
| |com
--- Comment #2 from amker.cheng <amker.cheng at gmail dot com> 2011-11-23
05:50:51 UTC ---
Noticed that pass 097t.copyprop4 propagates reg.0_12 to statement Y in
following dump:
-------------------------------------
<bb 2>:
reg.0_12 = reg;
D.4705_13 = MEM[(unsigned int *)reg.0_12 + 8B]; <-----statement Z
if (D.4705_13 != 0)
goto <bb 3>;
else
goto <bb 6>;
<bb 3>:
<bb 4>:
c ();
reg.0_1 = reg.0_12;
<-----statement X
D.4705_3 = MEM[(unsigned int *)reg.0_1 + 8B]; <-----statement Y
if (D.4705_3 != 0)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
goto <bb 4>;
<bb 6>:
return;
-------------------------------------
to be:
reg.0_1 = reg.0_12;
<-----statement X
D.4705_3 = MEM[(unsigned int *)reg.0_12 + 8B]; <-----statement Y
So, should it propagates reg directly? Could this be done on ssa?
Also I found
1) there are similar cases on redundant copy or load constant, for example,
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44025
2) some of these cases are generated after expanding into rtl;
3) redundant copy might be handled in IRA, but redundant load const might be
more difficult.
How about extending regcprop.c pass into a global pass?