https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111910
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- That is: ``` int f(int a, int b) { if (a > b) return a - b; else return b - a; } int fa(int a, int b) { return (a > b) ? (a - b) : (b - a); } int f1(int a, int b) { int t = a - b; if (a > b) return t; else return -t; } int f2(int a, int b) { int t = a - b; if (t > 0) return t; else return -t; } int f3a(int a, int b) { return ((a - b) > 0) ? (a - b) : (b - a); } int f3(int a, int b) { int t = a - b; return t > 0 ? t : -t; } ``` All are detected as ABS<(a-b)> . Right now only f3a and f3 are detected as such.