作者: | [印]Pandey,M.、Sarda,S. [译]王欢明 |
语言: | 中文 |
出版年份: | 2016 |
下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
《LLVM Cookbook中文版》是一本由Mayur Pandey和Suyog Sarda合著、王欢明翻译的编译器技术书籍,于2016年6月由电子工业出版社出版。该书以任务驱动的方式,系统地介绍了LLVM编译器框架的设计、使用以及如何基于LLVM开发编译器的前端、优化器和后端,是一本兼具理论与实战的编译技术指南。
本书共分为9章,内容涵盖了LLVM的基础架构、编译器前端开发、优化技术、代码生成以及LLVM在各种项目中的应用实践。
第1章:LLVM设计与使用
介绍了LLVM的模块化设计理念,包括如何下载、安装LLVM和Clang,以及如何使用LLVM进行交叉编译、代码转换和执行。本章还探讨了LLVM的多种前端工具,如C语言前端Clang、Go语言前端llgo以及DragonEgg插件。
第2章:实现编译器前端
通过实现一个简单的TOY语言编译器,展示了如何从定义语言语法开始,逐步实现词法分析器、语法分析器,并生成LLVM IR代码。本章详细介绍了词法分析、语法分析以及抽象语法树(AST)的构建过程。
第3章:扩展前端并增加JIT支持
在TOY语言的基础上,增加了条件控制结构(如if/then/else)、循环结构以及自定义运算符的支持,并引入了即时编译(JIT)技术,使编译器能够动态执行代码。
第4章:准备优化
介绍了LLVM优化框架的核心——Pass机制,包括如何编写自定义Pass、使用opt工具运行Pass,以及如何在Pass中调用其他分析和优化工具。本章还探讨了多级优化策略和Pass管理器的使用。
第5章:实现优化
深入讨论了多种优化技术,如无用代码消除、内联转换、内存优化、循环优化、表达式重组和向量化等。通过具体示例,展示了如何编写和实现这些优化Pass。
第6章:平台无关代码生成器
描述了从LLVM IR到目标平台机器码的转换过程,包括SelectionDAG的构建、合法化、优化以及指令选择和调度。本章还介绍了如何使用TableGen工具描述目标平台的指令集和架构特性。
第7章:机器码优化
聚焦于机器码层面的优化技术,如公共子表达式消除、活动周期分析、寄存器分配、尾调用优化和兄弟调用优化等。这些优化技术直接作用于生成的机器码,进一步提升代码的执行效率。
第8章:实现LLVM后端
详细介绍了如何为一个目标平台实现LLVM后端,包括寄存器定义、调用约定、指令集设计、栈帧lowering、指令选择和平台注册等。本章通过一个简单的TOY后端示例,展示了从头构建LLVM后端的完整过程。
第9章:LLVM项目最佳实践
探讨了LLVM在不同项目中的应用,如异常处理、sanitizer工具的使用、垃圾回收器的编写、LLVM IR到JavaScript的转换、Clang静态分析器、bugpoint调试工具以及LLDB调试器的使用。本章还介绍了LLVM通用Pass的使用方法。
本书适合熟悉编译器基本概念但对LLVM不太熟悉的程序员,以及正在学习编译技术并希望参与实战的开发者。通过丰富的实战案例和详细的步骤解析,读者可以快速掌握LLVM的使用方法,并深入了解编译器的开发过程。
《LLVM Cookbook中文版》是一本全面、系统的LLVM实战指南。它不仅涵盖了LLVM的基础知识和架构设计,还通过具体的编译器开发案例,展示了如何利用LLVM实现高效的代码生成和优化。无论是对于编译器开发人员,还是对编译技术感兴趣的开发者,本书都是一本极具价值的参考资料。