This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/15758] New: Convert "if (a >= b) X else if (a >= b) Y" into "if (a >= b) X else Y"
- 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:25:28 -0000
- Subject: [Bug tree-optimization/15758] New: Convert "if (a >= b) X else if (a >= b) Y" into "if (a >= b) X else Y"
- 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 (a <= b)
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 (a_1 <= b_2) goto <L2>; else goto <L3>;
<L2>:;
bar2 () [tail call];
<L3>:;
return;
}
Note that we could simply say
foo (a, b)
{
<bb 0>:
if (a_1 >= b_2) goto <L0>; else goto <L2>;
<L0>:;
bar1 () [tail call];
goto <bb 4> (<L3>);
<L2>:;
bar2 () [tail call];
<L3>:;
return;
}
because the second "if" is just the opposite of the first "if".
Note that the equality in the second "if" never holds.
--
Summary: Convert "if (a >= b) X else if (a >= b) Y" into "if (a
>= b) X else Y"
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=15758