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