mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
f92e18b173
Summary: There is no functionality change here except in the way we assemble and dump musttail calls in variadic functions. There's really no need to separate out the bits for musttail and "is forwarding varargs" on call instructions. A musttail call by definition has to forward the ellipsis or it would fail verification. Reviewers: chandlerc, nlewycky Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D4892 llvm-svn: 216423
23 lines
735 B
LLVM
23 lines
735 B
LLVM
; RUN: opt < %s -inline -instcombine -S | FileCheck %s
|
|
|
|
; We can't inline this thunk yet, but one day we will be able to. And when we
|
|
; do, this test case will be ready.
|
|
|
|
declare void @ext_method(i8*, i32)
|
|
|
|
define linkonce_odr void @thunk(i8* %this, ...) {
|
|
%this_adj = getelementptr i8* %this, i32 4
|
|
musttail call void (i8*, ...)* bitcast (void (i8*, i32)* @ext_method to void (i8*, ...)*)(i8* %this_adj, ...)
|
|
ret void
|
|
}
|
|
|
|
define void @thunk_caller(i8* %p) {
|
|
call void (i8*, ...)* @thunk(i8* %p, i32 42)
|
|
ret void
|
|
}
|
|
; CHECK-LABEL: define void @thunk_caller(i8* %p)
|
|
; CHECK: call void (i8*, ...)* @thunk(i8* %p, i32 42)
|
|
|
|
; FIXME: Inline the thunk. This should be significantly easier than inlining
|
|
; general varargs functions.
|