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.