https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116702
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- `MIN_EXPR <MAX_EXPR<a, 0> , 1>` -> `a > 0` : ``` #define cst1 0 #define cst2 1 int f(int a, int b, int c) { int t = (c > cst1 ? c : cst1); int t2 = (t < cst2) ? t : cst2; return t2; } int f2(int a, int b, int c) { int t = (c > cst1 ? c : cst1); if (c < cst2) return t; return cst2; } int f1(int a, int b, int c) { return (c > 0); } ``` The general pattern is: ``` #define cst1 9 #define cst2 (cst1+1) int f(int a, int b, int c) { int t = (c > cst1 ? c : cst1); int t2 = (t < cst2) ? t : cst2; return t2; } int f2(int a, int b, int c) { int t = (c > cst1 ? c : cst1); if (c < cst2) return t; return cst2; } int f3(int a, int b, int c) { return c <= cst1 ? cst1 : cst2; } ```