diff options
Diffstat (limited to 'llvm/test/Transforms/Inline/frameescape.ll')
-rw-r--r-- | llvm/test/Transforms/Inline/frameescape.ll | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/llvm/test/Transforms/Inline/frameescape.ll b/llvm/test/Transforms/Inline/frameescape.ll deleted file mode 100644 index f2d4245cdd6..00000000000 --- a/llvm/test/Transforms/Inline/frameescape.ll +++ /dev/null @@ -1,45 +0,0 @@ -; RUN: opt -inline -S < %s | FileCheck %s -; RUN: opt -passes='cgscc(inline)' -S < %s | FileCheck %s - -; PR23216: We can't inline functions using llvm.localescape. - -declare void @llvm.localescape(...) -declare i8* @llvm.frameaddress(i32) -declare i8* @llvm.localrecover(i8*, i8*, i32) - -define internal void @foo(i8* %fp) { - %a.i8 = call i8* @llvm.localrecover(i8* bitcast (i32 ()* @bar to i8*), i8* %fp, i32 0) - %a = bitcast i8* %a.i8 to i32* - store i32 42, i32* %a - ret void -} - -define internal i32 @bar() { -entry: - %a = alloca i32 - call void (...) @llvm.localescape(i32* %a) - %fp = call i8* @llvm.frameaddress(i32 0) - tail call void @foo(i8* %fp) - %r = load i32, i32* %a - ret i32 %r -} - -; We even bail when someone marks it alwaysinline. -define internal i32 @bar_alwaysinline() alwaysinline { -entry: - %a = alloca i32 - call void (...) @llvm.localescape(i32* %a) - tail call void @foo(i8* null) - ret i32 0 -} - -define i32 @bazz() { -entry: - %r = tail call i32 @bar() - %r1 = tail call i32 @bar_alwaysinline() - ret i32 %r -} - -; CHECK: define i32 @bazz() -; CHECK: call i32 @bar() -; CHECK: call i32 @bar_alwaysinline() |