diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/ARM/cse-ldrlit.ll | 12 | ||||
-rw-r--r-- | test/CodeGen/ARM/fast-isel-crash2.ll | 4 | ||||
-rw-r--r-- | test/CodeGen/ARM/fast-isel-frameaddr.ll | 16 | ||||
-rw-r--r-- | test/CodeGen/ARM/fold-stack-adjust.ll | 22 | ||||
-rw-r--r-- | test/CodeGen/ARM/interrupt-attr.ll | 7 | ||||
-rw-r--r-- | test/CodeGen/ARM/ldm.ll | 4 | ||||
-rw-r--r-- | test/CodeGen/ARM/memfunc.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/ARM/none-macho.ll | 101 |
8 files changed, 134 insertions, 34 deletions
diff --git a/test/CodeGen/ARM/cse-ldrlit.ll b/test/CodeGen/ARM/cse-ldrlit.ll index c59b4c06f0..ea8c0ca856 100644 --- a/test/CodeGen/ARM/cse-ldrlit.ll +++ b/test/CodeGen/ARM/cse-ldrlit.ll @@ -1,9 +1,9 @@ -; RUN: llc -mtriple=thumbv6m-apple-darwin-eabi -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-THUMB-PIC -; RUN: llc -mtriple=arm-apple-darwin-eabi -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-ARM-PIC -; RUN: llc -mtriple=thumbv6m-apple-darwin-eabi -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC -; RUN: llc -mtriple=arm-apple-darwin-eabi -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC -; RUN: llc -mtriple=thumbv6m-apple-darwin-eabi -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC -; RUN: llc -mtriple=arm-apple-darwin-eabi -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC +; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-THUMB-PIC +; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-ARM-PIC +; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC +; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC +; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC +; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC @var = global [16 x i32] zeroinitializer declare void @bar(i32*) diff --git a/test/CodeGen/ARM/fast-isel-crash2.ll b/test/CodeGen/ARM/fast-isel-crash2.ll index d606877673..cccd9eb951 100644 --- a/test/CodeGen/ARM/fast-isel-crash2.ll +++ b/test/CodeGen/ARM/fast-isel-crash2.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-apple-darwin -; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-linux-gnueabi +; RUN: llc < %s -O0 -verify-machineinstrs -mtriple=thumbv7-apple-darwin +; RUN: llc < %s -O0 -verify-machineinstrs -mtriple=armv7-linux-gnueabi ; rdar://9515076 ; (Make sure this doesn't crash.) diff --git a/test/CodeGen/ARM/fast-isel-frameaddr.ll b/test/CodeGen/ARM/fast-isel-frameaddr.ll index 8542bb5e27..93cdbbbbd8 100644 --- a/test/CodeGen/ARM/fast-isel-frameaddr.ll +++ b/test/CodeGen/ARM/fast-isel-frameaddr.ll @@ -1,6 +1,6 @@ -; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=armv7-apple-darwin | FileCheck %s --check-prefix=DARWIN-ARM +; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=DARWIN-ARM ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-ARM -; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-apple-darwin | FileCheck %s --check-prefix=DARWIN-THUMB2 +; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=DARWIN-THUMB2 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-THUMB2 define i8* @frameaddr_index0() nounwind { @@ -34,14 +34,12 @@ entry: ; DARWIN-ARM-LABEL: frameaddr_index1: ; DARWIN-ARM: push {r7} ; DARWIN-ARM: mov r7, sp -; DARWIN-ARM: mov r0, r7 -; DARWIN-ARM: ldr r0, [r0] +; DARWIN-ARM: ldr r0, [r7] ; DARWIN-THUMB2-LABEL: frameaddr_index1: ; DARWIN-THUMB2: str r7, [sp, #-4]! ; DARWIN-THUMB2: mov r7, sp -; DARWIN-THUMB2: mov r0, r7 -; DARWIN-THUMB2: ldr r0, [r0] +; DARWIN-THUMB2: ldr r0, [r7] ; LINUX-ARM-LABEL: frameaddr_index1: ; LINUX-ARM: push {r11} @@ -63,16 +61,14 @@ entry: ; DARWIN-ARM-LABEL: frameaddr_index3: ; DARWIN-ARM: push {r7} ; DARWIN-ARM: mov r7, sp -; DARWIN-ARM: mov r0, r7 -; DARWIN-ARM: ldr r0, [r0] +; DARWIN-ARM: ldr r0, [r7] ; DARWIN-ARM: ldr r0, [r0] ; DARWIN-ARM: ldr r0, [r0] ; DARWIN-THUMB2-LABEL: frameaddr_index3: ; DARWIN-THUMB2: str r7, [sp, #-4]! ; DARWIN-THUMB2: mov r7, sp -; DARWIN-THUMB2: mov r0, r7 -; DARWIN-THUMB2: ldr r0, [r0] +; DARWIN-THUMB2: ldr r0, [r7] ; DARWIN-THUMB2: ldr r0, [r0] ; DARWIN-THUMB2: ldr r0, [r0] diff --git a/test/CodeGen/ARM/fold-stack-adjust.ll b/test/CodeGen/ARM/fold-stack-adjust.ll index 67fd129fd1..81d94d16c1 100644 --- a/test/CodeGen/ARM/fold-stack-adjust.ll +++ b/test/CodeGen/ARM/fold-stack-adjust.ll @@ -1,5 +1,5 @@ -; RUN: llc -mtriple=thumbv7-apple-darwin-eabi < %s | FileCheck %s -; RUN: llc -mtriple=thumbv6m-apple-darwin-eabi -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-T1 +; RUN: llc -mtriple=thumbv7-apple-none-macho < %s | FileCheck %s +; RUN: llc -mtriple=thumbv6m-apple-none-macho -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-T1 ; RUN: llc -mtriple=thumbv7-apple-darwin-ios -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-IOS @@ -11,11 +11,11 @@ declare void @bar(i8*) define void @check_simple() minsize { ; CHECK-LABEL: check_simple: -; CHECK: push.w {r7, r8, r9, r10, r11, lr} +; CHECK: push {r3, r4, r5, r6, r7, lr} ; CHECK-NOT: sub sp, sp, ; ... ; CHECK-NOT: add sp, sp, -; CHECK: pop.w {r0, r1, r2, r3, r11, pc} +; CHECK: pop {r0, r1, r2, r3, r7, pc} ; CHECK-T1-LABEL: check_simple: ; CHECK-T1: push {r3, r4, r5, r6, r7, lr} @@ -43,11 +43,11 @@ define void @check_simple() minsize { define void @check_simple_too_big() minsize { ; CHECK-LABEL: check_simple_too_big: -; CHECK: push.w {r11, lr} +; CHECK: push {r7, lr} ; CHECK: sub sp, ; ... ; CHECK: add sp, -; CHECK: pop.w {r11, pc} +; CHECK: pop {r7, pc} %var = alloca i8, i32 64 call void @bar(i8* %var) ret void @@ -92,16 +92,16 @@ define void @check_vfp_fold() minsize { ; folded in except that doing so would clobber the value being returned. define i64 @check_no_return_clobber() minsize { ; CHECK-LABEL: check_no_return_clobber: -; CHECK: push.w {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} +; CHECK: push {r1, r2, r3, r4, r5, r6, r7, lr} ; CHECK-NOT: sub sp, ; ... -; CHECK: add sp, #40 -; CHECK: pop.w {r11, pc} +; CHECK: add sp, #24 +; CHECK: pop {r7, pc} ; Just to keep iOS FileCheck within previous function: ; CHECK-IOS-LABEL: check_no_return_clobber: - %var = alloca i8, i32 40 + %var = alloca i8, i32 20 call void @bar(i8* %var) ret i64 0 } @@ -161,4 +161,4 @@ end: ; We want the epilogue to be the only thing in a basic block so that we hit ; the correct edge-case (first inst in block is correct one to adjust). ret void -}
\ No newline at end of file +} diff --git a/test/CodeGen/ARM/interrupt-attr.ll b/test/CodeGen/ARM/interrupt-attr.ll index 217fd69623..10d5c00a85 100644 --- a/test/CodeGen/ARM/interrupt-attr.ll +++ b/test/CodeGen/ARM/interrupt-attr.ll @@ -1,6 +1,6 @@ ; RUN: llc -mtriple=arm-none-none-eabi -mcpu=cortex-a15 -o - %s | FileCheck --check-prefix=CHECK-A %s ; RUN: llc -mtriple=thumb-none-none-eabi -mcpu=cortex-a15 -o - %s | FileCheck --check-prefix=CHECK-A-THUMB %s -; RUN: llc -mtriple=thumb-apple-darwin -mcpu=cortex-m3 -o - %s | FileCheck --check-prefix=CHECK-M %s +; RUN: llc -mtriple=thumb-apple-none-macho -mcpu=cortex-m3 -o - %s | FileCheck --check-prefix=CHECK-M %s declare arm_aapcscc void @bar() @@ -34,10 +34,11 @@ define arm_aapcscc void @irq_fn() alignstack(8) "interrupt"="IRQ" { ; Normal AAPCS function (r0-r3 pushed onto stack by hardware, lr set to ; appropriate sentinel so no special return needed). +; CHECK-M-LABEL: irq_fn: ; CHECK-M: push {r4, r7, lr} ; CHECK-M: add r7, sp, #4 -; CHECK-M: sub sp, #4 ; CHECK-M: mov r4, sp +; CHECK-M: bic r4, r4, #7 ; CHECK-M: mov sp, r4 ; CHECK-M: blx _bar ; CHECK-M: subs r4, r7, #4 @@ -61,6 +62,8 @@ define arm_aapcscc void @fiq_fn() alignstack(8) "interrupt"="FIQ" { ; CHECK-A: pop {r0, r1, r2, r3, r4, r5, r6, r7, r11, lr} ; CHECK-A: subs pc, lr, #4 +; CHECK-A-THUMB-LABEL: fiq_fn: +; CHECK-M-LABEL: fiq_fn: %val = load volatile [16 x i32]* @bigvar store volatile [16 x i32] %val, [16 x i32]* @bigvar ret void diff --git a/test/CodeGen/ARM/ldm.ll b/test/CodeGen/ARM/ldm.ll index d5b805c721..3977da6da9 100644 --- a/test/CodeGen/ARM/ldm.ll +++ b/test/CodeGen/ARM/ldm.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -mtriple=armv7-apple-darwin | FileCheck %s -; RUN: llc < %s -mtriple=armv4t-apple-darwin | FileCheck %s -check-prefix=V4T +; RUN: llc < %s -mtriple=armv7-apple-ios3.0 | FileCheck %s +; RUN: llc < %s -mtriple=armv4t-apple-ios3.0 | FileCheck %s -check-prefix=V4T @X = external global [0 x i32] ; <[0 x i32]*> [#uses=5] diff --git a/test/CodeGen/ARM/memfunc.ll b/test/CodeGen/ARM/memfunc.ll index a724080b74..8d3800b43c 100644 --- a/test/CodeGen/ARM/memfunc.ll +++ b/test/CodeGen/ARM/memfunc.ll @@ -1,5 +1,5 @@ ; RUN: llc < %s -mtriple=armv7-apple-ios -o - | FileCheck %s -; RUN: llc < %s -mtriple=thumbv7m-darwin-eabi -o - | FileCheck %s --check-prefix=DARWIN +; RUN: llc < %s -mtriple=thumbv7m-none-macho -o - | FileCheck %s --check-prefix=DARWIN ; RUN: llc < %s -mtriple=arm-none-eabi -o - | FileCheck --check-prefix=EABI %s ; RUN: llc < %s -mtriple=arm-none-eabihf -o - | FileCheck --check-prefix=EABI %s diff --git a/test/CodeGen/ARM/none-macho.ll b/test/CodeGen/ARM/none-macho.ll new file mode 100644 index 0000000000..2795b8cd2d --- /dev/null +++ b/test/CodeGen/ARM/none-macho.ll @@ -0,0 +1,101 @@ +; RUN: llc -mtriple=thumbv7m-none-macho %s -o - -relocation-model=pic -disable-fp-elim | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NON-FAST +; RUN: llc -mtriple=thumbv7m-none-macho -O0 %s -o - -relocation-model=pic -disable-fp-elim | FileCheck %s +; RUN: llc -mtriple=thumbv7m-none-macho -filetype=obj %s -o /dev/null + + ; Bare-metal should probably "declare" segments just like normal MachO +; CHECK: __picsymbolstub4 +; CHECK: __StaticInit +; CHECK: __text + +@var = external global i32 + +define i32 @test_litpool() minsize { +; CHECK-LABEL: test_litpool: + %val = load i32* @var + ret i32 %val + + ; Lit-pool entries need to produce a "$non_lazy_ptr" version of the symbol. +; CHECK: LCPI0_0: +; CHECK-NEXT: .long L_var$non_lazy_ptr-(LPC0_0+4) +} + +define i32 @test_movw_movt() { +; CHECK-LABEL: test_movw_movt: + %val = load i32* @var + ret i32 %val + + ; movw/movt should also address their symbols MachO-style +; CHECK: movw [[RTMP:r[0-9]+]], :lower16:(L_var$non_lazy_ptr-(LPC1_0+4)) +; CHECK: movt [[RTMP]], :upper16:(L_var$non_lazy_ptr-(LPC1_0+4)) +; CHECK: LPC1_0: +; CHECK: add [[RTMP]], pc +} + +declare void @llvm.trap() + +define void @test_trap() { +; CHECK-LABEL: test_trap: + + ; Bare-metal MachO gets compiled on top of normal MachO toolchain which + ; understands trap natively. + call void @llvm.trap() +; CHECK: trap + + ret void +} + +define i32 @test_frame_ptr() { +; CHECK-LABEL: test_frame_ptr: + call void @test_trap() + + ; Frame pointer is r7 as for Darwin +; CHECK: mov r7, sp + ret i32 42 +} + +%big_arr = type [8 x i32] +define void @test_two_areas(%big_arr* %addr) { +; CHECK-LABEL: test_two_areas: + %val = load %big_arr* %addr + call void @test_trap() + store %big_arr %val, %big_arr* %addr + + ; This goes with the choice of r7 as FP (largely). FP and LR have to be stored + ; consecutively on the stack for the frame record to be valid, which means we + ; need the 2 register-save areas employed by iOS. +; CHECK-NON-FAST: push {r4, r5, r6, r7, lr} +; CHECK-NON-FAST: push.w {r8, r9, r10, r11} +; ... +; CHECK-NON-FAST: pop.w {r8, r9, r10, r11} +; CHECK-NON-FAST: pop {r4, r5, r6, r7, pc} + ret void +} + +define void @test_tail_call() { +; CHECK-LABEL: test_tail_call: + tail call void @test_trap() + + ; Tail calls should be available and use Thumb2 branch. +; CHECK: b.w _test_trap + ret void +} + +define float @test_softfloat_calls(float %in) { +; CHECK-LABEL: test_softfloat_calls: + %sum = fadd float %in, %in + + ; Soft-float calls should be GNU-style rather than RTABI and should not be the + ; *vfp variants used for ARMv6 iOS. +; CHECK: blx ___addsf3{{$}} + ret float %sum +} + + ; Even bare-metal PIC needs GOT-like behaviour, in principle. Depends a bit on + ; the use-case of course, but LLVM doesn't know what that is. +; CHECK: non_lazy_symbol_pointers +; CHECK: L_var$non_lazy_ptr: +; CHECK-NEXT: .indirect_symbol _var + + ; All MachO objects should have this to give the linker leeway in removing + ; dead code. +; CHECK: .subsections_via_symbols |