From: Andrew Pinski Date: Thu, 4 May 2023 23:37:51 +0000 (+0000) Subject: MATCH: Add ABSU == 0 to a == 0 simplification X-Git-Tag: basepoints/gcc-15~9651 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6fe385eac6ff8ecddb6cbdff2c706b27b5137006;p=thirdparty%2Fgcc.git MATCH: Add ABSU == 0 to a == 0 simplification There is already an `ABS == 0` to `a == 0` pattern, this just extends that to ABSU too. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR tree-optimization/109722 gcc/ChangeLog: * match.pd: Extend the `ABS == 0` pattern to cover `ABSU == 0` too. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/abs-1.c: New test. --- diff --git a/gcc/match.pd b/gcc/match.pd index 08a4f8ebdc1e..ceae1c34abc1 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5807,11 +5807,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (tem && !TREE_OVERFLOW (tem)) (scmp @0 { tem; })))))) -/* Convert ABS_EXPR == 0 or ABS_EXPR != 0 to x == 0 or x != 0. */ -(for op (eq ne) - (simplify - (op (abs @0) zerop@1) - (op @0 @1))) +/* Convert ABS[U]_EXPR == 0 or ABS[U]_EXPR != 0 to x == 0 or x != 0. */ +(for op (abs absu) + (for eqne (eq ne) + (simplify + (eqne (op @0) zerop@1) + (eqne @0 { build_zero_cst (TREE_TYPE (@0)); })))) /* From fold_sign_changed_comparison and fold_widened_comparison. FIXME: the lack of symmetry is disturbing. */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-1.c b/gcc/testsuite/gcc.dg/tree-ssa/abs-1.c new file mode 100644 index 000000000000..ce4041111033 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-1.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/109722 */ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-gimple -fdump-tree-optimized" } */ + +int g(signed char x){ + x = x < 0 ? -x : x; + return x == 0; +} + +/* This should work even if int is 16bits. */ +/* { dg-final { scan-tree-dump "ABSU_EXPR" "gimple"} } */ +/* { dg-final { scan-tree-dump-not "ABSU_EXPR" "optimized"} } */