From: Daniel Barboza <[email protected]>

Bootstrapped and regression tested in x86.

        PR tree-optimization/119422

gcc/ChangeLog:

        * match.pd(`(bool >= A) >= A -> bool >= A`): New pattern.

gcc/testsuite/ChangeLog:

        * gcc.dg/tree-ssa/pr119422.c: New test.
---
 gcc/match.pd                             |  7 +++++++
 gcc/testsuite/gcc.dg/tree-ssa/pr119422.c | 13 +++++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr119422.c

diff --git a/gcc/match.pd b/gcc/match.pd
index 7f16fd4e081..f120a6437b1 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -5367,6 +5367,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
       @0)))))
 #endif
 
+/* PR119422: (bool >= A) >= A -> bool >= A;  */
+(simplify
+ (ge (convert? (ge zero_one_valued_p@0 @1)) @1)
+ (with { tree type1 = TREE_TYPE (@1);  }
+  (if (TYPE_UNSIGNED (type1))
+   (ge @0 @1))))
+
 /* Rewrite an LROTATE_EXPR by a constant into an
    RROTATE_EXPR by a new constant.  */
 (simplify
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr119422.c 
b/gcc/testsuite/gcc.dg/tree-ssa/pr119422.c
new file mode 100644
index 00000000000..780558b24b9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr119422.c
@@ -0,0 +1,13 @@
+/* { dg-additional-options -O2 } */
+/* { dg-additional-options -fdump-tree-optimized } */
+
+typedef enum my_bool {
+   val0 = 0,
+   val1 = 1
+} my_bool;
+
+int gg (unsigned u, my_bool b)
+{
+  return u <= (u <= (unsigned)b);
+}
+/* { dg-final { scan-tree-dump-times " >= " 1 "optimized" } } */
-- 
2.43.0

Reply via email to