首先要知道Basic Block是什么。是一段线性程序,这段代码里面没有分支,只有一个入口和一个出口。划分basic blocks,首先要找到leaders(入口语句):
- 程序的第一条语句
- goto语句的目标语句(statement)。比如下面代码第6行?
- goto后面紧跟着的语句。比如下面代码第8、10行?
然后就是根据leaders来划分basic blocks:
- 所有跟在leader后面到下一个leader出现前的语句
- 第一个语句叫做first leader
- 包含first leader的block叫做initial block
一个basic block只有一个入口,只能从这一个入口进到这个basic block里面并且执行它的代码
一个basic block只有一个出口,这个basic block里的最后一句跑完了之后就得去下一个basic block?
以下面的binary search 为例。如果按照这个划分,那下面iterativeBinarySearch的basic blocks就是(3-6), (7-8), (9-10), (11-12)?