/* { dg-options "-O2 -fdump-tree-phiopt" } */ int f0(int A) { // A == 0? A : -A same as -A if (A == 0) return A; return -A; } int f1(int A) { // A != 0? A : -A same as A if (A != 0) return A; return -A; } int f2(int A) { // A >= 0? A : -A same as abs (A) if (A >= 0) return A; return -A; } int f3(int A) { // A > 0? A : -A same as abs (A) if (A > 0) return A; return -A; } int f4(int A) { // A <= 0? A : -A same as -abs (A) if (A <= 0) return A; return -A; } int f5(int A) { // A < 0? A : -A same as -abs (A) if (A < 0) return A; return -A; } /* These should be optimized in phiopt1 but is confused by predicts. */ /* { dg-final { scan-tree-dump-not "if" "phiopt1" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-not "if" "phiopt2" } } */