C代码优化
代码优化
代码优化的目标 ■提高最终目标代码的运行效率(性能) 时间:运行的更快 空间:降低内存需求 保持源程序的语义
•代码优化的目标 提高最终目标代码的运行效率(性能) - 时间:运行的更快 - 空间:降低内存需求 • 保持源程序的语义
代码优化的种类 窥孔优化 局部优化一基本块内优化 n全局优化一基本块间优化(过程内) 过程间优化一程序全局优化
•代码优化的种类 窥孔优化 局部优化-基本块内优化 全局优化-基本块间优化(过程内) 过程间优化-程序全局优化
代码优化的种类一窥孔优化 “孔”一未优化的目标代码片段( windows) ■窥孔优化种类: 删除冗余的存、取操作 e.g.movr0,a∥0->a mova,r0∥a->r0,可删除 删除不可达代码
•代码优化的种类-窥孔优化 “孔”-未优化的目标代码片段(windows) 窥孔优化种类: - 删除冗余的存、取操作 e.g. mov r0, a // r0 -> a mov a, r0 // a -> r0, 可删除 - 删除不可达代码
代码优化的种类一窥孔优化 e.g goto L1 goto Li2∥语句前无标号,死代码 L1: L2 控制流优化
•代码优化的种类-窥孔优化 e.g. goto L1 goto L2 // 语句前无标号,死代码 L1: … L2: … - 控制流优化
代码优化的种类一窥孔优化 goto L1 goto L2 L1: goto L2 L1: goto L2 if a<b goto L1 if a<b goto L2 L1: goto L2 L1: goto L2 goto L1/唯一跳转L1 if a b goto L2 跳羚1前是无条件 goto L3 L1: if a <b goto L2 L3: L3:
•代码优化的种类-窥孔优化 goto L1 … L1: goto L2 goto L2 … L1: goto L2 if a<b goto L1 … L1: goto L2 if a<b goto L2 … L1: goto L2 goto L1 //唯一跳转L1 … //L1前是无条件 跳转 L1: if a <b goto L2 L3: if a < b goto L2 goto L3 … L3:
代码优化的种类一窥孔优化 强度消弱、删除无用指令 e.g. MUL $8, RO -> ShiftLeft $3, RO ADD$0,R1∥删除,未改变R1 MUL$1,R2∥删除 利用目标机指令特点 eg.inc、 enter(建立栈帧) leave(清除栈帧) CSC系统的“复杂”寻址模式 其它优化措施,如常量合并、复写传播等
•代码优化的种类-窥孔优化 - 强度消弱、删除无用指令 e.g. MUL $8, R0 -> ShiftLeft $3, R0 ADD $0, R1 // 删除,未改变R1 MUL $1, R2 // 删除 - 利用目标机指令特点 e.g. inc、enter(建立栈帧)leave(清除栈帧) CISC 系统的“复杂”寻址模式 - 其它优化措施,如常量合并、复写传播等
代码优化的种类一局部优化 基本块和流图 基本块:能顺序执行的程序代码序列。其入口为 程序的第一代码 条件或无条件转移代码所转到的目标代码 跟在条件或无条件转移代码后的代码 基本块划分 相邻入口中间的代码序列(仅含前一入口) 某入口到程序的停止语句代码之间的代码序列 流图:由基本块按控制流方向形成的有向图 n基本块内优化,主要有: 常量传播、合并和公共子表达式删除 复写传播与死代码(无用代码)删除
代码优化的种类-局部优化 基本块和流图 - 基本块:能顺序执行的程序代码序列。其入口为: - 程序的第一代码 - 条件或无条件转移代码所转到的目标代码 - 跟在条件或无条件转移代码后的代码 - 基本块划分 - 相邻入口中间的代码序列(仅含前一入口) - 某入口到程序的停止语句代码之间的代码序列 - 流图:由基本块按控制流方向形成的有向图 基本块内优化,主要有: - 常量传播、合并和公共子表达式删除 - 复写传播与死代码(无用代码)删除
代码优化的种类一全局优化 ■基本块间优化一基本块间控制流与数据流 分析技术 ■优化措施主要有: 循环优化:80/20规则 不变式外提、归纳变量删除、强度消弱等 公共子表达式删除 常量传播、合并常量、复写传播 死代码(无用赋值)删除
代码优化的种类-全局优化 基本块间优化-基本块间控制流与数据流 分析技术 优化措施主要有: - 循环优化 :80/20 规则 - 不变式外提、归纳变量删除、强度消弱等 - 公共子表达式删除 - 常量传播、合并常量、复写传播 - 死代码(无用赋值)删除
°典型的优化编译器的组织 前端间起代码下、「代码1 优化器 生成器 控制流 数据流 变换 分析 分析
•典型的优化编译器的组织 前 端 代 码 生成器 代 码 优化器 数据流 变 换 分 析 控制流 分 析 中间表示 中间表示