https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112324
Bug ID: 112324 Summary: phiopt fail to recog if (b < 0) max = MAX(-b, max); else max = MAX (b, max) into max = MAX (ABS(b), max) Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: crazylht at gmail dot com Target Milestone: --- #define MAX(a, b) ((a) > (b) ? (a) : (b)) int foo (int n, int* a) { int max = 0; for (int i = 0; i != n; i++) { int tmp = a[i]; if (tmp < 0) max = MAX (-tmp, max); else max = MAX (tmp, max); } return max; } int foo1 (int n, int* a) { int max = 0; for (int i = 0; i != n; i++) { int tmp = a[i]; max = MAX ((tmp < 0 ? -tmp : tmp), max); } return max; } foo should be same as foo1, but gcc failed to recognize ABS_EXPR in foo. It's from pr110015(originally from source code in openjpeg).