From 8cb807c8b9d970d34e964895944409a4e5a21cba Mon Sep 17 00:00:00 2001 From: rain2133 <1370973498@qq.com> Date: Mon, 11 Aug 2025 21:20:38 +0800 Subject: [PATCH] =?UTF-8?q?[midend-LoopAnalysis]=E4=BF=AE=E5=A4=8Dphi?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E7=BC=BA=E5=A4=B1=E7=9A=84getIncomingValues?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/midend/IR.h | 8 +++++++- src/midend/Pass/Optimize/LoopNormalization.cpp | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/include/midend/IR.h b/src/include/midend/IR.h index ce14266..b71f02b 100644 --- a/src/include/midend/IR.h +++ b/src/include/midend/IR.h @@ -962,7 +962,13 @@ class PhiInst : public Instruction { Value* getValfromBlk(BasicBlock* block); BasicBlock* getBlkfromVal(Value* value); - + auto getIncomingValues() const { + std::vector> result; + for (const auto& [block, value] : blk2val) { + result.emplace_back(block, value); + } + return result; + } void addIncoming(Value *value, BasicBlock *block) { assert(value && block && "PhiInst: value and block cannot be null"); addOperand(value); diff --git a/src/midend/Pass/Optimize/LoopNormalization.cpp b/src/midend/Pass/Optimize/LoopNormalization.cpp index d101bf8..4996304 100644 --- a/src/midend/Pass/Optimize/LoopNormalization.cpp +++ b/src/midend/Pass/Optimize/LoopNormalization.cpp @@ -394,7 +394,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic // 收集来自外部前驱的值 - 需要保持原始的映射关系 std::map externalValues; for (BasicBlock* oldPred : oldPreds) { - Value* value = phi->getvalfromBlk(oldPred); + Value* value = phi->getValfromBlk(oldPred); if (value) { externalValues[oldPred] = value; } @@ -416,7 +416,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic // 移除所有外部前驱的条目 for (BasicBlock* oldPred : oldPreds) { - phi->removeIncoming(oldPred); + phi->removeIncomingBlock(oldPred); } // 添加来自新前置块的条目 @@ -428,7 +428,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic // 移除旧的外部前驱条目 for (BasicBlock* oldPred : oldPreds) { - phi->removeIncoming(oldPred); + phi->removeIncomingBlock(oldPred); } // 添加来自新前置块的条目