46 lines · plain
1; RUN: opt -passes=inline -S < %s | FileCheck %s2; RUN: opt -passes='cgscc(inline)' -S < %s | FileCheck %s3; RUN: opt -passes='module-inline' -S < %s | FileCheck %s4 5; PR23216: We can't inline functions using llvm.localescape.6 7declare void @llvm.localescape(...)8declare ptr @llvm.frameaddress(i32)9declare ptr @llvm.localrecover(ptr, ptr, i32)10 11define internal void @foo(ptr %fp) {12 %a.i8 = call ptr @llvm.localrecover(ptr @bar, ptr %fp, i32 0)13 store i32 42, ptr %a.i814 ret void15}16 17define internal i32 @bar() {18entry:19 %a = alloca i3220 call void (...) @llvm.localescape(ptr %a)21 %fp = call ptr @llvm.frameaddress(i32 0)22 tail call void @foo(ptr %fp)23 %r = load i32, ptr %a24 ret i32 %r25}26 27; We even bail when someone marks it alwaysinline.28define internal i32 @bar_alwaysinline() alwaysinline {29entry:30 %a = alloca i3231 call void (...) @llvm.localescape(ptr %a)32 tail call void @foo(ptr null)33 ret i32 034}35 36define i32 @bazz() {37entry:38 %r = tail call i32 @bar()39 %r1 = tail call i32 @bar_alwaysinline()40 ret i32 %r41}42 43; CHECK: define i32 @bazz()44; CHECK: call i32 @bar()45; CHECK: call i32 @bar_alwaysinline()46