[工学]编译原理第七章 代码优化.pptVIP

  • 3
  • 0
  • 约6.9千字
  • 约 40页
  • 2018-02-28 发布于浙江
  • 举报
[工学]编译原理第七章 代码优化

第七章 代码优化 7.1 优化概述 1 目的 提高代码质量,产生更高效(时、空)的代码。 2 原则 等价原则 有效原则 合算原则 7.1 优化概述 3 阶段 源代码 前端 中间代码 代码生成 目标代码 中间代码优化 目标代码优化 中间代码优化 7.1 优化概述 4 优化分类 ♦ 根据阶段分类 (1)与机器无关的优化 (2)与机器有关的优化 ♦ 根据优化涉及的范围分类 (1)局部优化 (2)循环优化 (3)全局优化 局部优化 基本块内的优化 7.1 优化概述 5 优化技术 ☆ 删除公共子表达式 ☆ 代码外提 ☆ 强度削弱 ☆ 变换循环控制条件 ☆ 合并已知量 ☆ 复写传播 ☆ 删除无用赋值 删除公共子表达式 合并已知量 删除无用赋值 局部优化 7.1 优化概述 6 本章重点 局部优化 相关技术 四元式序列基本块的划分 基本块的图形表示 基本块的 优化技术 删除公共子表达式 合并已知量 删除无用赋值 删除公共子表达式 在同一个基本块内,计算结果相同的表达式只计算一次,以后重复出现时直接引用结果。 (1) T1=4*i (2) T2=addr(A)-4 (3) T3=T2[T1] (4) T4=4*i (5) T5=addr(B)-4 (6) T6=T5[T4] … (1) T1=4*i (2) T2=addr(A)-4 (3) T3=T2[T1] (4) T4=T1 (5) T5=addr(B)-4 (6) T6=T5[T4] … 合并已知量 常数或能确定其值的已知量,在编译时直接计算出来,不等到运行时再计算。 (1) i=1 (2) T1=4*i (3) T2=addr(A)-4 (4) T3=T2[T1] (5) T4=T1 (6) T5=addr(B)-4 (7) T6=T5[T4] … (1) i=1 (2) T1=4 (3) T2=addr(A)-4 (4) T3=T2[T1] (5) T4=4 (6) T5=addr(B)-4 (7) T6=T5[T4] … 删除无用赋值 赋值以后,在程序其他地方不再引用,可以删掉。 (1) i=1 (2) T1=4 (3) T2=addr(A)-4 (4) T3=T2[T1] (5) T4=4 (6) T5=addr(B)-4 (7) T6=T5[T4] … (1) T1=4 (2) T2=addr(A)-4 (3) T3=T2[T1] (4) T4=4 (5) T5=addr(B)-4 (6) T6=T5[T4] … 7.2 局部优化 基本块 定义: 基本块是程序中一段顺序执行的语句序列。 只有一个入口语句、一个出口语句。 入口是第一个语句,出口是最后一个语句。 7.2.1 为四元式程序划分基本块 (1)找到入口语句; (2)找到出口语句; (3)构造基本块。 ♦ 程序的第一条语句 ♦ 能由条件转移语句和无条件转移语句到达的语句 ♦ 紧跟在条件转移语句后面的语句 ♦ 下一入口语句的前导语句 ♦ 转移语句本身 ♦ 停语句(halt)本身 ♦ 删去不属于任何基本块的语句。 例7.2 给以下四元式序列划分基本块,并作出程序流图。 (1) read C (2) A=0 (3) B=1 (4) L1: A=A+B (5) if B≥C goto L2 (6) B=B+1 (7) goto L1 (8) L2: write A (9) halt (1) read C (8) L2: write A (4) L1: A=A+B (6) B=B+1 (3) B=1 (5) if B≥C goto L2 (7) goto L1 (9) halt (1) read C (2) A=0 (3) B=1 (4) L1: A=A+B (5) if B≥C goto L2 (6) B=B+1 (7) goto L1 (8) L2: write A (9) halt 程序流图: Homework:(P165) 7.5 Homework 7.5 把以下程序段划分为基本块,并作出其程序流图。

文档评论(0)

1亿VIP精品文档

相关文档