From ce4d4b5f5b9035639bb75442864be858cbde6233 Mon Sep 17 00:00:00 2001 From: rain2133 <1370973498@qq.com> Date: Tue, 19 Aug 2025 01:08:05 +0800 Subject: [PATCH] =?UTF-8?q?[midend-phielimination]=E5=A2=9E=E5=8A=A0phi?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E6=B6=88=E9=99=A4=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../midend/Pass/Optimize/SysYIROptUtils.h | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/include/midend/Pass/Optimize/SysYIROptUtils.h b/src/include/midend/Pass/Optimize/SysYIROptUtils.h index 48d2f26..71c0532 100644 --- a/src/include/midend/Pass/Optimize/SysYIROptUtils.h +++ b/src/include/midend/Pass/Optimize/SysYIROptUtils.h @@ -109,6 +109,28 @@ public: } + // PHI指令消除相关方法 + static void eliminateRedundantPhisInFunction(Function* func){ + std::vector toDelete; + for (auto &bb : func->getBasicBlocks()) { + for (auto &inst : bb->getInstructions()) { + if (auto phi = dynamic_cast(inst.get())) { + auto incoming = phi->getIncomingValues(); + if (incoming.size() == 1) { + Value *singleVal = incoming[0].first; + inst->replaceAllUsesWith(singleVal); + toDelete.push_back(inst.get()); + } + } + else + break; // 只处理Phi指令 + } + } + for (auto *phi : toDelete) { + usedelete(phi); + } + } + //该实现参考了libdivide的算法 static std::pair computeMulhMagicNumbers(int divisor) {