[gcc r11-5146] Optimize two patterns with three xors

Jeff Law law@gcc.gnu.org
Wed Nov 18 19:31:20 GMT 2020


https://gcc.gnu.org/g:f44e6091627372bd8fc4e72874a003643b021dca

commit r11-5146-gf44e6091627372bd8fc4e72874a003643b021dca
Author: Eugene Rozenfeld <Eugene.Rozenfeld@microsoft.com>
Date:   Wed Nov 18 14:29:49 2020 -0500

    Optimize two patterns with three xors
    
    gcc/
            PR tree-optimization/96671
            * match.pd (three xor patterns): New patterns.

Diff:
---
 gcc/match.pd | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/match.pd b/gcc/match.pd
index 349eab61d6b..1dd05c4c2a3 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -901,6 +901,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
  (bit_not (bit_ior:cs (bit_not @0) @1))
  (bit_and @0 (bit_not @1)))
 
+/* (a ^ b) & ((b ^ c) ^ a) --> (a ^ b) & ~c */
+(simplify
+ (bit_and:c (bit_xor:c@3 @0 @1) (bit_xor:cs (bit_xor:cs @1 @2) @0))
+ (bit_and @3 (bit_not @2)))
+
+/* (a ^ b) | ((b ^ c) ^ a) --> (a ^ b) | c */
+(simplify
+ (bit_ior:c (bit_xor:c@3 @0 @1) (bit_xor:c (bit_xor:c @1 @2) @0))
+ (bit_ior @3 @2))
+
 /* Simplify (~X & Y) to X ^ Y if we know that (X & ~Y) is 0.  */
 #if GIMPLE
 (simplify


More information about the Gcc-cvs mailing list