栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

方舟编译器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

方舟编译器

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两节。

参考自:小乖他爹

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号