@@ -8,15 +8,6 @@ declare void @llvm.va_copy(i8*, i8*)
8
8
9
9
declare i32 @outside_func (i32 %arg , %va_list* %args )
10
10
11
-
12
- ; Produced by the expansion of @varargs_call1():
13
- ; CHECK: %vararg_call = type <{ i64, i32 }>
14
-
15
- ; Produced by the expansion of @call_with_zero_varargs().
16
- ; We have a dummy field to deal with buggy programs:
17
- ; CHECK: %vararg_call.0 = type <{ i32 }>
18
-
19
-
20
11
define i32 @varargs_func (i32 %arg , ...) {
21
12
%arglist_alloc = alloca %va_list
22
13
%arglist = bitcast %va_list* %arglist_alloc to i8*
@@ -40,15 +31,15 @@ define i32 @varargs_call1() {
40
31
ret i32 %result
41
32
}
42
33
; CHECK: define i32 @varargs_call1() {
43
- ; CHECK-NEXT: %vararg_buffer = alloca %vararg_call
44
- ; CHECK-NEXT: %vararg_lifetime_bitcast = bitcast %vararg_call * %vararg_buffer to i8*
34
+ ; CHECK-NEXT: %vararg_buffer = alloca <{ i64, i32 }>
35
+ ; CHECK-NEXT: %vararg_lifetime_bitcast = bitcast <{ i64, i32 }> * %vararg_buffer to i8*
45
36
; CHECK-NEXT: call void @llvm.lifetime.start(i64 12, i8* %vararg_lifetime_bitcast)
46
- ; CHECK-NEXT: %vararg_ptr = getelementptr %vararg_call * %vararg_buffer, i32 0, i32 0
37
+ ; CHECK-NEXT: %vararg_ptr = getelementptr <{ i64, i32 }> * %vararg_buffer, i32 0, i32 0
47
38
; CHECK-NEXT: store i64 222, i64* %vararg_ptr
48
- ; CHECK-NEXT: %vararg_ptr1 = getelementptr %vararg_call * %vararg_buffer, i32 0, i32 1
39
+ ; CHECK-NEXT: %vararg_ptr1 = getelementptr <{ i64, i32 }> * %vararg_buffer, i32 0, i32 1
49
40
; CHECK-NEXT: store i32 333, i32* %vararg_ptr1
50
- ; CHECK-NEXT: %vararg_func = bitcast i32 (i32, ...)* bitcast (i32 (i32, i8*)* @varargs_func to i32 (i32, ...)*) to i32 (i32, %vararg_call *)*
51
- ; CHECK-NEXT: %result = call i32 %vararg_func(i32 111, %vararg_call * %vararg_buffer)
41
+ ; CHECK-NEXT: %vararg_func = bitcast i32 (i32, ...)* bitcast (i32 (i32, i8*)* @varargs_func to i32 (i32, ...)*) to i32 (i32, <{ i64, i32 }> *)*
42
+ ; CHECK-NEXT: %result = call i32 %vararg_func(i32 111, <{ i64, i32 }> * %vararg_buffer)
52
43
; CHECK-NEXT: call void @llvm.lifetime.end(i64 12, i8* %vararg_lifetime_bitcast)
53
44
; CHECK-NEXT: ret i32 %result
54
45
@@ -59,9 +50,10 @@ define i32 @call_with_zero_varargs() {
59
50
ret i32 %result
60
51
}
61
52
; CHECK: define i32 @call_with_zero_varargs() {
62
- ; CHECK-NEXT: %vararg_buffer = alloca %vararg_call.0
63
- ; CHECK: %vararg_func = bitcast i32 (i32, ...)* bitcast (i32 (i32, i8*)* @varargs_func to i32 (i32, ...)*) to i32 (i32, %vararg_call.0*)*
64
- ; CHECK-NEXT: %result = call i32 %vararg_func(i32 111, %vararg_call.0* %vararg_buffer)
53
+ ; We have a dummy i32 field to deal with buggy programs:
54
+ ; CHECK-NEXT: %vararg_buffer = alloca <{ i32 }>
55
+ ; CHECK: %vararg_func = bitcast i32 (i32, ...)* bitcast (i32 (i32, i8*)* @varargs_func to i32 (i32, ...)*) to i32 (i32, <{ i32 }>*)*
56
+ ; CHECK-NEXT: %result = call i32 %vararg_func(i32 111, <{ i32 }>* %vararg_buffer)
65
57
66
58
67
59
; Check that "invoke" instructions are expanded out too.
75
67
ret i32 0
76
68
}
77
69
; CHECK: @varargs_invoke
78
- ; CHECK: %result = invoke i32 %vararg_func(i32 111, %vararg_call.1 * %vararg_buffer)
70
+ ; CHECK: %result = invoke i32 %vararg_func(i32 111, <{ i64 }> * %vararg_buffer)
79
71
; CHECK-NEXT: to label %cont unwind label %lpad
80
72
; CHECK: cont:
81
73
; CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* %vararg_lifetime_bitcast)
@@ -90,10 +82,10 @@ define void @varargs_multiple_calls() {
90
82
}
91
83
; CHECK: @varargs_multiple_calls()
92
84
; The added allocas should appear at the start of the function.
93
- ; CHECK: %vararg_buffer{{.*}} = alloca %vararg_call{{.*}}
94
- ; CHECK: %vararg_buffer{{.*}} = alloca %vararg_call{{.*}}
95
- ; CHECK: %call1 = call i32 %vararg_func{{.*}}(i32 11, %vararg_call{{.*}} * %vararg_buffer{{.*}})
96
- ; CHECK: %call2 = call i32 %vararg_func{{.*}}(i32 44, %vararg_call{{.*}} * %vararg_buffer{{.*}})
85
+ ; CHECK: %vararg_buffer{{.*}} = alloca <{ i64, i32 }>
86
+ ; CHECK: %vararg_buffer{{.*}} = alloca <{ i64, i32 }>
87
+ ; CHECK: %call1 = call i32 %vararg_func{{.*}}(i32 11, <{ i64, i32 }> * %vararg_buffer{{.*}})
88
+ ; CHECK: %call2 = call i32 %vararg_func{{.*}}(i32 44, <{ i64, i32 }> * %vararg_buffer{{.*}})
97
89
98
90
99
91
define i32 @va_arg_i32 (i8* %arglist ) {
0 commit comments