[PATCH 1/2] match: Combine four fors into one for.

Kael Andrew Franco <[email protected]> Sat, 1 Aug 2026 10:30:28 -0400
Newsgroups gmane.comp.gcc.patches
Message-ID <CACAb0qev=o+agCexixo+0CNGvOGMw9fM-e3F9V7aTSn5BY0EAg@mail.gmail.com>
From 106550f07a688b7f748313030ccd91c4ccf682b7 Mon Sep 17 00:00:00 2001
From: Kael Andrew Alonzo Franco <[email protected]>
Date: Fri, 31 Jul 2026 20:37:40 -0400
Subject: [PATCH 1/2] match: Combine four fors into one for.

This reduce genmatch's outputted C++ code.

Bootstrapped and tested on x86_64-pc-linux-gnu.

	PR tree-optimization/117760
	PR tree-optimization/125442

gcc/ChangeLog:

	* match.pd: Combine four fors into one for.

Signed-off-by: Kael Andrew Franco <[email protected]>
---
 gcc/match.pd | 29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/gcc/match.pd b/gcc/match.pd
index b757aaf6f69..aa7cada1b64 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -6883,30 +6883,23 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    (a != b) | ((a|b) != 0) -> ((a|b) != 0)

    (a != b) & ((a|b) == 0) -> false
-   (a == b) | ((a|b) != 0) -> true  */
+   (a == b) | ((a|b) != 0) -> true
+
+   (a == 0) | ((a | b) == 0) -> (a == 0)
+   (a != 0) & ((a | b) != 0) -> (a != 0)  */
 (for bitop (bit_and bit_ior)
      neeq  (ne      eq)
+     eqne  (eq      ne)
  (simplify
   (bitop:c (neeq @0 @1) (neeq (bit_ior @0 @1) integer_zerop))
-  (neeq @0 @1)))
-(for bitop (bit_and bit_ior)
-     neeq  (eq      ne)
+  (neeq @0 @1))
  (simplify
-  (bitop:c (neeq @0 @1) (neeq (bit_ior@2 @0 @1) integer_zerop@3))
-  (neeq @2 @3)))
-(for bitop (bit_and bit_ior)
-     neeql (ne      eq)
-     neeqr (eq      ne)
+  (bitop:c (eqne @0 @1) (eqne (bit_ior@2 @0 @1) integer_zerop@3))
+  (neeq @2 @3))
+ (simplify
+  (bitop (neeq @0 @1) (eqne (bit_ior @0 @1) integer_zerop))
+  { constant_boolean_node (bitop == BIT_IOR_EXPR, type); })
  (simplify
-  (bitop (neeql @0 @1) (neeqr (bit_ior @0 @1) integer_zerop))
-  { constant_boolean_node (bitop == BIT_IOR_EXPR, type); }))
-
-/* (a == 0) | ((a | b) == 0) -> (a == 0) -- PR125442
-   (a != 0) & ((a | b) != 0) -> (a != 0) -- PR125442 */
-
-(for bitop (bit_and bit_ior)
-     neeq  (ne      eq)
-(simplify
   (bitop:c (neeq@2 @0 integer_zerop) (neeq (bit_ior:c @0 @1) integer_zerop))
   @2))
 #endif
-- 
2.55.0