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)