| 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 |