diff options
author | Arnold Schwaighofer <aschwaighofer@apple.com> | 2013-07-05 18:57:49 +0000 |
---|---|---|
committer | Arnold Schwaighofer <aschwaighofer@apple.com> | 2013-07-05 18:57:49 +0000 |
commit | 97c1343c455d7dba9e47d1c91ce4da9a1b9bfbc1 (patch) | |
tree | 46458845422e45c9a9aed7086d4035469e92d4a0 | |
parent | 86af13f0abbd0b4fe9a532101390a0c98292bdf3 (diff) | |
download | bcm5719-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.td | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/pack.ll | 10 |
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 +} |