美文网首页
编译器笔记51-代码优化-可用表达式分析

编译器笔记51-代码优化-可用表达式分析

作者: 衣忌破 | 来源:发表于2020-03-18 22:59 被阅读0次

可用表达式分析

  • 可用表达式

如果从流图的首节点到达程序点p的每条路径都对表达式x op y进行计算,并且从最后一个这样的计算到点p之间没有再次对x或y定值,那么表达式x op y在点p是可用的(available)。

  • 表达式可用的直观意义

在点p上,x op y已经在之前被计算过,不需要重新计算。

可用表达式信息的主要用途

  • 消除全局公共子表达式
例.png

若在B3的入口处,4*i是可用表达式的话,那么B3中的4*i就是全局公共子表达式,就可以将其删除。

问:B2中的代码满足什么条件在B3的入口处才能被使用呢?
答:根据可以表达式的定义从流图的首节点到达B3入口处的每条路径上都计算了表达式4*i的值。并且从最后一次计算到B3入口处之间没有对i重新定值,在此种情况下表达式4*i在B3入口处才可用。因此要求B2中的代码没有对i重新定值或者即使重新定值以后又重新计算了4*i的值。

  • 进行复制传播
例.png

可用表达式的传递函数

对于可用表达式数据流模式而言,如果基本块B对x或者y进行了(或可能进行) 定值,且 以后没有重新计算x op y,则称B杀死表达式x op y 。如果基本块B对x op y进行计算,并且之后没有重新定值x或y,则称B生成表达式x op y。

传递函数.png e_gen计算.png

注1:x op y对z进行了定值,因此它杀手了与z相关或以z作为运算分量的表达式。

注2:初始时可用表达式为空集,那么扫描完第一条语句以后把b+c加入到可用表达式集合中,同时把跟a相关的可用表达式删除掉,生成b+c。扫描到第二条语句后,把a-d加入到集合中,同时把所用跟b相关的表达式删除,因此b+c删除添加了a-d。在扫描第三条语句时,添加表示式b+c,然后把跟c相关的表达式b+c删除,因此集合中什么都没有添加还是a-d。在扫描到第四条语句时我们将跟d相关的语句删除掉,最后集合变为空集。

e_kill.png

可用表达式的数据流方程

可用表达式的数据流方程.png

计算可用表达式的迭代算法

计算可用表达式的迭代算法.png

为什么将OUT[B]集合初始化为U?

OUT集合初始化为Φ局限性.png

注:第一次迭代时,首先计算的是B1的IN值和OUT值,接下来计算B2的IN值,此值是根据其前驱节点的OUT值来计算的。B2有两个前驱节点一个是B1一个是B2自己,那么B1的OUT值在第一次迭代时已经计算出,B2的OUT值使用的是初始化的值,若该值为空,那么任何集合与其进行交运算得到的都是空集。这样我们就把OUT[B1]中本来可以在B2入口处可用的表达式屏蔽掉了,这样是不合理的。若定义为全集U则没有该问题。

相关文章

  • 编译器笔记51-代码优化-可用表达式分析

    可用表达式分析 可用表达式 如果从流图的首节点到达程序点p的每条路径都对表达式x op y进行计算,并且从最后一个...

  • 编译器前端和后端

    编译器粗略分为词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化。把中间代码生成及之...

  • Flutter 前端编译器编译流程分析

    1. 前端编译器和后端编译器的区别 编译流程粗略分为词法分析、语法分析、类型检查、中间代码生成、代码优化、目标代码...

  • 编译器的工作过程

    编译器的工作过程划分为:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。 词法分析器的任务是把...

  • 编译原理概述

    编译器原理 词法分析器 语法分析器 语义分析器 中间代码生成 符号表 独立机器的代码优化器 代码生成器 依赖于机器...

  • iOS的性能优化

    1、ipa包体积优化 1.1 编译配置优化:编译器代码层面优化Optimize Level;Bitcode(较难...

  • 编译器优化部分代码

    我们简单写一些代码看编译器优化前后的对比。编译器没有优化时 在Build Setting 搜索optimizati...

  • 编译器想做什么

    编译器就程序员写的代码变成CPU能理解机器代码。编译器的指令重排指开启编译器优化后,在不影响代码行为的前提下,代码...

  • 程序员自我修养2:编译过程

    编译过程分为6步:扫描(词法分析)、语法分析、语义分析、源代码优化、代码生成、目标代码优化。 示例代码:array...

  • 代码文件编译生成过程完成的事情

    编译过程可分为6步:扫描(词法分析)、语法分析、语义分析、源代码优化、代码生成、目标代码优化。 词法分析:扫描器(...

网友评论

      本文标题:编译器笔记51-代码优化-可用表达式分析

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