This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/14799] [tree-ssa] convert a sequence of "if"s to a "switch" statement


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]