diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/ARM/cfi-alignment.ll | 48 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/eh-resume-darwin.ll | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/v7k-abi-align.ll | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/vfp-reg-stride.ll | 9 | ||||
-rw-r--r-- | llvm/test/MC/MachO/ARM/compact-unwind-armv7k.s | 124 |
5 files changed, 191 insertions, 3 deletions
diff --git a/llvm/test/CodeGen/ARM/cfi-alignment.ll b/llvm/test/CodeGen/ARM/cfi-alignment.ll new file mode 100644 index 00000000000..11add224265 --- /dev/null +++ b/llvm/test/CodeGen/ARM/cfi-alignment.ll @@ -0,0 +1,48 @@ +; RUN: llc -mtriple=thumbv7k-apple-watchos7.0 -o - %s | FileCheck %s + +; Since d11 doesn't get pushed with the aligned registers, its frameindex +; shouldn't be modified to say it has been. + +define void @foo() { +; CHECK-LABEL: foo: +; CHECK: push {r7, lr} +; CHECK: .cfi_offset r7, -8 +; CHECK: vpush {d11} +; CHECK: vpush {d8, d9} +; CHECK: .cfi_offset d11, -16 +; CHECK: .cfi_offset d9, -24 +; CHECK: .cfi_offset d8, -32 + call void asm sideeffect "", "~{d8},~{d9},~{d11}"() + call void @bar() + ret void +} + +define void @variadic_foo(i8, ...) { +; CHECK-LABEL: variadic_foo: +; CHECK: sub sp, #12 +; CHECK: push {r7, lr} +; CHECK: .cfi_offset r7, -20 +; CHECK: sub sp, #4 +; CHECK: vpush {d11} +; CHECK: vpush {d8, d9} +; CHECK: .cfi_offset d11, -32 +; CHECK: .cfi_offset d9, -40 +; CHECK: .cfi_offset d8, -48 + call void asm sideeffect "", "~{d8},~{d9},~{d11}"() + call void @llvm.va_start(i8* null) + call void @bar() + ret void +} + +define void @test_maintain_stack_align() { +; CHECK-LABEL: test_maintain_stack_align: +; CHECK: push {r7, lr} +; CHECK: vpush {d8, d9} +; CHECK: sub sp, #8 + call void asm sideeffect "", "~{d8},~{d9}"() + call void @bar() + ret void +} + +declare void @bar() +declare void @llvm.va_start(i8*) nounwind diff --git a/llvm/test/CodeGen/ARM/eh-resume-darwin.ll b/llvm/test/CodeGen/ARM/eh-resume-darwin.ll index 0cd49775cfb..6ac025c6f05 100644 --- a/llvm/test/CodeGen/ARM/eh-resume-darwin.ll +++ b/llvm/test/CodeGen/ARM/eh-resume-darwin.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -march=arm | FileCheck %s -target triple = "armv6-apple-macosx10.6" +; RUN: llc < %s -mtriple=armv7-apple-ios -arm-atomic-cfg-tidy=0 | FileCheck %s -check-prefix=IOS +; RUN: llc < %s -mtriple=armv7k-apple-watchos -arm-atomic-cfg-tidy=0 | FileCheck %s -check-prefix=WATCHOS declare void @func() @@ -19,4 +19,5 @@ lpad: resume { i8*, i32 } %exn } -; CHECK: __Unwind_SjLj_Resume +; IOS: __Unwind_SjLj_Resume +; WATCHOS: __Unwind_Resume diff --git a/llvm/test/CodeGen/ARM/v7k-abi-align.ll b/llvm/test/CodeGen/ARM/v7k-abi-align.ll index f666efc2db9..e9b67f22edf 100644 --- a/llvm/test/CodeGen/ARM/v7k-abi-align.ll +++ b/llvm/test/CodeGen/ARM/v7k-abi-align.ll @@ -33,6 +33,8 @@ define void @test_dpr_unwind_align() { ; CHECK: push {r5, r6, r7, lr} ; CHECK-NOT: sub sp ; CHECK: vpush {d8, d9} +; CHECK: .cfi_offset d9, -24 +; CHECK: .cfi_offset d8, -32 ; [...] ; CHECK: bl _test_i64_align ; CHECK-NOT: add sp, @@ -56,6 +58,8 @@ define void @test_dpr_unwind_align_manually() { ; CHECK: push.w {r8, r11} ; CHECK: sub sp, #4 ; CHECK: vpush {d8, d9} +; CHECK: .cfi_offset d9, -40 +; CHECK: .cfi_offset d8, -48 ; [...] ; CHECK: bl _test_i64_align ; CHECK-NOT: add sp, @@ -77,6 +81,8 @@ define void @test_dpr_unwind_align_just_cs1() { ; CHECK: push {r4, r5, r6, r7, lr} ; CHECK: sub sp, #4 ; CHECK: vpush {d8, d9} +; CHECK: .cfi_offset d9, -32 +; CHECK: .cfi_offset d8, -40 ; CHECK: sub sp, #8 ; [...] ; CHECK: bl _test_i64_align diff --git a/llvm/test/CodeGen/ARM/vfp-reg-stride.ll b/llvm/test/CodeGen/ARM/vfp-reg-stride.ll index 5484cc810b0..c5339db68e3 100644 --- a/llvm/test/CodeGen/ARM/vfp-reg-stride.ll +++ b/llvm/test/CodeGen/ARM/vfp-reg-stride.ll @@ -1,4 +1,5 @@ ; RUN: llc -mcpu=swift -mtriple=thumbv7s-apple-ios -o - %s | FileCheck %s --check-prefix=CHECK-STRIDE4 +; RUN: llc -mcpu=swift -mtriple=thumbv7k-apple-watchos -o - %s | FileCheck %s --check-prefix=CHECK-STRIDE4-WATCH ; RUN: llc -mcpu=cortex-a57 -mtriple=thumbv7-linux-gnueabihf -o - %s | FileCheck %s --check-prefix=CHECK-GENERIC define void @test_reg_stride(double %a, double %b) { @@ -6,6 +7,10 @@ define void @test_reg_stride(double %a, double %b) { ; CHECK-STRIDE4-DAG: vmov d16, r ; CHECK-STRIDE4-DAG: vmov d18, r +; CHECK-STRIDE4-WATCH-LABEL: test_reg_stride: +; CHECK-STRIDE4-WATCH-DAG: vmov.f64 d16, d +; CHECK-STRIDE4-WATCH-DAG: vmov.f64 d18, d + ; CHECK-GENERIC-LABEL: test_reg_stride: ; CHECK-GENERIC-DAG: vmov.f64 d16, {{d[01]}} ; CHECK-GENERIC-DAG: vmov.f64 d17, {{d[01]}} @@ -20,6 +25,10 @@ define void @test_stride_minsize(float %a, float %b) minsize { ; CHECK-STRIDE4: vmov d2, {{r[01]}} ; CHECK-STRIDE4: vmov d3, {{r[01]}} +; CHECK-STRIDE4-WATCH-LABEL: test_stride_minsize: +; CHECK-STRIDE4-WATCH-DAG: vmov.f32 s4, {{s[01]}} +; CHECK-STRIDE4-WATCH-DAG: vmov.f32 s8, {{s[01]}} + ; CHECK-GENERIC-LABEL: test_stride_minsize: ; CHECK-GENERIC-DAG: vmov.f32 s4, {{s[01]}} ; CHECK-GENERIC-DAG: vmov.f32 s6, {{s[01]}} diff --git a/llvm/test/MC/MachO/ARM/compact-unwind-armv7k.s b/llvm/test/MC/MachO/ARM/compact-unwind-armv7k.s new file mode 100644 index 00000000000..6e8a855cafc --- /dev/null +++ b/llvm/test/MC/MachO/ARM/compact-unwind-armv7k.s @@ -0,0 +1,124 @@ +@ RUN: llvm-mc -triple=thumbv7k-apple-watchos2.0.0 -filetype=obj -o %t < %s && llvm-objdump -unwind-info %t | FileCheck %s + +@ CHECK: Contents of __compact_unwind section: + + .syntax unified + .align 2 + .code 16 + +@ CHECK-LABEL: start: {{.*}} _test_r4_r5_r6 +@ CHECK: compact encoding: 0x01000007 + .thumb_func _test_r4_r5_r6 +_test_r4_r5_r6: + .cfi_startproc + push {r4, r5, r6, r7, lr} + add r7, sp, #12 + sub sp, #16 + .cfi_def_cfa r7, 8 + .cfi_offset lr, -4 + .cfi_offset r7, -8 + .cfi_offset r6, -12 + .cfi_offset r5, -16 + .cfi_offset r4, -20 + .cfi_endproc + + +@ CHECK-LABEL: start: {{.*}} _test_r4_r5_r10_r11 +@ CHECK: compact encoding: 0x01000063 + .thumb_func _test_r4_r5_r10_r11 +_test_r4_r5_r10_r11: + .cfi_startproc + push {r4, r5, r7, lr} + add r7, sp, #8 + .cfi_def_cfa r7, 8 + .cfi_offset lr, -4 + .cfi_offset r7, -8 + .cfi_offset r5, -12 + .cfi_offset r4, -16 + push.w {r10, r11} + .cfi_offset r11, -20 + .cfi_offset r10, -24 + .cfi_endproc + + +@ CHECK-LABEL: start: {{.*}} _test_d8 +@ CHECK: compact encoding: 0x02000000 + .thumb_func _test_d8 +_test_d8: + .cfi_startproc + push {r7, lr} + mov r7, sp + .cfi_def_cfa r7, 8 + .cfi_offset lr, -4 + .cfi_offset r7, -8 + vpush {d8} + .cfi_offset d8, -16 + .cfi_endproc + + +@ CHECK-LABEL: start: {{.*}} _test_d8_d10_d12_d14 +@ CHECK: compact encoding: 0x02000300 + .thumb_func _test_d8_d10_d12_d14 +_test_d8_d10_d12_d14: + .cfi_startproc + push {r7, lr} + mov r7, sp + .cfi_def_cfa r7, 8 + .cfi_offset lr, -4 + .cfi_offset r7, -8 + vpush {d14} + vpush {d12} + vpush {d10} + vpush {d8} + .cfi_offset d14, -16 + .cfi_offset d12, -24 + .cfi_offset d10, -32 + .cfi_offset d8, -40 + .cfi_endproc + +@ CHECK-LABEL: start: {{.*}} _test_varargs +@ CHECK: compact encoding: 0x01c00001 + .thumb_func _test_varargs +_test_varargs: + .cfi_startproc + sub sp, #12 + push {r4, r7, lr} + add r7, sp, #4 + .cfi_def_cfa r7, 20 + .cfi_offset lr, -16 + .cfi_offset r7, -20 + .cfi_offset r4, -24 + add.w r9, r7, #8 + mov r4, r0 + stm.w r9, {r1, r2, r3} + .cfi_endproc + +@ CHECK-LABEL: start: {{.*}} _test_missing_lr +@ CHECK: compact encoding: 0x04000000 + .thumb_func _test_missing_lr +_test_missing_lr: + .cfi_startproc + push {r7} + .cfi_def_cfa r7, 4 + .cfi_offset r7, -4 + pop {r7} + bx lr + .cfi_endproc + +@ CHECK-LABEL: start: {{.*}} _test_swapped_offsets +@ CHECK: compact encoding: 0x04000000 + .thumb_func _test_swapped_offsets +_test_swapped_offsets: + .cfi_startproc + push {r7, lr} + push {r10} + push {r4} + .cfi_def_cfa r7, 8 + .cfi_offset lr, -4 + .cfi_offset r7, -8 + .cfi_offset r10, -12 + .cfi_offset r4, -16 + pop {r4} + pop {r10} + pop {r7, pc} + .cfi_endproc |