美文网首页
IR知识总结

IR知识总结

作者: 珍惜Any | 来源:发表于2020-04-22 12:20 被阅读0次

什么是IR?

IR分为SSA(static single assignment 静态单赋值) IR和 正常IR
经过后端编译器,可直接生成不同平台的执行文件,比如Arm,X86
用处交叉编译。

什么是PHI?

int i = a > 1 ? 11 : 22;

很简单的代码解释PHI
生成的 sm代码如下

block0:
if (a > 1) goto
block1 else block2

blcok1:
value1 = 11
goto block3

block2:
value2 = 22
goto block3

block3
value3 = ??

编译器是怎么知道 value3 的赋值应该是11还是22呢?

结论:

如果上一级来自block1,那么valuei就取value1的值
如果上一级来自block2,那么valuei就取value2的值

block3的上级是block1和block2,那么value3 =phi(value1, value2)

这个代码执行流程分为两种

block0->blcok1->blcok3
或者
block0->blcok2->blcok3

PHI主要是路径来源,在SSA IR里面,PHI 也是一个变量,是一种特殊变量

int i
if (a > 1)
i = 11
else
i = 22

这里i被赋值了两次,但是ir里面的value只能赋值一次,
但它初始化的时候,根据上级block,选择不同的value给它赋值。
为了应付这种情况,就有了PHI。

相关文章

网友评论

      本文标题:IR知识总结

      本文链接:https://www.haomeiwen.com/subject/oyzbihtx.html