diff options
author | Tim Northover <tnorthover@apple.com> | 2014-07-23 13:59:07 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2014-07-23 13:59:07 +0000 |
commit | 7ad2a0e0c2bc323649507e72b112ad2060be100c (patch) | |
tree | 43287ac539ac06b7b82d28e430e31bc091b16f81 /llvm/test | |
parent | bc9fed82ccf8ae255b3c53c62a31292192d0fd15 (diff) | |
download | bcm5719-llvm-7ad2a0e0c2bc323649507e72b112ad2060be100c.tar.gz bcm5719-llvm-7ad2a0e0c2bc323649507e72b112ad2060be100c.zip |
ARM: add patterns for [su]xta[bh] from just a shift.
Although the final shifter operand is a rotate, this actually only matters for
the half-word extends when the amount == 24. Otherwise folding a shift in is
just as good.
llvm-svn: 213753
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/Thumb2/thumb2-sxt_rot.ll | 20 | ||||
-rw-r--r-- | llvm/test/CodeGen/Thumb2/thumb2-uxt_rot.ll | 24 |
2 files changed, 38 insertions, 6 deletions
diff --git a/llvm/test/CodeGen/Thumb2/thumb2-sxt_rot.ll b/llvm/test/CodeGen/Thumb2/thumb2-sxt_rot.ll index 5e0977efd20..03acee259d5 100644 --- a/llvm/test/CodeGen/Thumb2/thumb2-sxt_rot.ll +++ b/llvm/test/CodeGen/Thumb2/thumb2-sxt_rot.ll @@ -2,14 +2,14 @@ ; RUN: | FileCheck %s define i32 @test0(i8 %A) { -; CHECK: test0 +; CHECK-LABEL: test0: ; CHECK: sxtb r0, r0 %B = sext i8 %A to i32 ret i32 %B } define signext i8 @test1(i32 %A) { -; CHECK: test1 +; CHECK-LABEL: test1: ; CHECK: lsrs r0, r0, #8 ; CHECK: sxtb r0, r0 %B = lshr i32 %A, 8 @@ -20,9 +20,8 @@ define signext i8 @test1(i32 %A) { } define signext i32 @test2(i32 %A, i32 %X) { -; CHECK: test2 -; CHECK: lsrs r0, r0, #8 -; CHECK: sxtab r0, r1, r0 +; CHECK-LABEL: test2: +; CHECK: sxtab r0, r1, r0, ror #8 %B = lshr i32 %A, 8 %C = shl i32 %A, 24 %D = or i32 %B, %C @@ -31,3 +30,14 @@ define signext i32 @test2(i32 %A, i32 %X) { %G = add i32 %F, %X ret i32 %G } + +define i32 @test3(i32 %A, i32 %X) { +; CHECK-LABEL: test3: +; CHECK: sxtah r0, r0, r1, ror #8 + %X.hi = lshr i32 %X, 8 + %X.trunc = trunc i32 %X.hi to i16 + %addend = sext i16 %X.trunc to i32 + + %sum = add i32 %A, %addend + ret i32 %sum +} diff --git a/llvm/test/CodeGen/Thumb2/thumb2-uxt_rot.ll b/llvm/test/CodeGen/Thumb2/thumb2-uxt_rot.ll index 06e78d5b0b8..4afea894aeb 100644 --- a/llvm/test/CodeGen/Thumb2/thumb2-uxt_rot.ll +++ b/llvm/test/CodeGen/Thumb2/thumb2-uxt_rot.ll @@ -24,7 +24,7 @@ define zeroext i32 @test2(i32 %A.u, i32 %B.u) { } define zeroext i32 @test3(i32 %A.u) { -; A8: test3 +; A8-LABEL: test3 ; A8: ubfx r0, r0, #8, #16 %B.u = lshr i32 %A.u, 8 %C.u = shl i32 %A.u, 24 @@ -33,3 +33,25 @@ define zeroext i32 @test3(i32 %A.u) { %F.u = zext i16 %E.u to i32 ret i32 %F.u } + +define i32 @test4(i32 %A, i32 %X) { +; A8-LABEL: test4: +; A8: uxtab r0, r0, r1, ror #16 + %X.hi = lshr i32 %X, 16 + %X.trunc = trunc i32 %X.hi to i8 + %addend = zext i8 %X.trunc to i32 + + %sum = add i32 %A, %addend + ret i32 %sum +} + +define i32 @test5(i32 %A, i32 %X) { +; A8-LABEL: test5: +; A8: uxtah r0, r0, r1, ror #8 + %X.hi = lshr i32 %X, 8 + %X.trunc = trunc i32 %X.hi to i16 + %addend = zext i16 %X.trunc to i32 + + %sum = add i32 %A, %addend + ret i32 %sum +} |