《方舟编译技术入门与实战(编译原理+开源项目)》

Posted cx2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《方舟编译技术入门与实战(编译原理+开源项目)》相关的知识,希望对你有一定的参考价值。

 

 

技术图片

 

 技术图片

 

 

技术图片

 

 

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

语法树 AST DAG

AST 最重要,其余的了解即可 

 

技术图片

 

 技术图片

 

 

如果看不懂可以先跳过去:比较偏后端,依赖的分析;用于指令的调度或并行的机会挖掘的时候才会用

 

技术图片

 

 

 call graph (函数之间) 更加高层次一些

技术图片

 

 技术图片

 

 技术图片

 

 

三地址码(英语:Three address code,经常被缩写为TAC 或 3AC),一种中间语言编译器使用它来改进代码转换效率。每个三地址码指令,都可以被分解为一个四元组(4-tuple):(运算符,操作数1,操作数2,结果)。因为每个陈述都包含了三个变量,所以它被称为三地址码。

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

最好是不要用二地址码了

 

技术图片

 

 

 栈机器码

 

技术图片

 

 技术图片

 

 

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。
Frances E. Allen于1970年提出控制流图的概念 [1]  。此后,控制流图成为了编译器优化和静态分析的重要工具。
 
 
一个CFG 可显示一个过程内各基本块之间的相互关系、动态执行状态、各基本块对应的语句表。此外,还有其他辅助信息,如各基本块执行次数,执行时间等等。

静态结构图

静态结构图为一有向图,如图2所示。图中各节点的序号顺序从1排列。第1个块即为子程序头“Suborutine子程序名”。从一个节点到下一个节点的连线表明其执行的可能顺序,用有箭头的线表示,称为有向线。有向线的起点所对应的块为正要转移的块,而箭头所指的块为将要转向的块。 [2]

动态显示图

动态显示图是在静态图的基础上完成的, 它不但能反映源程序的静态结构关系,还能实时地反映动态执行时的轨迹。
在即将执行一个块的第一条语句时“点亮”该块,表明这一块为将要执行的活动基本块,而上一个基本块已经执行完毕,但还没有完全“熄灭”。这完全是为了记住执行轨迹而人为设置的。从上一次执行的基本块到当前活动基本块有一条连线,箭头表示转移方向。这条有向线有别于其他的有向线,用红色标出,称为“活动线”,因为它是当前的执行轨迹。当从当前块转向下一个块时,重新标出活动线,而原先的活动线则恢复为静态连线。 [2] 

浏览语句表

任何时候都可以浏览图中任一基本块所对应的语句表。

统计信息

由于进入和离开一个基本块的时刻和进入的次数是知道的,所以一个块被执行的次数和执行它所花的时间的总和是可以统计出来的。

 

 
 
技术图片

 

 

 SSA:静态单赋值,相当于把变量拆分开了

 

技术图片

 

 

技术图片

 

 split & merge

主要是在 merge环节,

 

phi 函数:不是真实存在的,需要靠 编译器 实现
 
技术图片

 

 

 
 

以上是关于《方舟编译技术入门与实战(编译原理+开源项目)》的主要内容,如果未能解决你的问题,请参考以下文章

华为王成录:解密方舟编译器和EMUI未来四大演进方向!

喜讯!方舟编译器获「2019东北亚优秀开源项目」大奖

新技术:华为方舟编译器获“东北亚优秀开源项目”奖

华为方舟编译器获国内“最有价值开源项目”

开源被喷,闭源被疑:方舟编译器怎么这么难?

方舟编译器开源准备就绪,期待与你相遇!