方舟编译器分析九——代码分析(第七篇)

2021SC@SDUSC

这篇博客承接上面几篇,这几篇博客要研究分析编译器代码中me体系的me_ir部分,这一部分是me体系中最重要的一部分,因为这部分直接决定了me和ir两个体系的结合,这部分代码将对整个方舟编译器的运行产生至关重要的作用。同时,这部分的代码量极为庞大,分析起来难度也很大,故我可能需要6-9周(按每周一篇的速度)才能将之分析完。

https://opensource.huawei.com/

今天的重点是MeStmt及其相关内容。

MeStmt定义及实现在src/maple_me/include/me_ir.h和src/maple_me/src/me_ir.cpp中。这和MeExpr是一样的。

MeStmt有一批子类(src/maple_me/include/me_ir.h):

class DassignMeStmt : public MeStmt {

class RegassignMeStmt : public MeStmt {

class MaydassignMeStmt : public MeStmt {

class IassignMeStmt : public MeStmt {

class NaryMeStmt : public MeStmt {

// eval, free, decref, incref, decrefreset, assertnonnull
class UnaryMeStmt : public MeStmt {

class GotoMeStmt : public MeStmt {

class JsTryMeStmt : public MeStmt {

class TryMeStmt : public MeStmt {

class CatchMeStmt : public MeStmt {

class CommentMeStmt : public MeStmt {

class WithMuMeStmt : public MeStmt {

// assert ge or lt for boundary check
class AssertMeStmt : public MeStmt {

其中,UnaryMeStmt和NaryMeStmt也有它自己的子类(src/maple_me/include/me_ir.h): 

class CondGotoMeStmt : public UnaryMeStmt {

class SwitchMeStmt : public UnaryMeStmt {

class CallMeStmt : public NaryMeStmt, public MuChiMePart, public AssignedPart {

class IcallMeStmt : public NaryMeStmt, public MuChiMePart, public AssignedPart {

class IntrinsiccallMeStmt : public NaryMeStmt, public MuChiMePart, public AssignedPart {

MuChiMePart和AssignedPart 类也都在同个头文件中定义了,没有继承自任何类。NaryMeStmt除了call系列的子类之外,还有:

class RetMeStmt : public NaryMeStmt {

class SyncMeStmt : public NaryMeStmt, public MuChiMePart {

WithMuMeStmt也有自己的子类:

class GosubMeStmt : public WithMuMeStmt {

class ThrowMeStmt : public WithMuMeStmt {

另外还有独立的类:ChiMeNode、MustDefMeNode等。

通过以上的分析,我们可以看到MeStmt及其子类所构成的体系,和之间语句所对应的节点类的体系是完全不同的体系,二者的对应关系比较弱。MeStmt是一个相对独立的体系,其和语句的节点类之间的关系,还需要以后分析代码执行流程的过程中去揭示。这其实不光是涉及到语句的问题,还是一个MAPLE IR到ME IR的问题。

MeStmt及其相关子类,构成了Me阶段的语句的一个表达体系,它属于相对独立的一个体系。它和我们之前提到的MeFunction、BB、MeExpr一起构建了Me阶段的表达体系。后续我们要分析MAPLE IR中的表达体系向Me阶段的表达体系的转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值