https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117235

            Bug ID: 117235
           Summary: [15 Regression] trapping fp statement can be moved
                    across another trapping fp statement
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: major
          Priority: P3
         Component: tree-optimization
          Assignee: pinskia at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

Take:
```
int f(int a, float b, float c, float d, int x, int y)
{
    float e;
    float t;
    if (a)
    {
        e = x;
        t = c/d;
    } else
    {
        e = y;
        t = d/c;
    }
    return e + t;
}
```

At `-O2 -ftrapping-math`, the conversion from int to fp can moved after the
division.

Noticed while working on improving phiopt.
This was introduced by r15-4503-g8d6d6d537fdc75 . 

The simple fix is is_factor_profitable should return false if the statement can
trap and is not the last statement.
Though the more complex one is not check aliveness and then return false if
another statement can trap but I don't think that will be that profitable
really.

Reply via email to