[midend-phielimination]消除只有一个incomingvalue的phi指令

This commit is contained in:
rain2133
2025-08-19 08:27:18 +08:00
parent ce4d4b5f5b
commit db122cabbd
5 changed files with 13 additions and 6 deletions

View File

@@ -110,14 +110,18 @@ public:
// PHI指令消除相关方法
static void eliminateRedundantPhisInFunction(Function* func){
static bool eliminateRedundantPhisInFunction(Function* func){
bool changed = false;
std::vector<Instruction *> toDelete;
for (auto &bb : func->getBasicBlocks()) {
for (auto &inst : bb->getInstructions()) {
if (auto phi = dynamic_cast<PhiInst *>(inst.get())) {
auto incoming = phi->getIncomingValues();
if(DEBUG){
std::cout << "Checking Phi: " << phi->getName() << " with " << incoming.size() << " incoming values." << std::endl;
}
if (incoming.size() == 1) {
Value *singleVal = incoming[0].first;
Value *singleVal = incoming[0].second;
inst->replaceAllUsesWith(singleVal);
toDelete.push_back(inst.get());
}
@@ -128,7 +132,9 @@ public:
}
for (auto *phi : toDelete) {
usedelete(phi);
changed = true; // 标记为已更改
}
return changed; // 返回是否有删除发生
}
//该实现参考了libdivide的算法