mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-09 21:50:50 +00:00
919b2376dc
most of the inliner test cases. The inliner involves a bunch of interesting code and tends to be where most of the issues I've seen experimenting with the new PM lie. All of these test cases pass, but I'd like to keep some more thorough coverage here so doing a fairly blanket enabling. There are a handful of interesting tests I've not enabled yet because they're focused on the always inliner, or on functionality that doesn't (yet) exist in the inliner. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290592 91177308-0d34-0410-b5e6-96231b3b80d8
24 lines
816 B
LLVM
24 lines
816 B
LLVM
; RUN: opt < %s -inline -instcombine -S | FileCheck %s
|
|
; RUN: opt < %s -passes='cgscc(inline,function(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, 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.
|