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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|jakub at gcc dot gnu.org           |uros at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Or, it is yours then.
Does it handle all of:
#ifdef __SIZEOF_INT128__
typedef unsigned __int128 U;
typedef signed __int128 S;
#else
typedef unsigned long long U;
typedef signed long long S;
#endif
void bar (void);
int f0 (U x, U y) { return x == y; }
int f1 (U x, U y) { return x != y; }
int f2 (U x, U y) { return x > y; }
int f3 (U x, U y) { return x >= y; }
int f4 (U x, U y) { return x < y; }
int f5 (U x, U y) { return x <= y; }
int f6 (S x, S y) { return x == y; }
int f7 (S x, S y) { return x != y; }
int f8 (S x, S y) { return x > y; }
int f9 (S x, S y) { return x >= y; }
int f10 (S x, S y) { return x < y; }
int f11 (S x, S y) { return x <= y; }
void f12 (U x, U y) { if (x == y) bar (); }
void f13 (U x, U y) { if (x != y) bar (); }
void f14 (U x, U y) { if (x > y) bar (); }
void f15 (U x, U y) { if (x >= y) bar (); }
void f16 (U x, U y) { if (x < y) bar (); }
void f17 (U x, U y) { if (x <= y) bar (); }
void f18 (S x, S y) { if (x == y) bar (); }
void f19 (S x, S y) { if (x != y) bar (); }
void f20 (S x, S y) { if (x > y) bar (); }
void f21 (S x, S y) { if (x >= y) bar (); }
void f22 (S x, S y) { if (x < y) bar (); }
void f23 (S x, S y) { if (x <= y) bar (); }

?  For == and != we already generate good code, better than LLVM or ICC, but
for the rest we don't.

Reply via email to