https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50856
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here is a full testcase (f3 is caught via fold_cond_expr_with_comparison): ``` int f(int a, int b) { int t = a - b; if (t > 0) return t; return b - a; } int f1(int a, int b) { if (a > b) return a - b; return b - a; } int f2(int a, int b) { return (a > b) ? a - b : b - a; } int f3(int a, int b) { return (a - b) > 0 ? a - b : b - a; } ``` I should note we currently have the following note in match.pd about not folding `(a - b) > 0` because of catching f3: /* Transform comparisons of the form X - Y CMP 0 to X CMP Y. ??? The transformation is valid for the other operators if overflow is undefined for the type, but performing it here badly interacts with the transformation in fold_cond_expr_with_comparison which attempts to synthetize ABS_EXPR. */