This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/20703] New: [tcb] FRE does not remove a fully redundant load.
- From: "kazu at cs dot umass dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 31 Mar 2005 16:33:08 -0000
- Subject: [Bug tree-optimization/20703] New: [tcb] FRE does not remove a fully redundant load.
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Consider:
int
foo (int *array)
{
if (array[1] != 0)
return array[1];
return 0;
}
Here is the result after the first DCE, which is immediately after FRE.
foo (array)
{
int D.1134;
int D.1133;
int * D.1132;
<bb 0>:
D.1132_3 = array_2 + 4B;
D.1133_4 = *D.1132_3;
if (D.1133_4 != 0) goto <L0>; else goto <L2>;
<L0>:;
D.1132_7 = D.1132_3;
D.1134_8 = *D.1132_7;
# D.1134_1 = PHI <D.1134_8(1), 0(0)>;
<L2>:;
return D.1134_1;
}
Note that the second load still stays there.
If I run copy-prop and FRE one more time immediately after running them
for the first time, then the second run of FRE can remove the redundant load.
By running the copy prop one more time, the second load becomes:
D.1134_8 = *D.1132_3;
Then then I guess it's easy for FRE to eliminate this load because
RHS looks exactly like the first load.
--
Summary: [tcb] FRE does not remove a fully redundant load.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kazu at cs dot umass dot edu
CC: dnovillo at redhat dot com,gcc-bugs at gcc dot gnu dot
org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20703