diff options
| author | Diana Picus <diana.picus@linaro.org> | 2017-01-25 08:47:40 +0000 |
|---|---|---|
| committer | Diana Picus <diana.picus@linaro.org> | 2017-01-25 08:47:40 +0000 |
| commit | d83df5d372d47a137c4ea237f097a7ce8cc906c1 (patch) | |
| tree | cbd1406e9aed27a9182f1d1f0fb44a7e1fbb6126 /llvm/test | |
| parent | 8b6c6bedcbad953260157903e03210249e5f4b90 (diff) | |
| download | bcm5719-llvm-d83df5d372d47a137c4ea237f097a7ce8cc906c1.tar.gz bcm5719-llvm-d83df5d372d47a137c4ea237f097a7ce8cc906c1.zip | |
[ARM] GlobalISel: Support i1 add and ABI extensions
Add support for:
* i1 add
* i1 function arguments, if passed through registers
* i1 returns, with ABI signext/zeroext
Differential Revision: https://reviews.llvm.org/D27706
llvm-svn: 293035
Diffstat (limited to 'llvm/test')
4 files changed, 113 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir index 6407b9ac780..1d1a3e69b81 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir @@ -1,5 +1,7 @@ # RUN: llc -O0 -mtriple arm-- -global-isel -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --- | + define void @test_zext_s1() { ret void } + define void @test_sext_s1() { ret void } define void @test_sext_s8() { ret void } define void @test_zext_s16() { ret void } @@ -10,6 +12,59 @@ define void @test_load_from_stack() { ret void } ... --- +name: test_zext_s1 +# CHECK-LABEL: name: test_zext_s1 +legalized: true +regBankSelected: true +selected: false +# CHECK: selected: true +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } +body: | + bb.0: + liveins: %r0 + + %0(s1) = COPY %r0 + ; CHECK: [[VREGX:%[0-9]+]] = COPY %r0 + + %1(s32) = G_ZEXT %0(s1) + ; CHECK: [[VREGEXT:%[0-9]+]] = ANDri [[VREGX]], 1, 14, _, _ + + %r0 = COPY %1(s32) + ; CHECK: %r0 = COPY [[VREGEXT]] + + BX_RET 14, _, implicit %r0 + ; CHECK: BX_RET 14, _, implicit %r0 +... +--- +name: test_sext_s1 +# CHECK-LABEL: name: test_sext_s1 +legalized: true +regBankSelected: true +selected: false +# CHECK: selected: true +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } +body: | + bb.0: + liveins: %r0 + + %0(s1) = COPY %r0 + ; CHECK: [[VREGX:%[0-9]+]] = COPY %r0 + + %1(s32) = G_SEXT %0(s1) + ; CHECK: [[VREGAND:%[0-9]+]] = ANDri [[VREGX]], 1, 14, _, _ + ; CHECK: [[VREGEXT:%[0-9]+]] = RSBri [[VREGAND]], 0, 14, _, _ + + %r0 = COPY %1(s32) + ; CHECK: %r0 = COPY [[VREGEXT]] + + BX_RET 14, _, implicit %r0 + ; CHECK: BX_RET 14, _, implicit %r0 +... --- name: test_sext_s8 # CHECK-LABEL: name: test_sext_s8 diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-irtranslator.ll b/llvm/test/CodeGen/ARM/GlobalISel/arm-irtranslator.ll index 425544f8427..e01d89cdf7a 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-irtranslator.ll +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-irtranslator.ll @@ -7,6 +7,20 @@ entry: ret void } +define signext i1 @test_add_i1(i1 %x, i1 %y) { +; CHECK-LABEL: name: test_add_i1 +; CHECK: liveins: %r0, %r1 +; CHECK-DAG: [[VREGX:%[0-9]+]](s1) = COPY %r0 +; CHECK-DAG: [[VREGY:%[0-9]+]](s1) = COPY %r1 +; CHECK: [[SUM:%[0-9]+]](s1) = G_ADD [[VREGX]], [[VREGY]] +; CHECK: [[EXT:%[0-9]+]](s32) = G_SEXT [[SUM]] +; CHECK: %r0 = COPY [[EXT]](s32) +; CHECK: BX_RET 14, _, implicit %r0 +entry: + %sum = add i1 %x, %y + ret i1 %sum +} + define i8 @test_add_i8(i8 %x, i8 %y) { ; CHECK-LABEL: name: test_add_i8 ; CHECK: liveins: %r0, %r1 diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-isel.ll b/llvm/test/CodeGen/ARM/GlobalISel/arm-isel.ll index 2c0c17c7eec..ba2a5469f85 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-isel.ll +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-isel.ll @@ -7,6 +7,23 @@ entry: ret void } +define zeroext i1 @test_zext_i1(i1 %x) { +; CHECK-LABEL: test_zext_i1 +; CHECK: and r0, r0, #1 +; CHECK: bx lr +entry: + ret i1 %x +} + +define signext i1 @test_sext_i1(i1 %x) { +; CHECK-LABEL: test_sext_i1 +; CHECK: and r0, r0, #1 +; CHECK: rsb r0, r0, #0 +; CHECK: bx lr +entry: + ret i1 %x +} + define zeroext i8 @test_ext_i8(i8 %x) { ; CHECK-LABEL: test_ext_i8: ; CHECK: uxtb r0, r0 diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir index ce0601021e6..64c65a41a31 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir @@ -3,6 +3,7 @@ define void @test_add_s32() { ret void } define void @test_add_s16() { ret void } define void @test_add_s8() { ret void } + define void @test_add_s1() { ret void } ... --- name: test_add_s32 @@ -82,3 +83,29 @@ body: | BX_RET 14, _, implicit %r0 ... +--- +name: test_add_s1 +# CHECK-LABEL: name: test_add_s1 +legalized: true +regBankSelected: false +selected: false +# CHECK: registers: +# CHECK: - { id: 0, class: gprb } +# CHECK: - { id: 1, class: gprb } +# CHECK: - { id: 2, class: gprb } + +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } +body: | + bb.0: + liveins: %r0, %r1 + + %0(s1) = COPY %r0 + %1(s1) = COPY %r1 + %2(s1) = G_ADD %0, %1 + %r0 = COPY %2(s1) + BX_RET 14, _, implicit %r0 + +... |

