C编译器剖析_5.4.2 中间代码生成及优化_基本块的合并

本文探讨了C编译器优化中的基本块合并过程,旨在保持程序语义不变的同时提高效率。介绍了在控制流图中,如何根据特定条件合并相邻的基本块,并调整前驱和后继关系。合并包括处理无中间代码的基本块、唯一后继和前驱的情况等。通过TryMergeBBlock函数实现合并操作,优化中间代码。
摘要由CSDN通过智能技术生成

5.4.2  基本块的合并

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


图5.1.4 基本块的静态结构和动态结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值