ARM: Add a pack pattern for matching arithmetic shift right

llvm-svn: 185714
This commit is contained in:
Arnold Schwaighofer 2013-07-05 18:57:49 +00:00
parent 86af13f0ab
commit 97c1343c45
2 changed files with 13 additions and 0 deletions

View File

@ -4016,6 +4016,9 @@ def PKHTB : APKHI<0b01101000, 1, (outs GPRnopc:$Rd),
def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000), def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000),
(srl GPRnopc:$src2, imm16:$sh)), (srl GPRnopc:$src2, imm16:$sh)),
(PKHTB GPRnopc:$src1, 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), def : ARMV6Pat<(or (and GPRnopc:$src1, 0xFFFF0000),
(and (srl GPRnopc:$src2, imm1_15:$sh), 0xFFFF)), (and (srl GPRnopc:$src2, imm1_15:$sh), 0xFFFF)),
(PKHTB GPRnopc:$src1, GPRnopc:$src2, imm1_15:$sh)>; (PKHTB GPRnopc:$src1, GPRnopc:$src2, imm1_15:$sh)>;

View File

@ -99,3 +99,13 @@ entry:
%tmp3 = or i32 %tmp, %tmp2 %tmp3 = or i32 %tmp, %tmp2
ret i32 %tmp3 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
}