5.4.2 基本块的合并
我们在第5.4.1节时给出了由基本块构成的双向链表和控制流图,为阅读方便,我们这里再次给出“图5.1.4 基本块的静态结构和动态结构”。在这一小节中,我们试图把双向链表中相邻的基本块进行合并,当然这种合并需要满足一定条件,同时要保持程序的原有语义。在合并后,控制流图中的前驱与后继关系也要进行调整。我们需要改动的数据结构有图5.4.1中的双向链表和控制流图。需要注意的是,虽然基本块BB5和BB6在双向链表中相邻,但控制流却不会由BB5流入BB6,双向链表只是维持各基本块在中间代码里的先后顺序,控制流图中的有向边才真正代表了控制流的流向。在本小节中,如未特别声明,“前驱和后继”是针对控制流图而言。
图5.1.4 基本块的静态结构和动态结