From fccc20d417b7541397a2d95da0a1685c583b0f7e Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Mon, 20 Jul 2015 18:42:27 +0000 Subject: [PATCH] [AArch64] Change EON pattern to match more often. Phabricator: http://reviews.llvm.org/D11359 Patch by Geoff Berry git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242694 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64InstrInfo.td | 2 +- test/CodeGen/AArch64/eon.ll | 29 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/AArch64/eon.ll diff --git a/lib/Target/AArch64/AArch64InstrInfo.td b/lib/Target/AArch64/AArch64InstrInfo.td index a30b78f6e29..867b95b566a 100644 --- a/lib/Target/AArch64/AArch64InstrInfo.td +++ b/lib/Target/AArch64/AArch64InstrInfo.td @@ -841,7 +841,7 @@ defm AND : LogicalReg<0b00, 0, "and", and>; defm BIC : LogicalReg<0b00, 1, "bic", BinOpFrag<(and node:$LHS, (not node:$RHS))>>; defm EON : LogicalReg<0b10, 1, "eon", - BinOpFrag<(xor node:$LHS, (not node:$RHS))>>; + BinOpFrag<(not (xor node:$LHS, node:$RHS))>>; defm EOR : LogicalReg<0b10, 0, "eor", xor>; defm ORN : LogicalReg<0b01, 1, "orn", BinOpFrag<(or node:$LHS, (not node:$RHS))>>; diff --git a/test/CodeGen/AArch64/eon.ll b/test/CodeGen/AArch64/eon.ll new file mode 100644 index 00000000000..ea61ce34c05 --- /dev/null +++ b/test/CodeGen/AArch64/eon.ll @@ -0,0 +1,29 @@ +; RUN: llc -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s + +; Check that the eon instruction is generated instead of eor,movn +define i64 @test1(i64 %a, i64 %b, i64 %c) { +; CHECK-LABEL: test1: +; CHECK: eon +; CHECK: ret +entry: + %shl = shl i64 %b, 4 + %neg = xor i64 %a, -1 + %xor = xor i64 %shl, %neg + ret i64 %xor +} + +; Same check with mutliple uses of %neg +define i64 @test2(i64 %a, i64 %b, i64 %c) { +; CHECK-LABEL: test2: +; CHECK: eon +; CHECK: eon +; CHECK: lsl +; CHECK: ret +entry: + %shl = shl i64 %b, 4 + %neg = xor i64 %shl, -1 + %xor = xor i64 %neg, %a + %xor1 = xor i64 %c, %neg + %shl2 = shl i64 %xor, %xor1 + ret i64 %shl2 +} -- 2.34.1