
简介
近些年来,随着领域特定架构(Domain Specific Architecture,DSA)的发展,随着AI热潮的兴起,以及一大批新的处理器核心架构的出现,特定结构的硬件结构对编译器的各方面能力都提出了新的要求。以往主要存在于CI迭代中设计和测试反馈子流程的大体量增量开发工作量需求,如今也出现在构建这一环节的编译器开发迭代中。要做到能将编译器纳入软件工程的循环中,对编译器框架的模块性就提出了很高的要求。以提供可执行编译工具为设计思路的传统编译器架构,在满足上述需求方面已是力有不逮。
近年来崛起的LLVM 编译器,相较传统GCC编译器有诸多优势,包括架构设计灵活、编译速度快、语言无关性好、代码优化能力强、易于集成和扩展,在开源项目和各大公司的商业项目中得到了广泛应用。
LLVM基于”llvm as libraries”理念,通过其高度模块化的架构设计,为编译器二次开发提供了功能丰富和接口简洁的编译工具链二次开发平台。
本书以深入分析源码的方式,对LLVM编译器前端、中端、后端、链接和加载全流程进行讲解,同时从软硬件工程实际出发,对于在LLVM中进行各类二次开发的方法结合案例作了展开介绍:
- 编译驱动。如何clang驱动中扩展定义编译工具链?
- 前端。如何基于高级语言进行语法扩展开发?如何定义clang内置函数和进行IR衔接?
- Pass编写。基于LLVM的Legacy和New Pass Manager,如何编写中后端代码优化Pass?
- 中间表示层IR。如何对IR中间表示层进行扩展开发?
- 后端适配。如何在LLVM中为特定CPU架构实现一个后端?
- lld链接器。如何为特定CPU架构进行链接器lld适配?
- 加载器。基于ELF实现加载器的功能流程是怎样的?
- TableGen。基于TableGen的公共前端,如何实现自定义后端和编译工具?

本书亮点:
对LLVM主干编译流程涉及的9种代码形态的介绍:源码、词素流Token Stream、抽象语法树AST、中间表示层IR、指令选择图SelectionDAG、机器代码Machine-IR、机器代码MC、目标文件ELF Relocatable、ELF可加载文件EXE和DSO。
对TableGen、IR、Pass这些LLVM编译流程实现所基于骨干支撑技术,依次进行详解。
多案例,涵盖TableGen和IR语言的诸多案例、TableGen二次开发、IR多种二次开发、clang多种二次开发、后端适配、链接器适配等等。






书中插图下载地址
书籍实际印刷为黑白印刷,书中插图彩图开放下载。GitHub下载地址:
https://github.com/framer0116/llvm-coding-guide-book
目录信息


淘宝、京东有售
搜索 “LLVM编译器开发指南”

901

被折叠的 条评论
为什么被折叠?



