32 lines
840 B
LLVM
32 lines
840 B
LLVM
; RUN: opt -passes=inline -S < %s | FileCheck %s
|
|
|
|
; This will inline @f1 into @a, causing two new calls to @f2, which will get inlined for two calls to @f1.
|
|
; The inline history should stop recursive inlining here, and make sure to mark the inlined calls as noinline so we don't repeat the inlining later on when @a gets inlined into @b.
|
|
|
|
define internal void @f1(ptr %p) {
|
|
call void %p(ptr @f1)
|
|
ret void
|
|
}
|
|
|
|
define internal void @f2(ptr %p) {
|
|
call void %p(ptr @f2)
|
|
call void %p(ptr @f2)
|
|
ret void
|
|
}
|
|
|
|
define void @b() {
|
|
; CHECK-LABEL: define void @b() {
|
|
; CHECK-NEXT: call void @f1(ptr @f2) #[[NOINLINE:[0-9]+]]
|
|
; CHECK-NEXT: call void @f1(ptr @f2) #[[NOINLINE]]
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
call void @a()
|
|
ret void
|
|
}
|
|
|
|
define internal void @a() {
|
|
call void @f1(ptr @f2)
|
|
ret void
|
|
}
|
|
|
|
; CHECK: [[NOINLINE]] = { noinline }
|