[AArch64] Add a test for float argument passing to win64 vararg functions

The existing tests only tested how a va_start is lowered.

Differential Revision: https://reviews.llvm.org/D35540

llvm-svn: 309015
This commit is contained in:
Martin Storsjo 2017-07-25 19:57:22 +00:00
parent 1eac879d85
commit 84cda2d779
1 changed files with 26 additions and 0 deletions

View File

@ -145,3 +145,29 @@ define i32 @snprintf(i8*, i64, i8*, ...) local_unnamed_addr #5 {
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5) #2
ret i32 %12
}
; CHECK-LABEL: fixed_params
; CHECK: sub sp, sp, #32
; CHECK: mov w8, w3
; CHECK: mov w9, w2
; CHECK: mov w10, w1
; CHECK: str w4, [sp]
; CHECK: fmov x1, d0
; CHECK: fmov x3, d1
; CHECK: fmov x5, d2
; CHECK: fmov x7, d3
; CHECK: mov w2, w10
; CHECK: mov w4, w9
; CHECK: mov w6, w8
; CHECK: str x30, [sp, #16]
; CHECK: str d4, [sp, #8]
; CHECK: bl varargs
; CHECK: ldr x30, [sp, #16]
; CHECK: add sp, sp, #32
; CHECK: ret
define void @fixed_params(i32, double, i32, double, i32, double, i32, double, i32, double) nounwind {
tail call void (i32, ...) @varargs(i32 %0, double %1, i32 %2, double %3, i32 %4, double %5, i32 %6, double %7, i32 %8, double %9)
ret void
}
declare void @varargs(i32, ...) local_unnamed_addr