[AArch64] PR 64448: Combine ((x ^ y) & m) ^ x into bsl/bif instruction
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Mon, 19 Jan 2015 14:03:23 +0000 (14:03 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Mon, 19 Jan 2015 14:03:23 +0000 (14:03 +0000)
PR target/64448
* config/aarch64/aarch64-simd.md (aarch64_simd_bsl<mode>_internal):
Match xor-and-xor RTL pattern.

From-SVN: r219843

gcc/ChangeLog
gcc/config/aarch64/aarch64-simd.md

index 39758e785f3b287353e95e7dafdc6ed2aa4244d7..605b87e9070512b1b5a5695ce8fbc63dd8987206 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR target/64448
+       * config/aarch64/aarch64-simd.md (aarch64_simd_bsl<mode>_internal):
+       Match xor-and-xor RTL pattern.
+
 2015-01-19  Igor Zamyatin  <igor.zamyatin@intel.com>
 
        PR rtl-optimization/64081
index 968f5b2b1cb30512d7db75e4549393c15b8daccf..d239884e70cab1e7da1996f0ce05469fee74db2a 100644 (file)
 ;;     bif op0, op1, mask
 
 (define_insn "aarch64_simd_bsl<mode>_internal"
-  [(set (match_operand:VSDQ_I_DI 0 "register_operand"          "=w,w,w")
-       (ior:VSDQ_I_DI
+  [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w,w,w")
+       (xor:VSDQ_I_DI
           (and:VSDQ_I_DI
-            (not:<V_cmp_result>
-              (match_operand:<V_cmp_result> 1 "register_operand"       " 0,w,w"))
-            (match_operand:VSDQ_I_DI 3 "register_operand"      " w,0,w"))
-          (and:VSDQ_I_DI
-            (match_dup:<V_cmp_result> 1)
-            (match_operand:VSDQ_I_DI 2 "register_operand"      " w,w,0"))
+            (xor:VSDQ_I_DI
+              (match_operand:<V_cmp_result> 3 "register_operand" "w,0,w")
+              (match_operand:VSDQ_I_DI 2 "register_operand" "w,w,0"))
+            (match_operand:VSDQ_I_DI 1 "register_operand" "0,w,w"))
+         (match_dup:<V_cmp_result> 3)
        ))]
   "TARGET_SIMD"
   "@