diff options
| author | Sameer AbuAsal <sabuasal@codeaurora.org> | 2018-09-20 18:39:34 +0000 | 
|---|---|---|
| committer | Sameer AbuAsal <sabuasal@codeaurora.org> | 2018-09-20 18:39:34 +0000 | 
| commit | 77beee413648b117491eb9bd184ba99daee95667 (patch) | |
| tree | a5ddb7d47618d2fbef51981c07ab066a059c0fa4 /llvm/test/Transforms/Inline/inline-varargs.ll | |
| parent | 392bf6af0fb951ee79d5af96f18aa47ba0bc4169 (diff) | |
| download | bcm5719-llvm-77beee413648b117491eb9bd184ba99daee95667.tar.gz bcm5719-llvm-77beee413648b117491eb9bd184ba99daee95667.zip | |
[inline Cost] Don't mark functions accessing varargs as non-inlinable
Summary:
rL323619 marks functions that are calling va_end as not viable for
inlining. This patch reverses that since this va_end doesn't need
access to the vriadic arguments list that are saved on the stack, only
va_start does.
Reviewers: efriedma, fhahn
Reviewed By: fhahn
Subscribers: eraman, haicheng, llvm-commits
Differential Revision: https://reviews.llvm.org/D52067
llvm-svn: 342675
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*) | 

