https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87104

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-08-27
     Ever confirmed|0                           |1

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
So on GIMPLE the following are not canonicalized:

  <bb 2> [local count: 1073741825]:
  _1 = i_4(D) & 7;
  _8 = (int) i_4(D);
  if (_1 == 6)
    goto <bb 3>; [20.97%]
  else
    goto <bb 4>; [79.03%]

vs.

  <bb 2> [local count: 1073741825]:
  _1 = i_5(D) + 18446744073709551610;
  _2 = _1 & 7;
  _9 = (int) i_5(D);
  if (_2 == 0)
    goto <bb 3>; [34.00%]
  else
    goto <bb 4>; [66.00%]

where I'd call the former better.  Thus for some unknown constraint
on @1, @2 and @3

(simplify
 (eq (convert? (bit_and (plus @0 INTEGER_CST@3) @2)) @1)
 (eq (convert (bit_and @0 @2)) { ... }))

Reply via email to