Lines Matching full:win64
2 // RUN: %clang_cc1 -triple x86_64-pc-win32 -emit-llvm < %s | FileCheck -check-prefix=WIN64 %s
10 // WIN64: %[[STRUCT_FOO:.*]] = type { i32, float, i8 }
16 // WIN64-LABEL: define void @f3() in f3()
19 // WIN64: call void @f1() in f3()
22 // WIN64: call x86_64_sysvcc void @f2() in f3()
26 // WIN64: declare void @f1()
27 // WIN64: declare x86_64_sysvcc void @f2()
29 // Win64 ABI varargs
32 // WIN64-LABEL: define void @f4 in f4()
37 // WIN64: %[[AP:.*]] = alloca i8* in f4()
38 // WIN64: call void @llvm.va_start in f4()
44 // WIN64: %[[AP_CUR:.*]] = load i8*, i8** %[[AP]] in f4()
45 // WIN64-NEXT: %[[AP_NEXT:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR]], i64 8 in f4()
46 // WIN64-NEXT: store i8* %[[AP_NEXT]], i8** %[[AP]] in f4()
47 // WIN64-NEXT: bitcast i8* %[[AP_CUR]] to i32* in f4()
53 // WIN64: %[[AP_CUR2:.*]] = load i8*, i8** %[[AP]] in f4()
54 // WIN64-NEXT: %[[AP_NEXT2:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR2]], i64 16 in f4()
55 // WIN64-NEXT: store i8* %[[AP_NEXT2]], i8** %[[AP]] in f4()
56 // WIN64-NEXT: bitcast i8* %[[AP_CUR2]] to { double, double }* in f4()
62 // WIN64: %[[AP_CUR3:.*]] = load i8*, i8** %[[AP]] in f4()
63 // WIN64-NEXT: %[[AP_NEXT3:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR3]], i64 16 in f4()
64 // WIN64-NEXT: store i8* %[[AP_NEXT3]], i8** %[[AP]] in f4()
65 // WIN64-NEXT: bitcast i8* %[[AP_CUR3]] to %[[STRUCT_FOO]]* in f4()
70 // WIN64: %[[AP_VAL:.*]] = load i8*, i8** %[[AP]] in f4()
71 // WIN64-NEXT: store i8* %[[AP_VAL]], i8** %[[AP2:.*]] in f4()
74 // WIN64: call void @llvm.va_end in f4()
77 // Let's verify that normal va_lists work right on Win64, too.
79 // WIN64-LABEL: define void @f5 in f5()
82 // WIN64: %[[AP:.*]] = alloca i8* in f5()
83 // WIN64: call void @llvm.va_start in f5()
85 // WIN64: %[[AP_CUR:.*]] = load i8*, i8** %[[AP]] in f5()
86 // WIN64-NEXT: %[[AP_NEXT:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR]], i64 8 in f5()
87 // WIN64-NEXT: store i8* %[[AP_NEXT]], i8** %[[AP]] in f5()
88 // WIN64-NEXT: bitcast i8* %[[AP_CUR]] to i32* in f5()
90 // WIN64: %[[AP_CUR2:.*]] = load i8*, i8** %[[AP]] in f5()
91 // WIN64-NEXT: %[[AP_NEXT2:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR2]], i64 16 in f5()
92 // WIN64-NEXT: store i8* %[[AP_NEXT2]], i8** %[[AP]] in f5()
93 // WIN64-NEXT: bitcast i8* %[[AP_CUR2]] to { double, double }* in f5()
95 // WIN64: %[[AP_CUR3:.*]] = load i8*, i8** %[[AP]] in f5()
96 // WIN64-NEXT: %[[AP_NEXT3:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR3]], i64 16 in f5()
97 // WIN64-NEXT: store i8* %[[AP_NEXT3]], i8** %[[AP]] in f5()
98 // WIN64-NEXT: bitcast i8* %[[AP_CUR3]] to %[[STRUCT_FOO]]* in f5()
101 // WIN64: call void @llvm.va_copy in f5()
103 // WIN64: call void @llvm.va_end in f5()
106 // Verify that using a Win64 va_list from a System V function works.
110 // WIN64-LABEL: define x86_64_sysvcc void @f6 in f6()
111 // WIN64: store i8* %ap, i8** %[[AP:.*]] in f6()
117 // WIN64: %[[AP_CUR:.*]] = load i8*, i8** %[[AP]] in f6()
118 // WIN64-NEXT: %[[AP_NEXT:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR]], i64 8 in f6()
119 // WIN64-NEXT: store i8* %[[AP_NEXT]], i8** %[[AP]] in f6()
120 // WIN64-NEXT: bitcast i8* %[[AP_CUR]] to i32* in f6()
126 // WIN64: %[[AP_CUR2:.*]] = load i8*, i8** %[[AP]] in f6()
127 // WIN64-NEXT: %[[AP_NEXT2:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR2]], i64 16 in f6()
128 // WIN64-NEXT: store i8* %[[AP_NEXT2]], i8** %[[AP]] in f6()
129 // WIN64-NEXT: bitcast i8* %[[AP_CUR2]] to { double, double }* in f6()
135 // WIN64: %[[AP_CUR3:.*]] = load i8*, i8** %[[AP]] in f6()
136 // WIN64-NEXT: %[[AP_NEXT3:.*]] = getelementptr inbounds i8, i8* %[[AP_CUR3]], i64 16 in f6()
137 // WIN64-NEXT: store i8* %[[AP_NEXT3]], i8** %[[AP]] in f6()
138 // WIN64-NEXT: bitcast i8* %[[AP_CUR3]] to %[[STRUCT_FOO]]* in f6()
143 // WIN64: %[[AP_VAL:.*]] = load i8*, i8** %[[AP]] in f6()
144 // WIN64-NEXT: store i8* %[[AP_VAL]], i8** %[[AP2:.*]] in f6()