Revert "Proper va_arg/va_copy lowering on win64"
[oota-llvm.git] / test / CodeGen / X86 / win64_vararg.ll
1 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-pc-win32 | FileCheck %s
2
3 ; Verify that the var arg parameters which are passed in registers are stored
4 ; in home stack slots allocated by the caller and that AP is correctly
5 ; calculated.
6 define void @average_va(i32 %count, ...) nounwind {
7 entry:
8 ; CHECK: pushq
9 ; CHECK: movq   %r9, 40(%rsp)
10 ; CHECK: movq   %r8, 32(%rsp)
11 ; CHECK: movq   %rdx, 24(%rsp)
12 ; CHECK: leaq   24(%rsp), %rax
13
14   %ap = alloca i8*, align 8                       ; <i8**> [#uses=1]
15   %ap1 = bitcast i8** %ap to i8*                  ; <i8*> [#uses=1]
16   call void @llvm.va_start(i8* %ap1)
17   ret void
18 }
19
20 declare void @llvm.va_start(i8*) nounwind
21
22 ; CHECK: f5:
23 ; CHECK: pushq
24 ; CHECK: leaq 56(%rsp),
25 define i8* @f5(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, ...) nounwind {
26 entry:
27   %ap = alloca i8*, align 8
28   %ap1 = bitcast i8** %ap to i8*
29   call void @llvm.va_start(i8* %ap1)
30   ret i8* %ap1
31 }
32
33 ; CHECK: f4:
34 ; CHECK: pushq
35 ; CHECK: leaq 48(%rsp),
36 define i8* @f4(i64 %a0, i64 %a1, i64 %a2, i64 %a3, ...) nounwind {
37 entry:
38   %ap = alloca i8*, align 8
39   %ap1 = bitcast i8** %ap to i8*
40   call void @llvm.va_start(i8* %ap1)
41   ret i8* %ap1
42 }
43
44 ; CHECK: f3:
45 ; CHECK: pushq
46 ; CHECK: leaq 40(%rsp),
47 define i8* @f3(i64 %a0, i64 %a1, i64 %a2, ...) nounwind {
48 entry:
49   %ap = alloca i8*, align 8
50   %ap1 = bitcast i8** %ap to i8*
51   call void @llvm.va_start(i8* %ap1)
52   ret i8* %ap1
53 }