Index: test/Transforms/NaCl/expand-varargs-struct.ll |
diff --git a/test/Transforms/NaCl/expand-varargs-struct.ll b/test/Transforms/NaCl/expand-varargs-struct.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b96b41875c3a8e82d20fc279db7d2666e295bf6d |
--- /dev/null |
+++ b/test/Transforms/NaCl/expand-varargs-struct.ll |
@@ -0,0 +1,17 @@ |
+; RUN: opt < %s -expand-varargs -S | FileCheck %s |
+ |
+declare i32 @varargs_func(i32 %arg, ...) |
+ |
+ |
+%MyStruct = type { i64, i64 } |
+ |
+; Test passing a struct by value. |
+define i32 @varargs_call_struct(%MyStruct* %ptr) { |
+ %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, %MyStruct* byval %ptr) |
+ ret i32 %result |
+} |
+; CHECK: define i32 @varargs_call_struct(%MyStruct* %ptr) { |
+; CHECK: %vararg_ptr1 = getelementptr <{ i64, %MyStruct }>* %vararg_buffer, i32 0, i32 1 |
+; CHECK: %1 = bitcast %MyStruct* %vararg_ptr1 to i8* |
+; CHECK: %2 = bitcast %MyStruct* %ptr to i8* |
+; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 1, i1 false) |