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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-07-27
             Status|UNCONFIRMED                 |ASSIGNED
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |pinskia at gcc dot 
gnu.org

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> it doesn't even have to be -N, any unsigned & N <= unsigned

Here are the ones which are valid:

U | N < U -> false
U & N <= U -> true
U & N > U -> false
U | N >= U -> true

(for cmp (LT GE)
 (simplify
  (cmp (bit_ior @0 INTEGER_CST@1) @0)
  ({ constant_boolean_node (cmp == GE, type); })))
(for cmp (LE GT)
 (simplify
  (cmp (bit_and @0 INTEGER_CST@1) @0)
  ({ constant_boolean_node (cmp == LE, type); })))

I don't see an easy way to combine these two patterns though.

Reply via email to