summaryrefslogtreecommitdiff
path: root/test/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen')
-rw-r--r--test/CodeGen/X86/alloca-align-rounding-32.ll1
-rw-r--r--test/CodeGen/X86/alloca-align-rounding.ll1
-rw-r--r--test/CodeGen/X86/force-align-stack-alloca.ll21
3 files changed, 18 insertions, 5 deletions
diff --git a/test/CodeGen/X86/alloca-align-rounding-32.ll b/test/CodeGen/X86/alloca-align-rounding-32.ll
index 8a8b044d14..a45284e10c 100644
--- a/test/CodeGen/X86/alloca-align-rounding-32.ll
+++ b/test/CodeGen/X86/alloca-align-rounding-32.ll
@@ -15,5 +15,6 @@ define void @foo2(i32 %h) {
call void @bar(<2 x i64>* %p)
ret void
; CHECK: foo2
+; CHECK: andl $-32, %esp
; CHECK: andl $-32, %eax
}
diff --git a/test/CodeGen/X86/alloca-align-rounding.ll b/test/CodeGen/X86/alloca-align-rounding.ll
index 7bc880625c..3d76fb0aa2 100644
--- a/test/CodeGen/X86/alloca-align-rounding.ll
+++ b/test/CodeGen/X86/alloca-align-rounding.ll
@@ -15,5 +15,6 @@ define void @foo2(i64 %h) {
call void @bar(<2 x i64>* %p)
ret void
; CHECK: foo2
+; CHECK: andq $-32, %rsp
; CHECK: andq $-32, %rax
}
diff --git a/test/CodeGen/X86/force-align-stack-alloca.ll b/test/CodeGen/X86/force-align-stack-alloca.ll
index 48f963f58e..ecef781f88 100644
--- a/test/CodeGen/X86/force-align-stack-alloca.ll
+++ b/test/CodeGen/X86/force-align-stack-alloca.ll
@@ -17,10 +17,15 @@ entry:
define i64 @g(i32 %i) nounwind {
; CHECK: g:
-; CHECK: pushl
+; CHECK: pushl %ebp
; CHECK-NEXT: movl %esp, %ebp
+; CHECK-NEXT: andl $-32, %esp
; CHECK-NEXT: pushl
-; CHECK-NEXT: subl $20, %esp
+; CHECK-NEXT: pushl
+; CHECK-NEXT: subl $24, %esp
+;
+; Now setup the base pointer (%ebx).
+; CHECK-NEXT: movl %esp, %ebx
; CHECK-NOT: {{[^ ,]*}}, %esp
;
; The next adjustment of the stack is due to the alloca.
@@ -41,12 +46,18 @@ define i64 @g(i32 %i) nounwind {
; CHECK-NEXT: addl $32, %esp
; CHECK-NOT: {{[^ ,]*}}, %esp
;
-; Finally we nede to restore %esp from %ebp, the alloca prevents us from
-; restoring it directly.
+; Restore %esp from %ebx (base pointer) so we can pop the callee-saved
+; registers. This is the state prior to the allocation of VLAs.
; CHECK-NOT: popl
-; CHECK: leal -4(%ebp), %esp
+; CHECK: movl %ebx, %esp
+; CHECK-NEXT: addl $24, %esp
; CHECK-NEXT: popl
; CHECK-NEXT: popl
+;
+; Finally we need to restore %esp from %ebp due to dynamic stack
+; realignment.
+; CHECK-NEXT: movl %ebp, %esp
+; CHECK-NEXT: popl %ebp
; CHECK-NEXT: ret
entry: