http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51938

Marc Glisse <marc.glisse at normalesup dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|rtl-optimization            |tree-optimization

--- Comment #4 from Marc Glisse <marc.glisse at normalesup dot org> 2012-06-07 
14:54:02 UTC ---
Changing to tree-optimization (doing the optimization at RTL level would
require finite-math-only).

There is plenty of code that corresponds to A&&B and A||B, but (almost) nothing
for A&&!B. Quite a big missing piece...

<bb 2>:
  if (x_2(D) > 0.0)
    goto <bb 5>;
  else
    goto <bb 3>;

<bb 3>:
  if (x_2(D) < 0.0)
    goto <bb 4>;
  else
    goto <bb 5>;

The 2 conditions don't share the same then branch or the same else branch (it
is a mix), so ifcombine doesn't even try to turn it into

  if (x_2(D) > 0.0 || !(x_2(D) < 0.0))
    goto <bb 5>;
  else
    goto <bb 4>;

Besides, it doesn't look like the logic is in place to fold that condition into
just its second half (but I may have missed it).

Reply via email to