[llvm] [Coroutines] Improved formatting of the SpillUtils comment on ptr tracking (PR #112376)

Tyler Nowicki via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 15 08:15:26 PDT 2024


https://github.com/TylerNowicki created https://github.com/llvm/llvm-project/pull/112376

None

>From a1d11afba6831f40f5ed240914fa668e940a6503 Mon Sep 17 00:00:00 2001
From: tnowicki <tnowicki.nowicki at amd.com>
Date: Fri, 27 Sep 2024 17:40:15 -0400
Subject: [PATCH] [Coroutines] Improved comment formatting.

---
 llvm/lib/Transforms/Coroutines/SpillUtils.cpp | 38 +++++++++++--------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/llvm/lib/Transforms/Coroutines/SpillUtils.cpp b/llvm/lib/Transforms/Coroutines/SpillUtils.cpp
index e8609af992122c..58e83ea83d5211 100644
--- a/llvm/lib/Transforms/Coroutines/SpillUtils.cpp
+++ b/llvm/lib/Transforms/Coroutines/SpillUtils.cpp
@@ -118,29 +118,35 @@ static Instruction *splitBeforeCatchSwitch(CatchSwitchInst *CatchSwitch) {
 
 // We use a pointer use visitor to track how an alloca is being used.
 // The goal is to be able to answer the following three questions:
-// 1. Should this alloca be allocated on the frame instead.
-// 2. Could the content of the alloca be modified prior to CoroBegn, which would
-// require copying the data from alloca to the frame after CoroBegin.
-// 3. Is there any alias created for this alloca prior to CoroBegin, but used
-// after CoroBegin. In that case, we will need to recreate the alias after
-// CoroBegin based off the frame. To answer question 1, we track two things:
-//   a. List of all BasicBlocks that use this alloca or any of the aliases of
+//   1. Should this alloca be allocated on the frame instead.
+//   2. Could the content of the alloca be modified prior to CoroBegin, which
+//      would require copying the data from the alloca to the frame after
+//      CoroBegin.
+//   3. Are there any aliases created for this alloca prior to CoroBegin, but
+//      used after CoroBegin. In that case, we will need to recreate the alias
+//      after CoroBegin based off the frame.
+//
+// To answer question 1, we track two things:
+//   A. List of all BasicBlocks that use this alloca or any of the aliases of
 //   the alloca. In the end, we check if there exists any two basic blocks that
-//   cross suspension points. If so, this alloca must be put on the frame. b.
-//   Whether the alloca or any alias of the alloca is escaped at some point,
+//   cross suspension points. If so, this alloca must be put on the frame.
+//   B. Whether the alloca or any alias of the alloca is escaped at some point,
 //   either by storing the address somewhere, or the address is used in a
 //   function call that might capture. If it's ever escaped, this alloca must be
 //   put on the frame conservatively.
+//
 // To answer quetion 2, we track through the variable MayWriteBeforeCoroBegin.
 // Whenever a potential write happens, either through a store instruction, a
 // function call or any of the memory intrinsics, we check whether this
-// instruction is prior to CoroBegin. To answer question 3, we track the offsets
-// of all aliases created for the alloca prior to CoroBegin but used after
-// CoroBegin. std::optional is used to be able to represent the case when the
-// offset is unknown (e.g. when you have a PHINode that takes in different
-// offset values). We cannot handle unknown offsets and will assert. This is the
-// potential issue left out. An ideal solution would likely require a
-// significant redesign.
+// instruction is prior to CoroBegin.
+//
+// To answer question 3, we track the offsets of all aliases created for the
+// alloca prior to CoroBegin but used after CoroBegin. std::optional is used to
+// be able to represent the case when the offset is unknown (e.g. when you have
+// a PHINode that takes in different offset values). We cannot handle unknown
+// offsets and will assert. This is the potential issue left out. An ideal
+// solution would likely require a significant redesign.
+
 namespace {
 struct AllocaUseVisitor : PtrUseVisitor<AllocaUseVisitor> {
   using Base = PtrUseVisitor<AllocaUseVisitor>;



More information about the llvm-commits mailing list