[Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
kazu at cs dot umass dot edu
gcc-bugzilla@gcc.gnu.org
Tue Jun 1 08:17:00 GMT 2004
void bar1 (void);
void bar2 (void);
void
foo (unsigned int a, unsigned int b)
{
if (a >= b)
bar1 ();
else if (b <= a)
bar2 ();
}
The last tree-ssa form looks like so:
foo (a, b)
{
<bb 0>:
if (a_1 >= b_2) goto <L0>; else goto <L1>;
<L0>:;
bar1 () [tail call];
goto <bb 4> (<L3>);
<L1>:;
if (b_2 <= a_1) goto <L2>; else goto <L3>;
<L2>:;
bar2 () [tail call];
<L3>:;
return;
}
Note that the second "if" should go away completely as the two "if"s
are identical except the order of the variables appearing in the condition.
This actually occurs in alias.i.t50.tailc like so:
if (T.1029_168 >= T.1030_170) goto <L6>; else goto <L2>;
<L2>:;
if (T.1030_170 <= T.1029_168) goto <L3>; else goto <L4>;
If I have the identical conditions twice, including the order of the variables,
then the second "if" goes away as expected.
--
Summary: Convert "If (a >= b) X else if (b <= a) Y" into "if (a
>= b) X".
Product: gcc
Version: 3.5.0
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: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757
More information about the Gcc-bugs
mailing list