深入理解LLVM:代码生成

深入理解LLVM:代码生成

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

全面介绍LLVM代码生成过程。

内容简介

全书分为3篇。

第一篇介绍编译器基础知识,包括中间表示,重点介绍SSA、数据流分析、支配、循环等知识,此外还介绍了LLVM的后端描述语言TableGen。

第二篇剖析分LLVM代码生成,其中对代码生成的每一步骤都有提及,着重介绍指令选择、指令调度、寄存器分配和编译优化。同时还以BPF后端为例总结了如何基于LLVM开发一款新后端的编译器。

第三篇附录主要总结了LLVM代码生成过程中使用的IR、BPF指令集以及如何在Linux运行BPF应用,Pass和PassManager的运行机制等知识。

作者简介

作者彭成寒,高级Java工程师,目前主要从事风控系统设计、算法建模、大数据处理等工作,有超过10年的Java和C++开发经验。

章节目录

版权信息

前言

第一部分 基础知识

第1章 绪论

1.1 LLVM设计思路分析

1.2 LLVM主要子项目

1.3 LLVM构建与调试

1.4 LLVM在线工具

1.5 本章小结

第2章 IR基础知识

2.1 IR分类

2.2 CFG的基本块与构建

2.3 静态单赋值

2.4 本章小结

第3章 数据流分析基础知识

3.1 半格、格与不动点

3.2 数据流分析原理及描述

3.3 数据流方程示例

3.4 扩展阅读:数据流的遍历性能分析

3.5 本章小结

第4章 支配分析

4.1 支配和逆支配

4.2 支配树和支配边界的实现

4.3 扩展阅读:支配树相关小课堂

4.4 本章小结

第5章 循环基本知识

5.1 自然循环

5.2 LLVM的循环实现

5.3 本章小结

第6章 TableGen介绍

6.1 目标描述语言

6.2 TableGen工具链

6.3 扩展阅读:如何在TD文件中定义匹配

6.4 本章小结

第二部分 代码生成

第7章 指令选择

7.1 指令选择的处理流程

7.2 SelectionDAGISel算法分析

7.3 快速指令选择算法分析

7.4 全局指令选择算法原理与实现

7.5 本章小结

第8章 指令调度

8.1 LLVM指令调度

8.2 Linearize调度器

8.3 Fast调度器

8.4 BURR List调度器

8.5 Source List调度器

8.6 Hybrid List调度器

8.7 Pre-RA-MISched调度器

8.8 Post-RA-TDList调度器

8.9 Post-RA-MISched调度器

8.10 循环调度

8.11 扩展阅读:调度算法的影响因素

8.12 本章小结

第9章 基于SSA形式的编译优化

9.1 前期尾代码重复

9.2 Phi优化

9.3 栈着色

9.4 栈槽分配

9.5 死指令消除

9.6 IPL优化之If-Conversion

9.7 循环不变量外提

9.8 公共子表达式消除

9.9 代码下沉

9.10 窥孔优化

9.11 本章小结

第10章 寄存器分配

10.1 寄存器分配流程解析

10.2 寄存器分配涉及的Pass

10.3 Fast算法实现

10.4 Basic算法实现

10.5 Greedy算法实现

10.6 PBQP算法实现

10.7 扩展阅读:图着色分配

10.8 4种算法对比

10.9 本章小结

第11章 函数栈帧生成和非SSA形式的编译优化

11.1 函数栈帧生成以及相关优化

11.2 MIR优化

11.3 MIR指令变换和调度

11.4 MIR信息收集及布局优化

11.5 扩展阅读:后缀树构造和应用

11.6 本章小结

第12章 生成机器码

12.1 MC

12.2 机器码生成过程

12.3 本章小结

第13章 添加一个新后端

13.1 适配新后端的各个阶段

13.2 添加新后端所需要的适配

13.3 本章小结

附录

附录A LLVM的中间表示

A.1 狭义LLVM IR介绍

A.2 指令选择DAG介绍

A.3 MIR介绍

A.4 MC介绍

A.5 GMIR介绍

附录B BPF介绍

B.1 eBPF基础

B.2 Linux如何运行eBPF

附录C Pass的分类与管理

C.1 LegacyPassManage中的Pass

C.2 LegacyPassManager对Pass的管理

C.3 New PassManager

深入理解LLVM:代码生成是2024年由机械工业出版社出版,作者彭成寒。

得书感谢您对《深入理解LLVM:代码生成》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
好代码,坏代码 电子书
本书分享的实用技巧可以帮助你编写可靠且易于团队成员理解和适应不断变化需求的代码。
代码整洁之道 电子书
“阅读这本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。很好,IT行业需要更好的程序员!”——罗伯特·C. 马丁(Robert C. Martin) 尽管糟糕的代码也能运行,但如果代码不整洁,会使整个开发团队泥足深陷,写得不好的代码每年都要耗费难以计数的时间和资源。但是,这种情况并非无法避免。 著名软件专家罗伯特·C. 马丁(Robert C. Martin) 在本书中为你呈现了革命性的视野。他携同Object Mentor公司的同事,从他们有关整洁代码的佳敏捷实践中提炼出软件技艺的价值观,以飨读者,让你成为更优秀的程序员——只要你着手研读本书。 阅读本书需要你做些什么呢?你将阅读代码——大量代码。本书会促使你思考何谓正确的代码,何谓错误的代码。更重要的是,本书将促使你重新评估自己的专业价值观,以及对自己技艺的承诺。 书中的具体内容包括: ·好代码和糟糕的代码之间的区别; ·如何编写好代码,如何将糟糕的代码转化为好代码; ·如何创建好名称、好函数、好对象和好类; ·如何格式化代码以实现其可读性的大化; ·如何在不妨碍代码逻辑的前提下充分实现错误处理; ·如何进行单元测试和测试驱动开发。
你真的会写代码吗 电子书
1个示例,7次重构,助你辨别优劣代码。
深入React技术栈 电子书
全面讲述React技术栈的原创图书,pure render专栏主创倾力打造,覆盖React、Flux、Redux及可视化等内容。
C/C++代码调试的艺术 电子书
本书围绕C/C++程序调试这一主题,介绍了在Windows和Linux操作系统上如何高效地调试C/C++程序。本书分为11章,内容涵盖了程序调试的基本知识、VisualC++调试程序的基本功能与技巧、Linux系统中gdb工具的使用、死锁调试、动态库调试、内存泄漏检查、远程调试、崩溃转储文件分析、发行版调试,以及调试的高级话题和调试扩展方面的知识。