ARM: Add a pack pattern for matching arithmetic shift right
authorArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 5 Jul 2013 18:57:49 +0000 (18:57 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 5 Jul 2013 18:57:49 +0000 (18:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185714 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrInfo.td
test/CodeGen/ARM/pack.ll

index 75d3de940590c1aaff1b74e332239b105a268dbf..9eba553423893dea063ed23bfe4ed23816f7b5e2 100644 (file)
@@ -4016,6 +4016,9 @@ def PKHTB : APKHI<0b01101000, 1, (outs GPRnopc:$Rd),
 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)>;
index b94414328cadd7de4bd56edb85b1343087abeb08..f6cc75e04f0d0023904d38b3133a4799e20a2dd9 100644 (file)
@@ -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
+}