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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |pinskia at gcc dot 
gnu.org
             Status|NEW                         |ASSIGNED

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Adding
> 
> (for eqne (eq ne)
>  (for cmp (lt le eq ne ge gt)
>       icmp (ge gt ne eq lt le)
>  (simplify
>   (eqne (cmp @0 @1) (icmp @0 @1))
>   (if (!FLOAT_TYPE_P (TREE_TYPE (@0)))
>    { constant_boolean_node (eqne == NE_EXPR, type); }))))
> 
> fixes that (make more robust with tcc_comparison, inverted_...,
> inverted_...with_nans and handle NaNs like elsehwere).


Then simplier fix is replace:
```
/* x == ~x -> false */
/* x != ~x -> true */
(for cmp (eq ne)
 (simplify
  (cmp:c @0 (bit_not @0))
  { constant_boolean_node (cmp == NE_EXPR, type); }))
```
With
```
(for eqne (eq ne)
 (simplify
  (eqne:c @0 (maybe_bit_not @1))
  (with { bool was_cmp; }
   (if (bitwise_inverted_equal_p (@0, @1, wascmp))
    { constant_boolean_node (eqne == NE_EXPR, type); }))))
```

Reply via email to