This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
- 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: 1 Jun 2004 08:17:31 -0000
- Subject: [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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