; 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 }