diff options
Diffstat (limited to 'llvm/test/Transforms/Inline/inline-varargs.ll')
| -rw-r--r-- | llvm/test/Transforms/Inline/inline-varargs.ll | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/inline-varargs.ll b/llvm/test/Transforms/Inline/inline-varargs.ll index e84db690eb4..d229ef39d59 100644 --- a/llvm/test/Transforms/Inline/inline-varargs.ll +++ b/llvm/test/Transforms/Inline/inline-varargs.ll @@ -84,6 +84,35 @@ define i32 @call_vargs() { ; CHECK: %res1 = call i32 (...) @varg_accessed(i32 10) ; CHECK-NEXT: %res2 = call i32 (...) @varg_accessed_alwaysinline(i32 15) +define void @caller_with_vastart(i8* noalias nocapture readnone %args, ...) { +entry: + %ap = alloca i8*, align 4 + %ap.ptr = bitcast i8** %ap to i8* + %ap2 = alloca i8*, align 4 + %ap2.ptr = bitcast i8** %ap to i8* + call void @llvm.va_start(i8* nonnull %ap.ptr) + call fastcc void @callee_with_vaend(i8* nonnull %ap.ptr) + call void @llvm.va_start(i8* nonnull %ap2.ptr) + call fastcc void @callee_with_vaend_alwaysinline(i8* nonnull %ap2.ptr) + ret void +} + +define internal fastcc void @callee_with_vaend_alwaysinline(i8* %a) alwaysinline { +entry: + tail call void @llvm.va_end(i8* %a) + ret void +} + +define internal fastcc void @callee_with_vaend(i8* %a) { +entry: + tail call void @llvm.va_end(i8* %a) + ret void +} + +; CHECK-LABEL: @caller_with_vastart +; CHECK-NOT: @callee_with_vaend +; CHECK-NOT: @callee_with_vaend_alwaysinline + declare void @llvm.va_start(i8*) declare void @llvm.va_end(i8*) |

