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

via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 15 10:18:56 PDT 2024


Author: Tyler Nowicki
Date: 2024-10-15T13:18:52-04:00
New Revision: 867e0420c92798193c41a12aec1fdbcd2f34d913

URL: https://github.com/llvm/llvm-project/commit/867e0420c92798193c41a12aec1fdbcd2f34d913
DIFF: https://github.com/llvm/llvm-project/commit/867e0420c92798193c41a12aec1fdbcd2f34d913.diff

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

Added: 
    

Modified: 
    llvm/lib/Transforms/Coroutines/SpillUtils.cpp

Removed: 
    


################################################################################
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 
diff erent
-// 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 
diff erent 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