• 编译器-条件/循环代码生成


    条件判断语句的代码生成

    1. st1
    2. if(r1
    3. st2
    4. else
    5. st3
    6. st4

                    st1

    BB1        com_LT r1,r2 → r3

                   cbr r3 → L1,L2

            L1 : st2

    BB2        jumpI L3

    BB3        L2 : st3

    BB4        L3 : st4

    这里的com_LT是比较less than 如果r1比r2小 返回true到r3
    cbr是condition branch 如果r3是true 走L1 否则走L2

    BB代表的basic block 这里遇到分支branch 或 jump 或 一个新的label 都是一个basic block

    Control Flow Graph(CFG) 

    在优化代码的时候 划分成这些basic block会使逻辑更加清晰 使得优化工作更加简单
    在得到AST之后 编译器会构建这样的一个CFG作为一部分中间表达 每一个baisc block里面有一些线性的汇编指令

    循环的代码生成

    1. st1
    2. while(r1==r2)
    3. st2
    4. st3

    第一种写法: 

                    st1

    BB1        com_EQ r1,r2 → r3

                   cbr r3 → L1,L2

                   L1 : st2

    BB3        com_EQ r1,r2 → r3

                   cbr r3 → L1,L2

    BB3        L2 : st3

    CFG:
     

     第二种写法

    BB1        st1

    BB2        L0 : com_EQ r1,r2 → r3

                   cbr r3 → L1,L2

    BB3        L1 : st2

                   jumpI L0

    BB4        L2 : st3

    因为L0 这时候就有4个basic block
    CFG:

    boolean类型

    a > b && c==d || e<=f

    loadAI rarp,@a → r1

    loadAI rarp,@b → r2

    comp_GT r1,r2 → r3

    loadAI rarp,@c → r4

    loadAI rarp,@d → r5

    cmp_EQ r4,r5 → r6

    and r3,r6 → r7

    loadAI rarp,@e → r8

    loadAI rarp,@f → r9

    cmp_LE r8,r9 → r10

    or r7,r10 → r11

     嵌套循环:

    1. st1;
    2. while(r1>r2)
    3. {
    4. st2;
    5. while(r3<=r4)
    6. {
    7. st3;
    8. }
    9. st4;
    10. }
    11. st5;

     L1_B : Loop body
     L1_O : Loop out
     L1_C : Loop condition

                st1

    L1_C : cmp_GT r1,r2 → r5

                cbr r5 → L1_B,L1_O

    L1_B   st2

    L1_C   cmp_LE r3,r4 → r6

                cbr r6 → L2_B,L2_O

    L2_B : st3

                jumpI L2_C

    L2_O : st4

                jumpI L1_C

    L1_O : st5

  • 相关阅读:
    Word插件开发
    osgEarth示例分析——osgearth_featurequery
    数据可视化让您业务数据安全和高性能的聚合,为实时数据可视化和决策提供保障
    目前最流行的 5 大 Vue 动画库,使用后太炫酷了
    情感分析系列(四)——使用BERT进行情感分析
    上周热点回顾(2.21-2.27)
    网络割接用VRRP替换HSRP
    Linux ubuntu 1804 版 安装过程图解说明--详细
    什么是大数据,大数据简介
    Harbor 安装部署
  • 原文地址:https://blog.csdn.net/weixin_43754049/article/details/126339166