编译原理四——代码优化

代码优化

  • 代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高目标程序的质量。
  • 优化分为局部优化、循环优化和全局优化

1、局部优化

1、基本块的划分方法:

  • 基本块指程序中一顺序执行的语句序列,其中只有一个入口(该序列的第一个语句)和一个出口(该序列的最后一个语句)

  • 在各个基本块范围内进行的优化叫局部优化。

  • 基本块的划分:
    从四元式序列确定满足以下条件的入口语句:

    1. 四元式序列的第一个语句
    2. 能由条件转移语句或无条件转移语句转移到的语句
    3. 紧跟在条件转移语句后面的语句

    出口

    1. 下一个入口语句的前导语句
    2. 转移语句(包括转移语句自身)
    3. 停语句(包括停语句自身)

    举例:
    695206989.jpg

    2、DAG图的构建

  • DAG是一种有向图,常用于基本块的优化,图的叶节点(无后继的节点)以标识符(变量名)或常数作为标记,图的内部节点(有后继的节点)以一运算符作为标记。

  • 为了DAG算法的需要,将四元式分成四类,算法只用0,1,2型四元式。


    2074825103.jpg

    (1)是0型四元式,后继节点数为0,(2)是1型四元式,有一个后继,(3)、(4)、(5)是2型四元式,有两个后继 (6)是3型四元式,有三个后继。大写字母表示四元式中的变量名(或常数),Node(A)表示A在DAG中相应的节点。

    算法:
    580404903.jpg
    1218775985.jpg

    自己总结:
    352022156.jpg

练习:
1706012149.jpg

3、DAG图实现基本块的优化

  • 首先根据DAG图写出四元式序列:注意立即数是最优的,赋值比计算赋值优。
  • 注意T是临时变量,A、B这些都是普通变量。

2、循环优化

1、程序流图与循环
控制流程图就是有唯一首节点的有向图,用三元组G=(N,E,n0)表示(节点集,边集,首节点)节点集就是基本块集,有向边表示如下:基本块i出口语句不是转向语句或停语句,i与紧随其后的基本块j有有向边。或者i出口转向j入口语句。
2、循环:程序流图里的一个节点序列强连通,任意两个节点都有至少一条通路,它们中有且只有一个入口节点。(从序列外某节点有一条有向边引导它,或他是程序流图的首节点。
3、找循环:
必经节点集:从流图首节点出发,到n的任意通路都要经过m,m是n的必经节点,记为mDOMn;流图中结点n的所有必经节点的集合称为节点n的必经结点集,极为D(n)。
DOM的性质:自反性:流图中任意节点a,都有aDOMa。传递性:aDOMb,bDOMc则aDOMc。反对称性:aDOMb,bDOMa,a=b。DOM是一个偏序关系,任何节点n的必经节点集是一个有序集。
必经节点的求法:一定包括自己好吧。。。。。。必经节点集就是前驱节点必经节点集的交集加自己没准。
找回边:假设a\rightarrowb是流图中的一条有向边,如果bDOMa,则a\rightarrowb是流图中的一条回边。已知有向边n\rightarrowd是一条回边,则由它组成的循环就是由结点d、结点n以及有通路到达n但该通路不经过d的所有结点组成的。
4、可规约流图:当且仅当一个流图除去回边后,其余边构成一个无环路流图。性质:1. 图中任何直观环路都是循环。2. 找到所有回边可以对应找出所有循环。3. 循环或嵌套或不相交(可能有公共入口节点),goto语句不可跳入循环。

练习:

5、循环优化

  • 代码外题:对于一个循环L,存在循环不变运算S(不随循环次数变化):A=BopC或A=opB或A=B,要满足下述条件:
    1. S所在节点是L所有出口节点的必经节点。
    2. A在L中其它地方未在定值
    3. L中所有A引用只有S中A定值才可达
    算法如下:
  1. 看L中各基本块的每个四元式,他的每个运算对象为常数或者在定值点L外,将此四元式标为不变运算。
  2. 依次查看尚未标记的四元式,如果.......,或者只有一个到达一定值点且该点上的四元式标记为不变运算,比如A=3,X=A+2,循环中A=3定值定值点可唯一到达的X=A+2也标记为不变运算。
  3. 不变运算提到L之外,(满足三条件,或者出循环后不活跃的话满足后俩就可以)

练习:

  • 强度削弱:乘法外提里面换为加法,或者加法外提里面换成加一

练习:

  • 删除归纳变量:循环中对变量I只有形如I=I\pmC的赋值,其中C为循环不变量,称I为基本归纳变量。J=C1*I\pmC2,其中C1和C2都是循环不变量,J是归纳变量。。。。。。。
  • 基本归纳变量:给自己定值,给其他归纳变量赋值,控制循环(给其他归纳变量赋值在强度削弱时已经撇清了),出循环不活跃可删。删除归纳变量就是变换循环控制条件。选一个M,尽量在循环中引用,出了循环活跃,有M和B关系。


    删除归纳变量.jpg

    参考171页例题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • 链接地址:https://www.tutorialspoint.com/compiler_design/compi...
    dannyvi阅读 4,718评论 1 12
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,813评论 0 38
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,855评论 0 5
  • 如果把营销看做钓鱼的话,你就会发现有两种常见的营销玩法: 第一种:鱼饵营销 只见鱼饵,没有鱼钩 第二种:鱼钩营销 ...
    柳相同阅读 951评论 0 0
  • 这两天感冒咳嗽,真个人都不好了。原本吃了晚饭,喝了药就乖乖的躺被窝,昏昏欲睡,可是就刚才被一阵铃声炸醒,炸的睡意全...
    桅笑阅读 423评论 8 18