https://gcc.gnu.org/g:9e24eda38e9a6a6c64f80dd56737224bfd4619de
commit r17-384-g9e24eda38e9a6a6c64f80dd56737224bfd4619de Author: Pengxuan Zheng <[email protected]> Date: Thu May 7 09:18:02 2026 -0700 match: Restrict "min|max(a+|-c,b+|-c)" folding to integral types [PR125214] The original patch adding the "min|max(a+|-c,b+|-c) -> min|max(a,b)+|-c" pattern missed integral type checks and caused some powerpc tests to fail. PR tree-optimization/125214 gcc/ChangeLog: * match.pd (min|max(a+|-c,b+|-c)): Add integral type check. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr125214.c: New test. Signed-off-by: Pengxuan Zheng <[email protected]> Diff: --- gcc/match.pd | 6 ++++-- gcc/testsuite/gcc.dg/tree-ssa/pr125214.c | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/match.pd b/gcc/match.pd index 1a7d820779f4..04faffb760d1 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5010,7 +5010,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (for minmax (min max) (simplify (minmax:c (plus:cs @0 @2) (plus:s @1 @2)) - (if (TYPE_OVERFLOW_UNDEFINED (type) + (if (INTEGRAL_TYPE_P (type) + && TYPE_OVERFLOW_UNDEFINED (type) && !TYPE_OVERFLOW_SANITIZED (type)) (plus (minmax @0 @1) @2)))) @@ -5018,7 +5019,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (for minmax (min max) (simplify (minmax:c (minus:s @0 @2) (minus:s @1 @2)) - (if (TYPE_OVERFLOW_UNDEFINED (type) + (if (INTEGRAL_TYPE_P (type) + && TYPE_OVERFLOW_UNDEFINED (type) && !TYPE_OVERFLOW_SANITIZED (type)) (minus (minmax @0 @1) @2)))) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr125214.c b/gcc/testsuite/gcc.dg/tree-ssa/pr125214.c new file mode 100644 index 000000000000..8101f70ea855 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr125214.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -fdump-tree-forwprop1-raw" } */ + +/* "min|max(a+|-c,b+|-c) -> min|max(a,b)+|-c" folding should NOT happen for + non-integral types. */ + +double +f (double a, double b, double c) +{ + return __builtin_fmax (a + c, b + c); +} + +/* { dg-final { scan-tree-dump-times "plus_expr" 2 "forwprop1" } } */
