美文网首页
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