diff options
Diffstat (limited to 'test/CodeGen/Thumb')
28 files changed, 188 insertions, 57 deletions
diff --git a/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll b/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll index 5c883b3930..ca6df7cdab 100644 --- a/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll +++ b/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb | grep r0 | count 1 +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @a(i32 %x, i32 %y) nounwind readnone { entry: @@ -6,3 +6,5 @@ entry: ret i32 %mul } +; CHECK: r0 + diff --git a/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll b/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll index ad8b064bf4..e1efd3b723 100644 --- a/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll +++ b/test/CodeGen/Thumb/2010-06-18-SibCallCrash.ll @@ -1,4 +1,4 @@ -; RUN: llc -march=thumb < %s +; RUN: llc -mtriple=thumb-eabi %s -o /dev/null ; rdar://8104457 define arm_apcscc void @t(i32* %m) nounwind { diff --git a/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll b/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll index b87bf24993..ffc9584199 100644 --- a/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll +++ b/test/CodeGen/Thumb/2010-07-15-debugOrdering.ll @@ -151,5 +151,5 @@ declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone !98 = metadata !{i32 52, i32 0, metadata !1, null} !101 = metadata !{metadata !"ggEdgeDiscrepancy.cc", metadata !"/Volumes/Home/grosbaj/sources/llvm-externals/speccpu2000/benchspec/CINT2000/252.eon/src"} !102 = metadata !{i32 0} -!103 = metadata !{metadata !3} +!103 = metadata !{metadata !3, metadata !77} !104 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} diff --git a/test/CodeGen/Thumb/DbgValueOtherTargets.test b/test/CodeGen/Thumb/DbgValueOtherTargets.test index afb18a43be..557892b062 100644 --- a/test/CodeGen/Thumb/DbgValueOtherTargets.test +++ b/test/CodeGen/Thumb/DbgValueOtherTargets.test @@ -1 +1 @@ -RUN: llc -O0 -march=thumb -asm-verbose < %S/../Inputs/DbgValueOtherTargets.ll | FileCheck %S/../Inputs/DbgValueOtherTargets.ll +RUN: llc -O0 -mtriple=thumb-eabi -asm-verbose %S/../Inputs/DbgValueOtherTargets.ll -o - | FileCheck %S/../Inputs/DbgValueOtherTargets.ll diff --git a/test/CodeGen/Thumb/barrier.ll b/test/CodeGen/Thumb/barrier.ll index 1c27fa0988..92d9bb2097 100644 --- a/test/CodeGen/Thumb/barrier.ll +++ b/test/CodeGen/Thumb/barrier.ll @@ -1,6 +1,6 @@ -; RUN: llc < %s -mtriple=thumbv6-apple-darwin | FileCheck %s -check-prefix=V6 -; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mattr=-db | FileCheck %s -check-prefix=V6 -; RUN: llc < %s -march=thumb -mcpu=cortex-m0 | FileCheck %s -check-prefix=V6M +; RUN: llc -mtriple=thumbv6-apple-darwin %s -o - | FileCheck %s -check-prefix=V6 +; RUN: llc -mtriple=thumbv7-apple-darwin -mattr=-db %s -o - | FileCheck %s -check-prefix=V6 +; RUN: llc -mtriple=thumb-eabi -mcpu=cortex-m0 %s -o - | FileCheck %s -check-prefix=V6M define void @t1() { ; V6-LABEL: t1: diff --git a/test/CodeGen/Thumb/dyn-stackalloc.ll b/test/CodeGen/Thumb/dyn-stackalloc.ll index 6c6de55347..6bc39afe21 100644 --- a/test/CodeGen/Thumb/dyn-stackalloc.ll +++ b/test/CodeGen/Thumb/dyn-stackalloc.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra | FileCheck %s -; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra -regalloc=basic | FileCheck %s +; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra | FileCheck %s -check-prefix=CHECK -check-prefix=RA_GREEDY +; RUN: llc < %s -mtriple=thumb-apple-darwin -disable-cgp-branch-opts -disable-post-ra -regalloc=basic | FileCheck %s -check-prefix=CHECK -check-prefix=RA_BASIC %struct.state = type { i32, %struct.info*, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* } %struct.info = type { i32, i32, i32, i32, i32, i32, i32, i8* } @@ -45,7 +45,8 @@ define void @t2(%struct.comment* %vc, i8* %tag, i8* %contents) { ; CHECK: sub sp, # ; CHECK: mov r[[R0:[0-9]+]], sp ; CHECK: str r{{[0-9+]}}, [r[[R0]] -; CHECK: str r{{[0-9+]}}, [r[[R0]] +; RA_GREEDY: str r{{[0-9+]}}, [r[[R0]] +; RA_BASIC: stm r[[R0]]! ; CHECK-NOT: ldr r0, [sp ; CHECK: mov r[[R1:[0-9]+]], sp ; CHECK: subs r[[R2:[0-9]+]], r[[R1]], r{{[0-9]+}} diff --git a/test/CodeGen/Thumb/fpconv.ll b/test/CodeGen/Thumb/fpconv.ll index 7da36ddf58..0ade798d14 100644 --- a/test/CodeGen/Thumb/fpconv.ll +++ b/test/CodeGen/Thumb/fpconv.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb +; RUN: llc -mtriple=thumb-eabi %s -o /dev/null define float @f1(double %x) { entry: diff --git a/test/CodeGen/Thumb/fpow.ll b/test/CodeGen/Thumb/fpow.ll index be3dc0b3c1..18b1c91098 100644 --- a/test/CodeGen/Thumb/fpow.ll +++ b/test/CodeGen/Thumb/fpow.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb +; RUN: llc -mtriple=thumb-eabi %s -o /dev/null define double @t(double %x, double %y) nounwind optsize { entry: diff --git a/test/CodeGen/Thumb/inlineasm-imm-thumb.ll b/test/CodeGen/Thumb/inlineasm-imm-thumb.ll index d557b9d5a1..4e4f8fad25 100644 --- a/test/CodeGen/Thumb/inlineasm-imm-thumb.ll +++ b/test/CodeGen/Thumb/inlineasm-imm-thumb.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb -no-integrated-as +; RUN: llc -mtriple=thumb-eabi -no-integrated-as %s -o /dev/null ; Test Thumb-mode "I" constraint, for ADD immediate. define i32 @testI(i32 %x) { diff --git a/test/CodeGen/Thumb/inlineasm-thumb.ll b/test/CodeGen/Thumb/inlineasm-thumb.ll index f2683c8dd8..2547ce8d6b 100644 --- a/test/CodeGen/Thumb/inlineasm-thumb.ll +++ b/test/CodeGen/Thumb/inlineasm-thumb.ll @@ -1,4 +1,5 @@ -; RUN: llc < %s -march=thumb | FileCheck %s +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s + define i32 @t1(i32 %x, i32 %y) nounwind { entry: ; CHECK: mov r0, r12 diff --git a/test/CodeGen/Thumb/ispositive.ll b/test/CodeGen/Thumb/ispositive.ll index 7b28227077..8d39687893 100644 --- a/test/CodeGen/Thumb/ispositive.ll +++ b/test/CodeGen/Thumb/ispositive.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb | FileCheck %s +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @test1(i32 %X) { entry: diff --git a/test/CodeGen/Thumb/ldr_ext.ll b/test/CodeGen/Thumb/ldr_ext.ll index 9a28124b84..2d25af35b5 100644 --- a/test/CodeGen/Thumb/ldr_ext.ll +++ b/test/CodeGen/Thumb/ldr_ext.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -march=thumb | FileCheck %s -check-prefix=V5 -; RUN: llc < %s -march=thumb -mattr=+v6 | FileCheck %s -check-prefix=V6 +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s -check-prefix=V5 +; RUN: llc -mtriple=thumb-eabi -mattr=+v6 %s -o - | FileCheck %s -check-prefix=V6 ; rdar://7176514 diff --git a/test/CodeGen/Thumb/ldr_frame.ll b/test/CodeGen/Thumb/ldr_frame.ll index 6c586385b1..0e879d7379 100644 --- a/test/CodeGen/Thumb/ldr_frame.ll +++ b/test/CodeGen/Thumb/ldr_frame.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb | FileCheck %s +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @f1() { ; CHECK-LABEL: f1: diff --git a/test/CodeGen/Thumb/long-setcc.ll b/test/CodeGen/Thumb/long-setcc.ll index 8f2d98fc43..3460edb96f 100644 --- a/test/CodeGen/Thumb/long-setcc.ll +++ b/test/CodeGen/Thumb/long-setcc.ll @@ -1,5 +1,4 @@ -; RUN: llc < %s -march=thumb | grep cmp | count 1 - +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i1 @t1(i64 %x) { %B = icmp slt i64 %x, 0 @@ -15,3 +14,9 @@ define i1 @t3(i32 %x) { %tmp = icmp ugt i32 %x, -1 ret i1 %tmp } + +; CHECK: cmp +; CHECK-NOT: cmp + + + diff --git a/test/CodeGen/Thumb/long.ll b/test/CodeGen/Thumb/long.ll index 197e19e31b..2449e5ad67 100644 --- a/test/CodeGen/Thumb/long.ll +++ b/test/CodeGen/Thumb/long.ll @@ -1,10 +1,5 @@ -; RUN: llc < %s -march=thumb | \ -; RUN: grep mvn | count 1 -; RUN: llc < %s -march=thumb | \ -; RUN: grep adc | count 1 -; RUN: llc < %s -march=thumb | \ -; RUN: grep sbc | count 1 -; RUN: llc < %s -mtriple=thumb-apple-darwin | grep __muldi3 +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s +; RUN: llc -mtriple=thumb-apple-darwin %s -o - | FileCheck %s -check-prefix CHECK-DARWIN define i64 @f1() { entry: @@ -74,3 +69,14 @@ entry: ret i64 %retval } +; CHECK: mvn +; CHECK-NOT: mvn + +; CHECK: adc +; CHECK-NOT: adc + +; CHECK: sbc +; CHECK-NOT: sbc + +; CHECK-DARWIN: __muldi3 + diff --git a/test/CodeGen/Thumb/long_shift.ll b/test/CodeGen/Thumb/long_shift.ll index 24317141fc..6aa1afd389 100644 --- a/test/CodeGen/Thumb/long_shift.ll +++ b/test/CodeGen/Thumb/long_shift.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb +; RUN: llc -mtriple=thumb-eabi %s -o /dev/null define i64 @f0(i64 %A, i64 %B) { %tmp = bitcast i64 %A to i64 diff --git a/test/CodeGen/Thumb/mul.ll b/test/CodeGen/Thumb/mul.ll index c1a2fb2947..13a2cfb4c2 100644 --- a/test/CodeGen/Thumb/mul.ll +++ b/test/CodeGen/Thumb/mul.ll @@ -1,22 +1,32 @@ -; RUN: llc < %s -march=thumb | grep mul | count 3 -; RUN: llc < %s -march=thumb | grep lsl | count 1 +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @f1(i32 %u) { %tmp = mul i32 %u, %u ret i32 %tmp } +; CHECK: mul{{s?}} + define i32 @f2(i32 %u, i32 %v) { %tmp = mul i32 %u, %v ret i32 %tmp } +; CHECK: mul{{s?}} + define i32 @f3(i32 %u) { %tmp = mul i32 %u, 5 ret i32 %tmp } +; CHECK: mul{{s?}} + define i32 @f4(i32 %u) { %tmp = mul i32 %u, 4 ret i32 %tmp } + +; CHECK: lsl +; CHECK-NOT: mul{{s?}} +; CHECK-NOT: lsl + diff --git a/test/CodeGen/Thumb/rev.ll b/test/CodeGen/Thumb/rev.ll index dcba00e496..3e947022e6 100644 --- a/test/CodeGen/Thumb/rev.ll +++ b/test/CodeGen/Thumb/rev.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb -mattr=+v6 | FileCheck %s +; RUN: llc -mtriple=thumb-eabi -mattr=+v6 %s -o - | FileCheck %s define i32 @test1(i32 %X) nounwind { ; CHECK: test1 diff --git a/test/CodeGen/Thumb/segmented-stacks-dynamic.ll b/test/CodeGen/Thumb/segmented-stacks-dynamic.ll index 067c07b689..5d51f4052c 100644 --- a/test/CodeGen/Thumb/segmented-stacks-dynamic.ll +++ b/test/CodeGen/Thumb/segmented-stacks-dynamic.ll @@ -1,12 +1,12 @@ -; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -segmented-stacks -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-linux -; RUN: llc < %s -mtriple=thumb-linux-androideabi -segmented-stacks -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-android -; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -segmented-stacks -filetype=obj -; RUN: llc < %s -mtriple=thumb-linux-androideabi -segmented-stacks -filetype=obj +; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-linux +; RUN: llc < %s -mtriple=thumb-linux-androideabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-android +; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -filetype=obj +; RUN: llc < %s -mtriple=thumb-linux-androideabi -filetype=obj ; Just to prevent the alloca from being optimized away declare void @dummy_use(i32*, i32) -define i32 @test_basic(i32 %l) { +define i32 @test_basic(i32 %l) #0 { %mem = alloca i32, i32 %l call void @dummy_use (i32* %mem, i32 %l) %terminate = icmp eq i32 %l, 0 @@ -61,3 +61,5 @@ false: ; Thumb-android: pop {r4, r5} } + +attributes #0 = { "split-stack" } diff --git a/test/CodeGen/Thumb/segmented-stacks.ll b/test/CodeGen/Thumb/segmented-stacks.ll index 5649b0088d..d6e25c7792 100644 --- a/test/CodeGen/Thumb/segmented-stacks.ll +++ b/test/CodeGen/Thumb/segmented-stacks.ll @@ -1,13 +1,13 @@ -; RUN: llc < %s -mtriple=thumb-linux-androideabi -segmented-stacks -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-android -; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -segmented-stacks -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-linux -; RUN: llc < %s -mtriple=thumb-linux-androideabi -segmented-stacks -filetype=obj -; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -segmented-stacks -filetype=obj +; RUN: llc < %s -mtriple=thumb-linux-androideabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-android +; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -verify-machineinstrs | FileCheck %s -check-prefix=Thumb-linux +; RUN: llc < %s -mtriple=thumb-linux-androideabi -filetype=obj +; RUN: llc < %s -mtriple=thumb-linux-unknown-gnueabi -filetype=obj ; Just to prevent the alloca from being optimized away declare void @dummy_use(i32*, i32) -define void @test_basic() { +define void @test_basic() #0 { %mem = alloca i32, i32 10 call void @dummy_use (i32* %mem, i32 10) ret void @@ -54,9 +54,11 @@ define void @test_basic() { } -define i32 @test_nested(i32 * nest %closure, i32 %other) { +define i32 @test_nested(i32 * nest %closure, i32 %other) #0 { %addend = load i32 * %closure %result = add i32 %other, %addend + %mem = alloca i32, i32 10 + call void @dummy_use (i32* %mem, i32 10) ret i32 %result ; Thumb-android: test_nested: @@ -68,7 +70,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { ; Thumb-android-NEXT: cmp r4, r5 ; Thumb-android-NEXT: blo .LBB1_2 -; Thumb-android: mov r4, #0 +; Thumb-android: mov r4, #56 ; Thumb-android-NEXT: mov r5, #0 ; Thumb-android-NEXT: push {lr} ; Thumb-android-NEXT: bl __morestack @@ -88,7 +90,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { ; Thumb-linux-NEXT: cmp r4, r5 ; Thumb-linux-NEXT: blo .LBB1_2 -; Thumb-linux: mov r4, #0 +; Thumb-linux: mov r4, #56 ; Thumb-linux-NEXT: mov r5, #0 ; Thumb-linux-NEXT: push {lr} ; Thumb-linux-NEXT: bl __morestack @@ -101,7 +103,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) { } -define void @test_large() { +define void @test_large() #0 { %mem = alloca i32, i32 10000 call void @dummy_use (i32* %mem, i32 0) ret void @@ -150,7 +152,7 @@ define void @test_large() { } -define fastcc void @test_fastcc() { +define fastcc void @test_fastcc() #0 { %mem = alloca i32, i32 10 call void @dummy_use (i32* %mem, i32 10) ret void @@ -197,7 +199,7 @@ define fastcc void @test_fastcc() { } -define fastcc void @test_fastcc_large() { +define fastcc void @test_fastcc_large() #0 { %mem = alloca i32, i32 10000 call void @dummy_use (i32* %mem, i32 0) ret void @@ -245,3 +247,15 @@ define fastcc void @test_fastcc_large() { ; Thumb-linux: pop {r4, r5} } + +define void @test_nostack() #0 { + ret void + +; Thumb-android-LABEL: test_nostack: +; Thumb-android-NOT: bl __morestack + +; Thumb-linux-LABEL: test_nostack: +; Thumb-linux-NOT: bl __morestack +} + +attributes #0 = { "split-stack" } diff --git a/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll b/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll index 3f6407a0a3..97c66d9dc8 100644 --- a/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll +++ b/test/CodeGen/Thumb/stack-coloring-without-frame-ptr.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb -mcpu=arm1022e +; RUN: llc -mtriple=thumb-eabi -mcpu=arm1022e %s -o /dev/null %iterator = type { i8**, i8**, i8**, i8*** } %insert_iterator = type { %deque*, %iterator } diff --git a/test/CodeGen/Thumb/stack-frame.ll b/test/CodeGen/Thumb/stack-frame.ll index b103b331b7..09d480aec2 100644 --- a/test/CodeGen/Thumb/stack-frame.ll +++ b/test/CodeGen/Thumb/stack-frame.ll @@ -1,5 +1,4 @@ -; RUN: llc < %s -march=thumb -; RUN: llc < %s -march=thumb | grep add | count 1 +; RUN: llc -mtriple=thumb-eabi < %s -o - | FileCheck %s define void @f1() { %c = alloca i8, align 1 @@ -10,4 +9,6 @@ define i32 @f2() { ret i32 1 } +; CHECK: add +; CHECK-NOT: add diff --git a/test/CodeGen/Thumb/thumb-imm.ll b/test/CodeGen/Thumb/thumb-imm.ll index 74a57ff271..592e694e02 100644 --- a/test/CodeGen/Thumb/thumb-imm.ll +++ b/test/CodeGen/Thumb/thumb-imm.ll @@ -1,5 +1,4 @@ -; RUN: llc < %s -march=thumb | not grep CPI - +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @test1() { ret i32 1000 @@ -8,3 +7,6 @@ define i32 @test1() { define i32 @test2() { ret i32 -256 } + +; CHECK-NOT: CPI + diff --git a/test/CodeGen/Thumb/thumb-ldm.ll b/test/CodeGen/Thumb/thumb-ldm.ll new file mode 100644 index 0000000000..dd98e6f300 --- /dev/null +++ b/test/CodeGen/Thumb/thumb-ldm.ll @@ -0,0 +1,42 @@ +; RUN: llc < %s -mtriple=thumbv6m-eabi -o - | FileCheck %s + +@X = external global [0 x i32] ; <[0 x i32]*> [#uses=5] + +define i32 @t1() { +; CHECK-LABEL: t1: +; CHECK: push {r7, lr} +; CHECK: ldm +; CHECK: pop {r7, pc} + %tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 0) ; <i32> [#uses=1] + %tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 1) ; <i32> [#uses=1] + %tmp4 = call i32 @f1( i32 %tmp, i32 %tmp3 ) ; <i32> [#uses=1] + ret i32 %tmp4 +} + +define i32 @t2() { +; CHECK-LABEL: t2: +; CHECK: push {r7, lr} +; CHECK: ldm +; CHECK: pop {r7, pc} + %tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 2) ; <i32> [#uses=1] + %tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 3) ; <i32> [#uses=1] + %tmp5 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 4) ; <i32> [#uses=1] + %tmp6 = call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 ) ; <i32> [#uses=1] + ret i32 %tmp6 +} + +define i32 @t3() { +; CHECK-LABEL: t3: +; CHECK: push {r7, lr} +; CHECK: ldm +; CHECK: pop {r7, pc} + %tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 1) ; <i32> [#uses=1] + %tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 2) ; <i32> [#uses=1] + %tmp5 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 3) ; <i32> [#uses=1] + %tmp6 = call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 ) ; <i32> [#uses=1] + ret i32 %tmp6 +} + +declare i32 @f1(i32, i32) + +declare i32 @f2(i32, i32, i32) diff --git a/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll b/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll new file mode 100644 index 0000000000..06cfd9bbef --- /dev/null +++ b/test/CodeGen/Thumb/thumb-memcpy-ldm-stm.ll @@ -0,0 +1,37 @@ +; RUN: llc -mtriple=thumbv6m-eabi %s -o - | FileCheck %s + +@d = external global [64 x i32] +@s = external global [64 x i32] + +; Function Attrs: nounwind +define void @t1() #0 { +entry: +; CHECK: ldr [[REG0:r[0-9]]], +; CHECK: ldm [[REG0]]!, +; CHECK: ldr [[REG1:r[0-9]]], +; CHECK: stm [[REG1]]!, +; CHECK: subs [[REG0]], #32 +; CHECK-NEXT: ldrb +; CHECK: subs [[REG1]], #32 +; CHECK-NEXT: strb + tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* bitcast ([64 x i32]* @s to i8*), i8* bitcast ([64 x i32]* @d to i8*), i32 33, i32 4, i1 false) + ret void +} + +; Function Attrs: nounwind +define void @t2() #0 { +entry: +; CHECK: ldr [[REG0:r[0-9]]], +; CHECK: ldm [[REG0]]!, +; CHECK: ldr [[REG1:r[0-9]]], +; CHECK: stm [[REG1]]!, +; CHECK: ldrh +; CHECK: ldrb +; CHECK: strb +; CHECK: strh + tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* bitcast ([64 x i32]* @s to i8*), i8* bitcast ([64 x i32]* @d to i8*), i32 15, i32 4, i1 false) + ret void +} + +; Function Attrs: nounwind +declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i32, i1) #1 diff --git a/test/CodeGen/Thumb/trap.ll b/test/CodeGen/Thumb/trap.ll index e04059c4b0..7d2f6f11a4 100644 --- a/test/CodeGen/Thumb/trap.ll +++ b/test/CodeGen/Thumb/trap.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb | FileCheck %s +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s ; rdar://7961298 define void @t() nounwind { diff --git a/test/CodeGen/Thumb/tst_teq.ll b/test/CodeGen/Thumb/tst_teq.ll index 21ada3ed83..2b6d9a3706 100644 --- a/test/CodeGen/Thumb/tst_teq.ll +++ b/test/CodeGen/Thumb/tst_teq.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -march=thumb | grep tst +; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s define i32 @f(i32 %a) { entry: @@ -15,3 +15,6 @@ entry: %retval = select i1 %0, i32 20, i32 10 ; <i32> [#uses=1] ret i32 %retval } + +; CHECK: tst + diff --git a/test/CodeGen/Thumb/vargs.ll b/test/CodeGen/Thumb/vargs.ll index 50a1a07288..4078b01ba3 100644 --- a/test/CodeGen/Thumb/vargs.ll +++ b/test/CodeGen/Thumb/vargs.ll @@ -1,6 +1,6 @@ -; RUN: llc < %s -march=thumb -; RUN: llc < %s -mtriple=thumb-linux | grep pop | count 2 -; RUN: llc < %s -mtriple=thumb-darwin | grep pop | count 2 +; RUN: llc -mtriple=thumb-eabi %s -o /dev/null +; RUN: llc -mtriple=thumb-linux %s -o - | FileCheck %s +; RUN: llc -mtriple=thumb-darwin %s -o - | FileCheck %s @str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] @@ -34,3 +34,8 @@ declare void @llvm.va_start(i8*) declare i32 @printf(i8*, ...) declare void @llvm.va_end(i8*) + +; CHECK: pop +; CHECK: pop +; CHECK-NOT: pop + |