方舟编译器分析八——代码分析(第六篇)

2021SC@SDUSC

仍然是老规矩,官方源码献上:

华为开源 - Huawei Open Source - 开放、共创、繁荣、共赢

不过最近此网站正在维护,暂时上不去。

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

MeExprOp之中的每个类别(除了kMeOpUnknown之外),都有一个对应的类,这些类都是MeExpr类的子类。具体代码为(src/maple_me/src/me_ir.cpp):

节点类和Me表达式类的对应:之前介绍的表达式对应的节点,主要是针对Expression nodes,并没有覆盖针对Leaf nodes的内容,所以并没有和操作符对应的节点类来和Me的表达式类进相对应的内容。但是,这里面NaryMeExpr是个例外,它是为了表达array、intrinsicop和intrinsicopwithtype;array、intrinsicop和intrinsicopwithtype属于N-ary Expression Opcodes,它们有对应的节点类。其中,array对应节点类ArrayNode,intrinsicop和intrinsicopwithtype对应节点类IntrinsicopNode,它们都是NaryNode的子类。这里只是一个对应关系,具体执行过程之中的流程和细节,还要进一步分析。

MeExpr及其子类的成员函数相对都较为简单,除了相关的内容的set/get之外,主要是一些判定、dump,还有一些极个别的其他操作。

经过我们陆续几天的分析,我们可以看到在IR之中,Me是有一套自己的体系的。我们几天涉及到的MeFunction、BB、MeStmt、MeExpr都是这个体系的一部分。而我们之前分析过的MIRModule、MIRFunction、Node体系,这是一个体系,这个体系的声明周期要比Me的体系要靠前一些。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值