编译原理系列之十 代码优化
代码优化
代码优化可分为与机器有关的优化和与机器无关的优化。
与机器有关的优化一般在目标代码上进行。与机器无关的优化一般在中间代码上进行。
代码优化也可分为局部优化、 循环优化和全局优化:
局部优化指的是在只有一个入口、 一个出口的基本程序块上进行的优化。
循环优化是对循环中的代码进行的优化,在一个程序运行时,相当多的一部分时间会花在循环上,因此,基于循环的优化非常重要。
全局优化是在整个程序范围内进行的优化。常用的代码优化技术 :
删除公共子表达式(删除多余运算)
删除公共子表达式
代码外提
代码外提是指将循环中的不变运算提到循环体前面。代码外提
强度削弱
强度削弱是指用执行效率较高的操作等价地替换原操作。
比如将乘法改成加法
强度削弱
变换循环控制条件(删除归纳变量)
删除归纳变量
合并已知变量
合并已知变量
复写传播
复写传播是指尽量不引用那些在程序中仅仅只传递信息而不改变其值,也不影响其运行结果的变量。
复写传播
删除无用赋值
删除无用赋值
基本块的划分:
基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。执行时只能从其入口语句进入,从其出口语句退出,不存在跳转和分叉汇合的情况。
基本块入口语句的判断:
• 程序的第一个语句;
• 条件转移语句或无条件转移语句的转移目标语句;
• 紧跟在条件转移语句后面的语句流图:
流图以基本块集为结点集:第一个结点为含有程序第一条语句的基本块;
流图
DAG 表示的代码优化分析
所作的优化合并已知量、删除多余运算、删除无用赋值
DAG 表示的代码优化分析
循环优化:
对循环中的代码段,可以进行代码外提、强度削弱和删除归纳变量等优化。
编译原理系列之十 代码优化相关推荐
- 【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化
本次笔记内容: 8-1 流图 8-2 常用代码优化方法一 8-3 常用代码优化方案二 8-4 基本快的优化 本节课幻灯片,见于我的 GitHub 仓库:第16讲 代码优化_1.pdf 文章目录 流图 ...
- 【编译原理笔记19】代码优化: 支配结点和回边,自然循环及其识别,删除全局公共子表达式和复制语句,代码移动,作用于归纳变量的强度削弱,归纳变量的删除
本次笔记内容: 8-10 支配结点和回边 8-11 自然循环及其识别 8-12 删除全局工工资表达式和赋值语句 8-13 代码移动 8-14 作用于归纳变量的强度削弱 8-15 归纳变量的删除 本节课 ...
- 【编译原理笔记18】代码优化:活跃变量分析,可用表达式分析
本次笔记内容: 8-8 活跃变量分析 8-9 可用表达式分析 本节课幻灯片,见于我的 GitHub 仓库:第18讲 代码优化_3.pdf 文章目录 活跃变量分析 活跃变量 例:各基本块的出口处的活跃变 ...
- 【编译原理笔记17】代码优化:数据流分析,到达定值分析,到达定值方程的计算
本次笔记内容: 8-5 数据流分析 8-6 到达定值分析 8-7 到达定值方程的计算 本节课幻灯片,见于我的 GitHub 仓库:第17讲 代码优化_2.pdf 文章目录 数据流分析 数据流分析(da ...
- 编译原理系列之五 自底向上优先分析(2)-算符优先分析法
算符优先分析法 1.基本概念 算符文法(OG):文法G中没有形如A=>···BC···的产生式,其中B.C为非终结符,则G为算符文法(operator grammar). 也就是说产生式的右部不 ...
- 编译原理(二十)——目标代码生成
一.目标代码 实际目标代码:实际机器上的指令序列 绝对地址机器代码:可重定位的机器代码: 汇编代码: 虚拟目标代码:虚拟机上的目标程序. 在本地机器上具备虚拟机的解释器. 目标程序的生成和目标机是密切 ...
- 【编译原理系列】词法分析与有限自动机
词法分析 编译器中唯一与源程序打交道的部分:规定所有合法输入+识别合法输入 任务: 滤掉源程序中的无用成分,如注释.空格.回车等 处理与具体平台有关的输入,如文件结束符的不同表示等 根据模式识别记号, ...
- 【编译原理系列】布尔表达式及控制语句翻译
布尔表达式 从高到低:not and or 短路计算可以回避指针为空时对ptr^.data=x的判断,从而 直接计算的语法制导翻译 (1)E→E1 or E2 { E.place := newtemp ...
- 自底向上构造语法分析树Java_编译原理系列之五 自底向上优先分析(1)-简单优先分析法...
简单优先分析法 1.基本概念 通过语法树来理解这三个概念更加简单: 文法G1[S]: S→AB A→bB A→Aa B→a B→Sb 语法树 短语:若S=*=>αAδ且A=+=>β,则称β ...
最新文章
- Centos6.9安装Oracle11G(静默方式)
- PPT 下载 | 神策数据朱静芸:电商行业精细化运营四大场景
- mysql事物日志工具_MySQL——常用工具和日志
- 一个卑微的程序员友链
- python文件操作模式是什么,python --文件操作模式详解
- 利用ping/ipconfig/nslookup/dig/whois简单工具测试DNS
- 零磁道损坏如何修复?【硬盘故障软修理技巧】
- Tensorflow实现fashion-mnist数据集的图片识别项目代码
- vue常用正则表达式
- RS485总线传输协议
- linux 关闭后台程序
- API接口电商平台商品详情,网络爬虫数据(步骤示例,参数返回值说明)
- 清除tomcat缓存HTML,清除Tomcat缓存
- html中放大镜字体图标,CSS3 放大镜应用图标
- CentOS7 ECS使用(慕课网付费课笔记)
- php处理抢购类功能的高并发请求,php处理抢购类
- 真正的程序员到底应该是什么样子的?
- 电脑通过wifi连接手机(adb移动设备连接电脑)
- 计算机985专硕还是211学硕好,985专硕和211学硕哪个更值得读
- C#开发之——控件简介(12.6)