修复分析器逻辑,保证优化遍共享一个分析器(主要是在mem2reg)

This commit is contained in:
rain2133
2025-06-25 15:30:28 +08:00
parent 1e06c5a446
commit b12732f10d
2 changed files with 6 additions and 6 deletions

View File

@@ -745,11 +745,10 @@ auto Mem2Reg::renameAll() -> void {
*/ */
auto Mem2Reg::mem2regPipeline() -> void { auto Mem2Reg::mem2regPipeline() -> void {
// 首先进行mem2reg的前置分析 // 首先进行mem2reg的前置分析
controlFlowAnalysis = new ControlFlowAnalysis(pModule); controlFlowAnalysis->clear();
activeVarAnalysis = new ActiveVarAnalysis();
// 控制流分析
controlFlowAnalysis->runControlFlowAnalysis(); controlFlowAnalysis->runControlFlowAnalysis();
// 活跃变量分析 // 活跃变量分析
activeVarAnalysis->clear();
dataFlowAnalysisUtils.addBackwardAnalyzer(activeVarAnalysis); dataFlowAnalysisUtils.addBackwardAnalyzer(activeVarAnalysis);
dataFlowAnalysisUtils.backwardAnalyze(pModule); dataFlowAnalysisUtils.backwardAnalyze(pModule);

View File

@@ -17,13 +17,14 @@ class Mem2Reg {
private: private:
Module *pModule; Module *pModule;
IRBuilder *pBuilder; IRBuilder *pBuilder;
ActiveVarAnalysis *activeVarAnalysis; // 活跃变量分析
ControlFlowAnalysis *controlFlowAnalysis; // 控制流分析 ControlFlowAnalysis *controlFlowAnalysis; // 控制流分析
ActiveVarAnalysis *activeVarAnalysis; // 活跃变量分析
DataFlowAnalysisUtils dataFlowAnalysisUtils; DataFlowAnalysisUtils dataFlowAnalysisUtils;
public: public:
Mem2Reg(Module *pMoudle, IRBuilder *pBuilder) : Mem2Reg(Module *pMoudle, IRBuilder *pBuilder,
pModule(pMoudle), pBuilder(pBuilder), activeVarAnalysis(nullptr), controlFlowAnalysis(nullptr), dataFlowAnalysisUtils() ControlFlowAnalysis *pCFA = nullptr, ActiveVarAnalysis *pAVA = nullptr) :
pModule(pMoudle), pBuilder(pBuilder), controlFlowAnalysis(pCFA), activeVarAnalysis(pAVA), dataFlowAnalysisUtils()
{} // 初始化函数 {} // 初始化函数
void mem2regPipeline(); ///< mem2reg void mem2regPipeline(); ///< mem2reg