summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold Schwaighofer <aschwaighofer@apple.com>2013-07-05 18:57:49 +0000
committerArnold Schwaighofer <aschwaighofer@apple.com>2013-07-05 18:57:49 +0000
commit97c1343c455d7dba9e47d1c91ce4da9a1b9bfbc1 (patch)
tree46458845422e45c9a9aed7086d4035469e92d4a0
parent86af13f0abbd0b4fe9a532101390a0c98292bdf3 (diff)
downloadbcm5719-llvm-97c1343c455d7dba9e47d1c91ce4da9a1b9bfbc1.tar.gz
bcm5719-llvm-97c1343c455d7dba9e47d1c91ce4da9a1b9bfbc1.zip
ARM: Add a pack pattern for matching arithmetic shift right
llvm-svn: 185714
-rw-r--r--llvm/lib/Target/ARM/ARMInstrInfo.td3
-rw-r--r--llvm/test/CodeGen/ARM/pack.ll10
2 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td
index 75d3de94059..9eba5534238 100644
--- a/llvm/lib/Target/ARM/ARMInstrInfo.td
+++ b/llvm/lib/Target/ARM/ARMInstrInfo.td
@@ -4017,6 +4017,9 @@ def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000),
(srl GPRnopc:$src2, imm16:$sh)),
(PKHTB GPRnopc:$src1, GPRnopc:$src2, imm16:$sh)>;
def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000),
+ (sra GPRnopc:$src2, imm16_31:$sh)),
+ (PKHTB GPRnopc:$src1, GPRnopc:$src2, imm16_31:$sh)>;
+def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000),
(and (srl GPRnopc:$src2, imm1_15:$sh), 0xFFFF)),
(PKHTB GPRnopc:$src1, GPRnopc:$src2, imm1_15:$sh)>;
diff --git a/llvm/test/CodeGen/ARM/pack.ll b/llvm/test/CodeGen/ARM/pack.ll
index b94414328ca..f6cc75e04f0 100644
--- a/llvm/test/CodeGen/ARM/pack.ll
+++ b/llvm/test/CodeGen/ARM/pack.ll
@@ -99,3 +99,13 @@ entry:
%tmp3 = or i32 %tmp, %tmp2
ret i32 %tmp3
}
+
+; CHECK: test10:
+; CHECK: pkhtb r0, r0, r1, asr #17
+define i32 @test10(i32 %src1, i32 %src2) {
+entry:
+ %tmp = and i32 %src1, -65536
+ %tmp2 = ashr i32 %src2, 17
+ %tmp3 = or i32 %tmp, %tmp2
+ ret i32 %tmp3
+}
OpenPOWER on IntegriCloud