[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / movtopush-stack-align.ll
blob1924a5715daf7d3cdbc32c9414c39eca1a4c2f9a
1 ; RUN: llc < %s -mtriple=i686-windows -stackrealign | FileCheck %s
3 declare void @good(i32 %a, i32 %b, i32 %c, i32 %d)
4 declare void @oneparam(i32 %a)
5 declare void @eightparams(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h)
7 ; When there is no reserved call frame, check that additional alignment
8 ; is added when the pushes don't add up to the required alignment.
9 ; CHECK-LABEL: test5:
10 ; CHECK: subl    $16, %esp
11 ; CHECK-NEXT: pushl   $4
12 ; CHECK-NEXT: pushl   $3
13 ; CHECK-NEXT: pushl   $2
14 ; CHECK-NEXT: pushl   $1
15 ; CHECK-NEXT: call
16 define void @test5(i32 %k) {
17 entry:
18   %a = alloca i32, i32 %k
19   call void @good(i32 1, i32 2, i32 3, i32 4)
20   ret void
23 ; When the alignment adds up, do the transformation
24 ; CHECK-LABEL: test5b:
25 ; CHECK: pushl   $8
26 ; CHECK-NEXT: pushl   $7
27 ; CHECK-NEXT: pushl   $6
28 ; CHECK-NEXT: pushl   $5
29 ; CHECK-NEXT: pushl   $4
30 ; CHECK-NEXT: pushl   $3
31 ; CHECK-NEXT: pushl   $2
32 ; CHECK-NEXT: pushl   $1
33 ; CHECK-NEXT: call
34 define void @test5b() optsize {
35 entry:
36   call void @eightparams(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8)
37   ret void
40 ; When having to compensate for the alignment isn't worth it,
41 ; don't use pushes.
42 ; CHECK-LABEL: test5c:
43 ; CHECK: movl $1, (%esp)
44 ; CHECK-NEXT: call
45 define void @test5c() optsize {
46 entry:
47   call void @oneparam(i32 1)
48   ret void
51 !llvm.module.flags = !{!0}
52 !0 = !{i32 2, !"override-stack-alignment", i32 32}