diff options
Diffstat (limited to 'test/Transforms/Inline/inline-musttail-varargs.ll')
-rw-r--r-- | test/Transforms/Inline/inline-musttail-varargs.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/Transforms/Inline/inline-musttail-varargs.ll b/test/Transforms/Inline/inline-musttail-varargs.ll new file mode 100644 index 0000000..7a89574 --- /dev/null +++ b/test/Transforms/Inline/inline-musttail-varargs.ll @@ -0,0 +1,22 @@ +; 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. |