This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/24028] New: CCP is broken
- From: "kazu at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Sep 2005 05:02:34 -0000
- Subject: [Bug tree-optimization/24028] New: CCP is broken
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Consider:
int
foo (int a)
{
int b;
int c;
b = 0;
if (b)
c = a;
else
c = 9;
return c;
}
At the end of CCP, we should see "return 9;".
However, we don't.
Here is the SSA form right before CCP.
foo (a)
{
int c;
int b;
int D.1612;
<bb 0>:
b_2 = 0;
if (b_2 != 0) goto <L0>; else goto <L1>;
<L0>:;
c_7 = a_6;
goto <bb 3> (<L2>);
<L1>:;
c_5 = 9;
# c_1 = PHI <c_7(1), c_5(2)>;
<L2>:;
c_3 = c_1;
return c_3;
}
Here is a part of the output from CCP.
Simulating block 3
Visiting statement:
c_3 = c_1;
Lattice value changed to VARYING. Adding SSA edges to worklist.
Note that c_3 is considered VARYING even though it should have
a constant value of 9.
This is really strange because CCP does not visit block 1 (or <L0>).
So when evaluating the PHI node
# c_1 = PHI <c_7(1), c_5(2)>;
c_1 should get 9, and CCP does know that c_5 is equal to 9.
--
Summary: CCP is broken
Product: gcc
Version: unknown
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kazu at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24028