[llvm] 4c59f80 - Coroutines: Cleanup typed pointer code in CoroFrame.cpp. NFC
Ruiling Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 24 20:31:06 PDT 2023
Author: Ruiling Song
Date: 2023-09-25T11:30:14+08:00
New Revision: 4c59f809c926567195da4030fd3f8d5b0f4db79f
URL: https://github.com/llvm/llvm-project/commit/4c59f809c926567195da4030fd3f8d5b0f4db79f
DIFF: https://github.com/llvm/llvm-project/commit/4c59f809c926567195da4030fd3f8d5b0f4db79f.diff
LOG: Coroutines: Cleanup typed pointer code in CoroFrame.cpp. NFC
Added:
Modified:
llvm/lib/Transforms/Coroutines/CoroFrame.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
index 1de702c47fb0735..4a289c0ef2bc195 100644
--- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp
@@ -1682,15 +1682,6 @@ static Instruction *splitBeforeCatchSwitch(CatchSwitchInst *CatchSwitch) {
return CleanupRet;
}
-static void createFramePtr(coro::Shape &Shape) {
- auto *CB = Shape.CoroBegin;
- IRBuilder<> Builder(CB->getNextNode());
- StructType *FrameTy = Shape.FrameTy;
- PointerType *FramePtrTy = FrameTy->getPointerTo();
- Shape.FramePtr =
- cast<Instruction>(Builder.CreateBitCast(CB, FramePtrTy, "FramePtr"));
-}
-
// Replace all alloca and SSA values that are accessed across suspend points
// with GetElementPointer from coroutine frame + loads and stores. Create an
// AllocaSpillBB that will become the new entry block for the resume parts of
@@ -1702,7 +1693,6 @@ static void createFramePtr(coro::Shape &Shape) {
// becomes:
//
// %hdl = coro.begin(...)
-// %FramePtr = bitcast i8* hdl to %f.frame*
// br label %AllocaSpillBB
//
// AllocaSpillBB:
@@ -1781,8 +1771,7 @@ static void insertSpills(const FrameDataInfo &FrameData, coro::Shape &Shape) {
Type *ByValTy = nullptr;
if (auto *Arg = dyn_cast<Argument>(Def)) {
// For arguments, we will place the store instruction right after
- // the coroutine frame pointer instruction, i.e. bitcast of
- // coro.begin from i8* to %f.frame*.
+ // the coroutine frame pointer instruction, i.e. coro.begin.
InsertPt = Shape.getInsertPtAfterFramePtr()->getIterator();
// If we're spilling an Argument, make sure we clear 'nocapture'
@@ -1987,16 +1976,12 @@ static void insertSpills(const FrameDataInfo &FrameData, coro::Shape &Shape) {
// to the pointer in the frame.
for (const auto &Alias : A.Aliases) {
auto *FramePtr = GetFramePointer(Alloca);
- auto *FramePtrRaw =
- Builder.CreateBitCast(FramePtr, Type::getInt8PtrTy(C));
auto &Value = *Alias.second;
auto ITy = IntegerType::get(C, Value.getBitWidth());
- auto *AliasPtr = Builder.CreateGEP(Type::getInt8Ty(C), FramePtrRaw,
+ auto *AliasPtr = Builder.CreateGEP(Type::getInt8Ty(C), FramePtr,
ConstantInt::get(ITy, Value));
- auto *AliasPtrTyped =
- Builder.CreateBitCast(AliasPtr, Alias.first->getType());
Alias.first->replaceUsesWithIf(
- AliasPtrTyped, [&](Use &U) { return DT.dominates(CB, U); });
+ AliasPtr, [&](Use &U) { return DT.dominates(CB, U); });
}
}
@@ -2769,17 +2754,8 @@ static void sinkLifetimeStartMarkers(Function &F, coro::Shape &Shape,
// Sink lifetime.start markers to dominate block when they are
// only used outside the region.
if (Valid && Lifetimes.size() != 0) {
- // May be AI itself, when the type of AI is i8*
- auto *NewBitCast = [&](AllocaInst *AI) -> Value* {
- if (isa<AllocaInst>(Lifetimes[0]->getOperand(1)))
- return AI;
- auto *Int8PtrTy = Type::getInt8PtrTy(F.getContext());
- return CastInst::Create(Instruction::BitCast, AI, Int8PtrTy, "",
- DomBB->getTerminator());
- }(AI);
-
auto *NewLifetime = Lifetimes[0]->clone();
- NewLifetime->replaceUsesOfWith(NewLifetime->getOperand(1), NewBitCast);
+ NewLifetime->replaceUsesOfWith(NewLifetime->getOperand(1), AI);
NewLifetime->insertBefore(DomBB->getTerminator());
// All the outsided lifetime.start markers are no longer necessary.
@@ -3121,7 +3097,7 @@ void coro::buildCoroutineFrame(
Shape.ABI == coro::ABI::Async)
sinkSpillUsesAfterCoroBegin(F, FrameData, Shape.CoroBegin);
Shape.FrameTy = buildFrameType(F, Shape, FrameData);
- createFramePtr(Shape);
+ Shape.FramePtr = Shape.CoroBegin;
// For now, this works for C++ programs only.
buildFrameDebugInfo(F, Shape, FrameData);
insertSpills(FrameData, Shape);
More information about the llvm-commits
mailing list