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