方舟编译器_7

2021SC@SDUSC
dominance phase,主要是用于构建支配树和支配边界,为ssa分析做准备工作。
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”;
}
};

3、Dominance继承于AnalysisResult,用于表达分析结果。Dominance的定义和实现在文件src/maple_me/include/dominance.h和src/maple_me/src/dominance.cpp之中。

4、关于支配树以及支配边界的计算和生成,其实都是在Dominance的成员函数之中实现的,只不过在MeDoDominance的Run函数之中被调用了。也就是说,MeDoDominance的Run函数之中生成了一个Dominance,然后调用Dominance的成员变量去做支配树和支配边界的计算和生成,然后将结果存储在Dominance之中进行返回。

5、MeDoDominance的Run函数实际上计算了两次支配树和支配边界。只不过其依赖的遍历顺序不同罢了,第一次是使用的逆后序(Reverse PostOrder,RPO),而第二次使用的是反向逆后序。

6、MeDoDominance中构建支配树和支配边界的算法,可以参考Keih Cooper的论文《A Simple, Fast Dominance Algorithm》,具体实现都是直接参考论文中的算法。论文具体地址:https://www.cs.rice.edu/~keith/EMBED/dom.pdf。

7、关于支配树和支配边界的计算,也可以阅读《Engineering a Compiler》 Second Edition中的9.2和9.3两节。

参考自:小乖他爹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值