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

--- Comment #3 from Qi Feng <ffengqi at gcc dot gnu.org> ---
I have extended the transformations as following, the first five are the
original ones:

* unsigned
  Use UINT_MAX for demonstration, similar for UCHAR_MAX, USHRT_MAX, UINT_MAX,
  ULONG_MAX, ULLONG_MAX

  x >  y   &&   x != 0           -->   x > y
  x >  y   ||   x != 0           -->   x != 0
  x <= y   ||   x != 0           -->   true
  x <= y   ||   x == 0           -->   x <= y
  x >  y   &&   x == 0           -->   false

  x <  y   &&   x != UINT_MAX    -->   x < y
  x <  y   ||   x != UINT_MAX    -->   x != UINT_MAX
  x >= y   ||   x != UINT_MAX    -->   true
  x >= y   ||   x == UINT_MAX    -->   x >= y
  x <  y   &&   x == UINT_MAX    -->   false

* signed
  Use INT_MIN, INT_MAX for demonstration, similar for SCHAR_MIN, SHRT_MIN,
  INT_MIN, LONG_MIN, LLONG_MIN, SCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX,
  LLONG_MAX

  x >  y   &&   x != INT_MIN     -->   x > y
  x >  y   ||   x != INT_MIN     -->   x != INT_MIN
  x <= y   ||   x != INT_MIN     -->   true
  x <= y   ||   x == INT_MIN     -->   x <= y
  x >  y   &&   x == INT_MIN     -->   false

  x <  y   &&   x != INT_MAX     -->   x < y
  x <  y   ||   x != INT_MAX     -->   x != UINT_MAX
  x >= y   ||   x != INT_MAX     -->   true
  x >= y   ||   x == INT_MAX     -->   x >= y
  x <  y   &&   x == INT_MAX     -->   false


Want to know if I missed something.

Reply via email to