aboutsummaryrefslogtreecommitdiff
path: root/test/Transforms/Inline/internal-scc-members.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/Inline/internal-scc-members.ll')
-rw-r--r--test/Transforms/Inline/internal-scc-members.ll31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Transforms/Inline/internal-scc-members.ll b/test/Transforms/Inline/internal-scc-members.ll
new file mode 100644
index 000000000000..258ce00744c5
--- /dev/null
+++ b/test/Transforms/Inline/internal-scc-members.ll
@@ -0,0 +1,31 @@
+; Test that the inliner can handle deleting functions within an SCC while still
+; processing the calls in that SCC.
+;
+; RUN: opt < %s -S -inline | FileCheck %s
+; RUN: opt < %s -S -passes=inline | FileCheck %s
+
+; CHECK-LABEL: define internal void @test1_scc0()
+; CHECK-NOT: call
+; CHECK: call void @test1_scc0()
+; CHECK-NOT: call
+; CHECK: ret
+define internal void @test1_scc0() {
+entry:
+ call void @test1_scc1()
+ ret void
+}
+
+; CHECK-NOT: @test1_scc1
+define internal void @test1_scc1() {
+entry:
+ call void @test1_scc0()
+ ret void
+}
+
+; CHECK-LABEL: define void @test1()
+; CHECK: call void @test1_scc0()
+define void @test1() {
+entry:
+ call void @test1_scc0() noinline
+ ret void
+}