summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/ARM/cfi-alignment.ll48
-rw-r--r--llvm/test/CodeGen/ARM/eh-resume-darwin.ll7
-rw-r--r--llvm/test/CodeGen/ARM/v7k-abi-align.ll6
-rw-r--r--llvm/test/CodeGen/ARM/vfp-reg-stride.ll9
-rw-r--r--llvm/test/MC/MachO/ARM/compact-unwind-armv7k.s124
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
OpenPOWER on IntegriCloud