From 36650ec61912ff796651fa00964cb0f991c549a1 Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov Date: Mon, 19 Jan 2015 14:03:23 +0000 Subject: [PATCH] [AArch64] PR 64448: Combine ((x ^ y) & m) ^ x into bsl/bif instruction PR target/64448 * config/aarch64/aarch64-simd.md (aarch64_simd_bsl_internal): Match xor-and-xor RTL pattern. From-SVN: r219843 --- gcc/ChangeLog | 6 ++++++ gcc/config/aarch64/aarch64-simd.md | 15 +++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39758e785f3..605b87e9070 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-19 Kyrylo Tkachov + + PR target/64448 + * config/aarch64/aarch64-simd.md (aarch64_simd_bsl_internal): + Match xor-and-xor RTL pattern. + 2015-01-19 Igor Zamyatin PR rtl-optimization/64081 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 968f5b2b1cb..d239884e70c 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -2008,15 +2008,14 @@ ;; bif op0, op1, mask (define_insn "aarch64_simd_bsl_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: - (match_operand: 1 "register_operand" " 0,w,w")) - (match_operand:VSDQ_I_DI 3 "register_operand" " w,0,w")) - (and:VSDQ_I_DI - (match_dup: 1) - (match_operand:VSDQ_I_DI 2 "register_operand" " w,w,0")) + (xor:VSDQ_I_DI + (match_operand: 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: 3) ))] "TARGET_SIMD" "@ -- 2.30.2