diff --git a/src/Mem2Reg.cpp b/src/Mem2Reg.cpp index 968e4f3..bf7e541 100644 --- a/src/Mem2Reg.cpp +++ b/src/Mem2Reg.cpp @@ -745,11 +745,10 @@ auto Mem2Reg::renameAll() -> void { */ auto Mem2Reg::mem2regPipeline() -> void { // 首先进行mem2reg的前置分析 - controlFlowAnalysis = new ControlFlowAnalysis(pModule); - activeVarAnalysis = new ActiveVarAnalysis(); - // 控制流分析 + controlFlowAnalysis->clear(); controlFlowAnalysis->runControlFlowAnalysis(); // 活跃变量分析 + activeVarAnalysis->clear(); dataFlowAnalysisUtils.addBackwardAnalyzer(activeVarAnalysis); dataFlowAnalysisUtils.backwardAnalyze(pModule); diff --git a/src/include/Mem2Reg.h b/src/include/Mem2Reg.h index f3b54ff..0004708 100644 --- a/src/include/Mem2Reg.h +++ b/src/include/Mem2Reg.h @@ -17,13 +17,14 @@ class Mem2Reg { private: Module *pModule; IRBuilder *pBuilder; - ActiveVarAnalysis *activeVarAnalysis; // 活跃变量分析 ControlFlowAnalysis *controlFlowAnalysis; // 控制流分析 + ActiveVarAnalysis *activeVarAnalysis; // 活跃变量分析 DataFlowAnalysisUtils dataFlowAnalysisUtils; public: - Mem2Reg(Module *pMoudle, IRBuilder *pBuilder) : - pModule(pMoudle), pBuilder(pBuilder), activeVarAnalysis(nullptr), controlFlowAnalysis(nullptr), dataFlowAnalysisUtils() + Mem2Reg(Module *pMoudle, IRBuilder *pBuilder, + ControlFlowAnalysis *pCFA = nullptr, ActiveVarAnalysis *pAVA = nullptr) : + pModule(pMoudle), pBuilder(pBuilder), controlFlowAnalysis(pCFA), activeVarAnalysis(pAVA), dataFlowAnalysisUtils() {} // 初始化函数 void mem2regPipeline(); ///< mem2reg