个性化阅读
专注于IT技术分析

构建基本块

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

以下三个地址语句序列构成一个基本块:

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)

赞(0)
未经允许不得转载:srcmini » 构建基本块

评论 抢沙发

评论前必须登录!