https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112418
Bug ID: 112418
Summary: factor_out_conditional_operation could be done for
more phis
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: pinskia at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Depends on: 112324
Target Milestone: ---
Take:
```
int f(int a, int b, int d)
{
int c;
if (a < 0)
{
c = d > 0 ? d : -d;
a = -a;
}
else
{
c = d > 0 ? d : -d;
a = a;
}
return a + c;
}
```
We should be able to optimize this to just:
```
_11 = ABS_EXPR <a_3(D)>;
c_2 = ABS_EXPR <d_4(D)>;
_9 = c_2 + _11;
```
in phiopt1
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112324
[Bug 112324] phiopt fail to recog if (b < 0) max = MAX(-b, max); else max = MAX
(b, max) into max = MAX (ABS(b), max)