2021SC@SDUSC
前文的分析过程之中涉及到了dominance phase,主要是用于构建支配树和支配边界,为ssa分析做准备工作。本文将对dominance phase进行简要分析。
dominance phase的实现类是MeDoDominance,MeDoDominance继承于MeFuncPhase。MeDoDominance的定义和实现在文件src/maple_me/include/me_dominance.h和src/maple_me/src/me_dominance.cpp之中。
MeDoDominance的定义很简单:
class MeDoDominance : public MeFuncPhase {
public:
explicit MeDoDominance(MePhaseID id) : MeFuncPhase(id) {}
virtual ~MeDoDominance() = default;
AnalysisResult *Run(MeFunction *func, MeFuncResultMgr *funcResMgr, ModuleResultMgr *moduleResMgr) override;
std::string PhaseName() const override {
return "dominance";
}
};
具体实现上只有一个Run函数:
AnalysisResult *MeDoDominance::Run(MeFunction *func, MeFuncResultMgr *funcResMgr, ModuleResultMgr *moduleResMgr) {
MemPool *memPool = NewMemPool();
Dominance *dom = memPool->New<Dominance>(*memPool, *NewMemPool(), func->G