构建基本块

【构建基本块】基本块包含一个语句序列。控制流从语句的开始进入, 而在结束时离开而没有任何停止(可能是该块的最后一条指令除外)。
以下三个地址语句序列构成一个基本块:

t1:= x * x t2:= x * y t3:= 2 * t2 t4:= t1 + t3 t5:= y * y t6:= t4 + t5

基本块构建算法:划分为基本块
输入:它包含三个地址语句的序列
输出:它包含一个基本块列表, 每个三个地址语句恰好在一个块中
方法:首先确定代码中的领导者。寻找领导者的规则如下:
  • 第一个陈述是领导者。
  • 如果有条件或无条件的goto语句, 例如:if … . goto L或goto L, 则语句L为领导者
  • 如果指令L紧随goto或条件goto语句(例如:goto B或goto B), 则它是领导者
对于每个领导者, 其基本块都由领导者和所有陈述组成。它不包括程序的下一个领导者或结尾。
考虑以下两个长度为10的向量a和b的点积的源代码:
begin prod :=0; i:=1; do begin prod :=prod+ a[i] * b[i]; i :=i+1; end while i < = 10 end

上面的源程序的三个地址代码如下:
B1
(1) prod := 0 (2) i := 1

B2
(3) t1 := 4* i (4) t2 := a[t1] (5) t3 := 4* i (6) t4 := b[t3] (7) t5 := t2*t4 (8) t6 := prod+t5 (9) prod := t6 (10) t7 := i+1 (11) i := t7 (12) if i< =10 goto (3)

基本块B1包含语句(1)至(2)
基本块B2包含语句(3)至(12)

    推荐阅读