OLD | NEW |
1 ; RUN: opt < %s -expand-varargs -S | FileCheck %s | 1 ; RUN: opt < %s -expand-varargs -S | FileCheck %s |
2 | 2 |
3 declare i32 @varargs_func(i32 %arg, ...) | 3 declare i32 @varargs_func(i32 %arg, ...) |
4 | 4 |
5 | 5 |
6 %MyStruct = type { i64, i64 } | 6 %MyStruct = type { i64, i64 } |
7 | 7 |
8 ; CHECK: %vararg_call = type <{ i64, %MyStruct }> | |
9 | |
10 ; Test passing a struct by value. | 8 ; Test passing a struct by value. |
11 define i32 @varargs_call_struct(%MyStruct* %ptr) { | 9 define i32 @varargs_call_struct(%MyStruct* %ptr) { |
12 %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, %MyStruct* byva
l %ptr) | 10 %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, %MyStruct* byva
l %ptr) |
13 ret i32 %result | 11 ret i32 %result |
14 } | 12 } |
15 ; CHECK: define i32 @varargs_call_struct(%MyStruct* %ptr) { | 13 ; CHECK: define i32 @varargs_call_struct(%MyStruct* %ptr) { |
16 ; CHECK: %vararg_struct_copy = load %MyStruct* %ptr | 14 ; CHECK: %vararg_struct_copy = load %MyStruct* %ptr |
17 ; CHECK: %vararg_ptr1 = getelementptr %vararg_call* %vararg_buffer, i32 0, i32 1 | 15 ; CHECK: %vararg_ptr1 = getelementptr <{ i64, %MyStruct }>* %vararg_buffer, i32
0, i32 1 |
18 ; CHECK: store %MyStruct %vararg_struct_copy, %MyStruct* %vararg_ptr1 | 16 ; CHECK: store %MyStruct %vararg_struct_copy, %MyStruct* %vararg_ptr1 |
OLD | NEW |