[midend-LoopAnalysis]修复phi指令缺失的getIncomingValues方法调用
This commit is contained in:
@ -962,7 +962,13 @@ class PhiInst : public Instruction {
|
|||||||
|
|
||||||
Value* getValfromBlk(BasicBlock* block);
|
Value* getValfromBlk(BasicBlock* block);
|
||||||
BasicBlock* getBlkfromVal(Value* value);
|
BasicBlock* getBlkfromVal(Value* value);
|
||||||
|
auto getIncomingValues() const {
|
||||||
|
std::vector<std::pair<BasicBlock*, Value*>> result;
|
||||||
|
for (const auto& [block, value] : blk2val) {
|
||||||
|
result.emplace_back(block, value);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
void addIncoming(Value *value, BasicBlock *block) {
|
void addIncoming(Value *value, BasicBlock *block) {
|
||||||
assert(value && block && "PhiInst: value and block cannot be null");
|
assert(value && block && "PhiInst: value and block cannot be null");
|
||||||
addOperand(value);
|
addOperand(value);
|
||||||
|
|||||||
@ -394,7 +394,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic
|
|||||||
// 收集来自外部前驱的值 - 需要保持原始的映射关系
|
// 收集来自外部前驱的值 - 需要保持原始的映射关系
|
||||||
std::map<BasicBlock*, Value*> externalValues;
|
std::map<BasicBlock*, Value*> externalValues;
|
||||||
for (BasicBlock* oldPred : oldPreds) {
|
for (BasicBlock* oldPred : oldPreds) {
|
||||||
Value* value = phi->getvalfromBlk(oldPred);
|
Value* value = phi->getValfromBlk(oldPred);
|
||||||
if (value) {
|
if (value) {
|
||||||
externalValues[oldPred] = value;
|
externalValues[oldPred] = value;
|
||||||
}
|
}
|
||||||
@ -416,7 +416,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic
|
|||||||
|
|
||||||
// 移除所有外部前驱的条目
|
// 移除所有外部前驱的条目
|
||||||
for (BasicBlock* oldPred : oldPreds) {
|
for (BasicBlock* oldPred : oldPreds) {
|
||||||
phi->removeIncoming(oldPred);
|
phi->removeIncomingBlock(oldPred);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加来自新前置块的条目
|
// 添加来自新前置块的条目
|
||||||
@ -428,7 +428,7 @@ void LoopNormalizationPass::updatePhiNodesForPreheader(BasicBlock* header, Basic
|
|||||||
|
|
||||||
// 移除旧的外部前驱条目
|
// 移除旧的外部前驱条目
|
||||||
for (BasicBlock* oldPred : oldPreds) {
|
for (BasicBlock* oldPred : oldPreds) {
|
||||||
phi->removeIncoming(oldPred);
|
phi->removeIncomingBlock(oldPred);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加来自新前置块的条目
|
// 添加来自新前置块的条目
|
||||||
|
|||||||
Reference in New Issue
Block a user