| ; 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 |