[llvm] [Coroutines] Inline the `.noalloc` ramp function marked coro_safe_elide (PR #114004)

via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 28 22:35:53 PDT 2024


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff d3b98559be72682da45df73522173cb315912f6f 15eb5af3d4e764a8d35186169392eea2b8f594d6 --extensions cpp,h -- llvm/include/llvm/Transforms/Coroutines/CoroAnnotationElide.h llvm/lib/Passes/PassBuilderPipelines.cpp llvm/lib/Transforms/Coroutines/CoroAnnotationElide.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/llvm/lib/Transforms/Coroutines/CoroAnnotationElide.cpp b/llvm/lib/Transforms/Coroutines/CoroAnnotationElide.cpp
index 9e22d96387..0a52af0416 100644
--- a/llvm/lib/Transforms/Coroutines/CoroAnnotationElide.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroAnnotationElide.cpp
@@ -44,10 +44,10 @@ static Instruction *getFirstNonAllocaInTheEntryBlock(Function *F) {
 // Create an alloca in the caller, using FrameSize and FrameAlign as the callee
 // coroutine's activation frame.
 static Value *allocateFrameInCaller(Function *Caller, uint64_t FrameSize,
-    Align FrameAlign) {
+                                    Align FrameAlign) {
   LLVMContext &C = Caller->getContext();
   BasicBlock::iterator InsertPt =
-    getFirstNonAllocaInTheEntryBlock(Caller)->getIterator();
+      getFirstNonAllocaInTheEntryBlock(Caller)->getIterator();
   const DataLayout &DL = Caller->getDataLayout();
   auto FrameTy = ArrayType::get(Type::getInt8Ty(C), FrameSize);
   auto *Frame = new AllocaInst(FrameTy, DL.getAllocaAddrSpace(), "", InsertPt);
@@ -61,7 +61,7 @@ static Value *allocateFrameInCaller(Function *Caller, uint64_t FrameSize,
 //  - Replace the old CB with a new Call or Invoke to `NewCallee`, with the
 //    pointer to the frame as an additional argument to NewCallee.
 static void processCall(CallBase *CB, Function *Caller, Function *NewCallee,
-    uint64_t FrameSize, Align FrameAlign) {
+                        uint64_t FrameSize, Align FrameAlign) {
   // TODO: generate the lifetime intrinsics for the new frame. This will require
   // introduction of two pesudo lifetime intrinsics in the frontend around the
   // `co_await` expression and convert them to real lifetime intrinsics here.
@@ -74,13 +74,13 @@ static void processCall(CallBase *CB, Function *Caller, Function *NewCallee,
 
   if (auto *CI = dyn_cast<CallInst>(CB)) {
     auto *NewCI = CallInst::Create(NewCallee->getFunctionType(), NewCallee,
-        NewArgs, "", NewCBInsertPt);
+                                   NewArgs, "", NewCBInsertPt);
     NewCI->setTailCallKind(CI->getTailCallKind());
     NewCB = NewCI;
   } else if (auto *II = dyn_cast<InvokeInst>(CB)) {
     NewCB = InvokeInst::Create(NewCallee->getFunctionType(), NewCallee,
-        II->getNormalDest(), II->getUnwindDest(),
-        NewArgs, {}, "", NewCBInsertPt);
+                               II->getNormalDest(), II->getUnwindDest(),
+                               NewArgs, {}, "", NewCBInsertPt);
   } else {
     llvm_unreachable("CallBase should either be Call or Invoke!");
   }
@@ -90,7 +90,7 @@ static void processCall(CallBase *CB, Function *Caller, Function *NewCallee,
   NewCB->setAttributes(CB->getAttributes());
   NewCB->setDebugLoc(CB->getDebugLoc());
   std::copy(CB->bundle_op_info_begin(), CB->bundle_op_info_end(),
-      NewCB->bundle_op_info_begin());
+            NewCB->bundle_op_info_begin());
 
   NewCB->removeFnAttr(llvm::Attribute::CoroElideSafe);
   CB->replaceAllUsesWith(NewCB);
@@ -106,15 +106,15 @@ static void processCall(CallBase *CB, Function *Caller, Function *NewCallee,
 }
 
 PreservedAnalyses CoroAnnotationElidePass::run(LazyCallGraph::SCC &C,
-    CGSCCAnalysisManager &AM,
-    LazyCallGraph &CG,
-    CGSCCUpdateResult &UR) {
+                                               CGSCCAnalysisManager &AM,
+                                               LazyCallGraph &CG,
+                                               CGSCCUpdateResult &UR) {
   bool Changed = false;
   CallGraphUpdater CGUpdater;
   CGUpdater.initialize(CG, C, AM, UR);
 
   auto &FAM =
-    AM.getResult<FunctionAnalysisManagerCGSCCProxy>(C, CG).getManager();
+      AM.getResult<FunctionAnalysisManagerCGSCCProxy>(C, CG).getManager();
 
   for (LazyCallGraph::Node &N : C) {
     Function *Callee = &N.getFunction();
@@ -131,8 +131,10 @@ PreservedAnalyses CoroAnnotationElidePass::run(LazyCallGraph::SCC &C,
       }
     }
     auto FramePtrArgPosition = NewCallee->arg_size() - 1;
-    auto FrameSize = NewCallee->getParamDereferenceableBytes(FramePtrArgPosition);
-    auto FrameAlign = NewCallee->getParamAlign(FramePtrArgPosition).valueOrOne();
+    auto FrameSize =
+        NewCallee->getParamDereferenceableBytes(FramePtrArgPosition);
+    auto FrameAlign =
+        NewCallee->getParamAlign(FramePtrArgPosition).valueOrOne();
 
     auto &ORE = FAM.getResult<OptimizationRemarkEmitterAnalysis>(*Callee);
 
@@ -149,26 +151,28 @@ PreservedAnalyses CoroAnnotationElidePass::run(LazyCallGraph::SCC &C,
         processCall(CB, Caller, NewCallee, FrameSize, FrameAlign);
 
         ORE.emit([&]() {
-            return OptimizationRemark(DEBUG_TYPE, "CoroAnnotationElide", Caller)
-            << "'" << ore::NV("callee", Callee->getName()) << "' elided in '"
-            << ore::NV("caller", Caller->getName()) << "'";
-            });
+          return OptimizationRemark(DEBUG_TYPE, "CoroAnnotationElide", Caller)
+                 << "'" << ore::NV("callee", Callee->getName())
+                 << "' elided in '" << ore::NV("caller", Caller->getName())
+                 << "'";
+        });
 
         FAM.invalidate(*Caller, PreservedAnalyses::none());
         Changed = true;
         updateCGAndAnalysisManagerForCGSCCPass(CG, *CallerC, *CallerN, AM, UR,
-            FAM);
+                                               FAM);
 
       } else {
         ORE.emit([&]() {
-            return OptimizationRemarkMissed(DEBUG_TYPE, "CoroAnnotationElide",
-                Caller)
-            << "'" << ore::NV("callee", Callee->getName()) << "' not elided in '"
-            << ore::NV("caller", Caller->getName()) << "' (caller_presplit="
-            << ore::NV("caller_presplit", IsCallerPresplitCoroutine)
-            << ", elide_safe_attr=" << ore::NV("elide_safe_attr", HasAttr)
-            << ")";
-            });
+          return OptimizationRemarkMissed(DEBUG_TYPE, "CoroAnnotationElide",
+                                          Caller)
+                 << "'" << ore::NV("callee", Callee->getName())
+                 << "' not elided in '" << ore::NV("caller", Caller->getName())
+                 << "' (caller_presplit="
+                 << ore::NV("caller_presplit", IsCallerPresplitCoroutine)
+                 << ", elide_safe_attr=" << ore::NV("elide_safe_attr", HasAttr)
+                 << ")";
+        });
       }
     }
   }

``````````

</details>


https://github.com/llvm/llvm-project/pull/114004


More information about the llvm-commits mailing list