[PATCH] D150989: [Inliner] Mark inlinings stopped with inlining history as noinline
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 25 09:56:16 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rGaceaea67848e: [Inliner] Mark inlinings stopped with inlining history as noinline (authored by aeubanks).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D150989/new/
https://reviews.llvm.org/D150989
Files:
llvm/lib/Transforms/IPO/Inliner.cpp
llvm/test/Transforms/Inline/inline-history-noinline.ll
Index: llvm/test/Transforms/Inline/inline-history-noinline.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/Inline/inline-history-noinline.ll
@@ -0,0 +1,32 @@
+; 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 }
Index: llvm/lib/Transforms/IPO/Inliner.cpp
===================================================================
--- llvm/lib/Transforms/IPO/Inliner.cpp
+++ llvm/lib/Transforms/IPO/Inliner.cpp
@@ -333,6 +333,9 @@
LLVM_DEBUG(dbgs() << "Skipping inlining due to history: " << F.getName()
<< " -> " << Callee.getName() << "\n");
setInlineRemark(*CB, "recursive");
+ // Set noinline so that we don't forget this decision across CGSCC
+ // iterations.
+ CB->setIsNoInline();
continue;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150989.525681.patch
Type: text/x-patch
Size: 1656 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230525/efa795fb/attachment.bin>
More information about the llvm-commits
mailing list