[WebAssembly] Don't perform the returned-argument optimization on constants.
[oota-llvm.git] / test / CodeGen / ARM / cfi-alignment.ll
1 ; RUN: llc -mtriple=thumbv7k-apple-watchos7.0 -o - %s | FileCheck %s
2
3 ; Since d11 doesn't get pushed with the aligned registers, its frameindex
4 ; shouldn't be modified to say it has been.
5
6 define void @foo() {
7 ; CHECK-LABEL: foo:
8 ; CHECK: push {r7, lr}
9 ; CHECK: .cfi_offset r7, -8
10 ; CHECK: vpush {d11}
11 ; CHECK: vpush {d8, d9}
12 ; CHECK: .cfi_offset d11, -16
13 ; CHECK: .cfi_offset d9, -24
14 ; CHECK: .cfi_offset d8, -32
15   call void asm sideeffect "", "~{d8},~{d9},~{d11}"()
16   call void @bar()
17   ret void
18 }
19
20 define void @variadic_foo(i8, ...) {
21 ; CHECK-LABEL: variadic_foo:
22 ; CHECK: sub sp, #12
23 ; CHECK: push {r7, lr}
24 ; CHECK: .cfi_offset r7, -20
25 ; CHECK: sub sp, #4
26 ; CHECK: vpush {d11}
27 ; CHECK: vpush {d8, d9}
28 ; CHECK: .cfi_offset d11, -32
29 ; CHECK: .cfi_offset d9, -40
30 ; CHECK: .cfi_offset d8, -48
31   call void asm sideeffect "", "~{d8},~{d9},~{d11}"()
32   call void @llvm.va_start(i8* null)
33   call void @bar()
34   ret void
35 }
36
37 define void @test_maintain_stack_align() {
38 ; CHECK-LABEL: test_maintain_stack_align:
39 ; CHECK: push {r7, lr}
40 ; CHECK: vpush {d8, d9}
41 ; CHECK: sub sp, #8
42   call void asm sideeffect "", "~{d8},~{d9}"()
43   call void @bar()
44   ret void
45 }
46
47 declare void @bar()
48 declare void @llvm.va_start(i8*) nounwind