xref: /llvm-project/llvm/test/CodeGen/X86/dynamic-allocas-VLAs-stack-align.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; RUN: llc < %s -stack-symbol-ordering=0 -mcpu=generic -stackrealign -mattr=+avx -mtriple=x86_64-apple-darwin10 | FileCheck %s
2; rdar://11496434
3declare void @t1_helper(ptr)
4declare void @t3_helper(ptr, ptr)
5
6; Test when forcing stack alignment
7define i32 @t8() nounwind uwtable {
8entry:
9  %a = alloca i32, align 4
10  call void @t1_helper(ptr %a) nounwind
11  %0 = load i32, ptr %a, align 4
12  %add = add nsw i32 %0, 13
13  ret i32 %add
14
15; CHECK: _t8
16; CHECK:      movq %rsp, %rbp
17; CHECK:      andq $-32, %rsp
18; CHECK-NEXT: subq $32, %rsp
19; CHECK:      movq %rbp, %rsp
20; CHECK:      popq %rbp
21}
22
23; VLAs
24define i32 @t9(i64 %sz) nounwind uwtable {
25entry:
26  %a = alloca i32, align 4
27  %vla = alloca i32, i64 %sz, align 16
28  call void @t3_helper(ptr %a, ptr %vla) nounwind
29  %0 = load i32, ptr %a, align 4
30  %add = add nsw i32 %0, 13
31  ret i32 %add
32
33; CHECK: _t9
34; CHECK: pushq %rbp
35; CHECK: movq %rsp, %rbp
36; CHECK: pushq %rbx
37; CHECK: andq $-32, %rsp
38; CHECK: subq $32, %rsp
39; CHECK: movq %rsp, %rbx
40
41; CHECK: leaq -8(%rbp), %rsp
42; CHECK: popq %rbx
43; CHECK: popq %rbp
44}
45!llvm.module.flags = !{!0}
46!0 = !{i32 2, !"override-stack-alignment", i32 32}
47