[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