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).

Reply via email to