方舟编译器分析十三——代码分析(十一)

本文探讨了Maple ME中的MeDoDominance类,该类在构建支配树和支配边界方面的作用,为SSA分析做准备。MeDoDominance在dominance.h和dominance.cpp中定义和实现,并通过Run函数执行相关操作。它依赖于Dominance类,该类继承自AnalysisResult,包含了支配树和边界计算。MeDoDominance的Run函数执行两次计算,分别使用逆后序和反向逆后序。算法参考了Keih Cooper的论文和《Engineering a Compiler》的相关章节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值