; RUN: llc < %s -mtriple=i686-windows -stackrealign | FileCheck %s declare void @good(i32 %a, i32 %b, i32 %c, i32 %d) declare void @oneparam(i32 %a) declare void @eightparams(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h) ; When there is no reserved call frame, check that additional alignment ; is added when the pushes don't add up to the required alignment. ; CHECK-LABEL: test5: ; CHECK: subl $16, %esp ; CHECK-NEXT: pushl $4 ; CHECK-NEXT: pushl $3 ; CHECK-NEXT: pushl $2 ; CHECK-NEXT: pushl $1 ; CHECK-NEXT: call define void @test5(i32 %k) { entry: %a = alloca i32, i32 %k call void @good(i32 1, i32 2, i32 3, i32 4) ret void } ; When the alignment adds up, do the transformation ; CHECK-LABEL: test5b: ; CHECK: pushl $8 ; CHECK-NEXT: pushl $7 ; CHECK-NEXT: pushl $6 ; CHECK-NEXT: pushl $5 ; CHECK-NEXT: pushl $4 ; CHECK-NEXT: pushl $3 ; CHECK-NEXT: pushl $2 ; CHECK-NEXT: pushl $1 ; CHECK-NEXT: call define void @test5b() optsize { entry: call void @eightparams(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8) ret void } ; When having to compensate for the alignment isn't worth it, ; don't use pushes. ; CHECK-LABEL: test5c: ; CHECK: movl $1, (%esp) ; CHECK-NEXT: call define void @test5c() optsize { entry: call void @oneparam(i32 1) ret void } !llvm.module.flags = !{!0} !0 = !{i32 2, !"override-stack-alignment", i32 32}