[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