This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/14799] [tree-ssa] convert a sequence of "if"s to a "switch" statement
- From: "tom at codesourcery dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 14 Jan 2011 15:46:07 +0000
- Subject: [Bug tree-optimization/14799] [tree-ssa] convert a sequence of "if"s to a "switch" statement
- Auto-submitted: auto-generated
- References: <bug-14799-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14799
Tom de Vries <tom at codesourcery dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |tom at codesourcery dot com
--- Comment #3 from Tom de Vries <tom at codesourcery dot com> 2011-01-14 15:45:56 UTC ---
The example from the description field looks like this at tree level (optimized
dump with 4.5.1). It takes until late in the rtl untill the duplicate call
blocks are collapsed.
...
foo (int a)
{
<bb 2>:
if (a_1(D) == 30)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
bar (); [tail call]
goto <bb 10>;
<bb 4>:
if (a_1(D) == 31)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
bar (); [tail call]
goto <bb 10>;
<bb 6>:
if (a_1(D) == 53)
goto <bb 7>;
else
goto <bb 8>;
<bb 7>:
bar (); [tail call]
goto <bb 10>;
<bb 8>:
if (a_1(D) == 23)
goto <bb 9>;
else
goto <bb 10>;
<bb 9>:
bar (); [tail call]
<bb 10>:
return;
}
...
If the duplicate blocks would have been collapsed, it would look like this:
...
foo (int a)
{
<bb 2>:
if (a_1(D) == 30)
goto <bb 9>;
else
goto <bb 4>;
<bb 4>:
if (a_1(D) == 31)
goto <bb 9>;
else
goto <bb 6>;
<bb 6>:
if (a_1(D) == 53)
goto <bb 9>;
else
goto <bb 8>;
<bb 8>:
if (a_1(D) == 23)
goto <bb 9>;
else
goto <bb 10>;
<bb 9>:
bar (); [tail call]
<bb 10>:
return;
}
...
for this representation, the patch from PR 46935 comment 5 should work.