《深入理解LLVM:代码生成》内容简介与阅读建议

获取这本书 暂无已核验电子书资源
下载
分类
科技技术
出版年份
2024
出版社
机械工业出版社
页数
432 页
语言
中文

《深入理解LLVM:代码生成》内容简介

全书分为3篇。第1篇介绍编译器基础知识,包括中间表示,重点介绍SSA、数据流分析、支配、循环等知识,此外还介绍了LLVM的后端描述语言TableGen。第二篇剖析分LLVM代码生成,其中对代码生成的每一步骤都有提及,着重介绍指令选择、指令调度、寄存器分配和编译优化。同时还以BPF后端为例总结了如何基于LLVM开发一款新后端的编译器。第三篇附录主要总结了LLVM代码生成过程中使用的IR、BPF指令集以及如何在Linux运行BPF应用,Pass和PassManager的运行机制等知识。

《深入理解LLVM:代码生成》书籍信息摘要

《深入理解LLVM:代码生成》内容简介与阅读建议,作者 彭成寒/李灵/戴贤泽/王志磊/俞佳嘉,科技技术,2024年。获取前建议核对作者、出版社、年份、ISBN、版本和正版渠道。相关主题:LLVM、编译器、代码生成、计算机类。

《深入理解LLVM:代码生成》适合哪些读者?

适合希望系统学习技术概念、实践方法、工具使用和行业知识的读者。

获取建议

《深入理解LLVM:代码生成》怎么获取更合适?

优先确认版本和阅读目的;下载区只展示已核验的公版、授权、开放许可或官方试读资源。

下载

暂无已核验电子书资源;本站不展示未授权完整文件。

下载

版本

优先选择作者、译者、出版社、出版年份和 ISBN 信息明确的版本;经典作品可优先选择校注、导读或权威出版社版本。

目录

  1. 目 录Contents
  2. 前言
  3. 第一部分 基础知识
  4. 第1章 绪论2
  5. 1.1 LLVM设计思路分析3
  6. 1.2 LLVM主要子项目4
  7. 1.3 LLVM构建与调试5
  8. 1.4 LLVM在线工具7
展开全部(共 217 章节)
  1. 1.5 本章小结9
  2. 第2章 IR基础知识10
  3. 2.1 IR分类11
  4. 2.1.1 树IR11
  5. 2.1.2 线性IR11
  6. 2.1.3 图IR12
  7. 2.2 CFG的基本块与构建14
  8. 2.2.1 基本块14
  9. 2.2.2 构建CFG15
  10. 2.3 静态单赋值15
  11. 2.3.1 基本概念16
  12. 2.3.2 SSA构造19
  13. 2.3.3 SSA析构19
  14. 2.3.4 SSA分类28
  15. 2.3.5 基本块参数和Phi节点29
  16. 2.4 本章小结30
  17. 第3章 数据流分析基础知识31
  18. 3.1 半格、格与不动点31
  19. 3.1.1 半格和偏序集31
  20. 3.1.2 格33
  21. 3.1.3 不动点34
  22. 3.2 数据流分析原理及描述35
  23. 3.2.1 数据流方程形式化描述36
  24. 3.2.2 数据流分析的理论描述40
  25. 3.3 数据流方程示例43
  26. 3.3.1 活跃变量43
  27. 3.3.2 到达定值45
  28. 3.3.3 常量传播46
  29. 3.4 扩展阅读:数据流的遍历性能分析49
  30. 3.5 本章小结50
  31. 第4章 支配分析51
  32. 4.1 支配和逆支配51
  33. 4.1.1 支配和逆支配相关定义51
  34. 4.1.2 支配和逆支配含义解析53
  35. 4.2 支配树和支配边界的实现55
  36. 4.2.1 半支配节点及相关概念56
  37. 4.2.2 LT算法和Semi-NCA的差异57
  38. 4.2.3 支配边界的实现58
  39. 4.3 扩展阅读:支配树相关小课堂58
  40. 4.3.1 支配树构造算法及比较59
  41. 4.3.2 如何快速判断任意两个节点的支配关系60
  42. 4.4 本章小结62
  43. 第5章 循环基本知识63
  44. 5.1 自然循环64
  45. 5.2 LLVM的循环实现65
  46. 5.2.1 循环识别66
  47. 5.2.2 循环规范化67
  48. 5.3 本章小结71
  49. 第6章 TableGen介绍72
  50. 6.1 目标描述语言72
  51. 6.1.1 词法72
  52. 6.1.2 语法74
  53. 6.2 TableGen工具链77
  54. 6.2.1 从TD定义到记录78
  55. 6.2.2 从记录到C++代码81
  56. 6.3 扩展阅读:如何在TD文件中定义匹配83
  57. 6.3.1 隐式定义匹配模板83
  58. 6.3.2 复杂匹配模板84
  59. 6.3.3 匹配规则支撑类86
  60. 6.4 本章小结86
  61. 第二部分 代码生成
  62. 第7章 指令选择91
  63. 7.1 指令选择的处理流程92
  64. 7.2 SelectionDAGISel算法分析94
  65. 7.2.1 SDNode分类96
  66. 7.2.2 LLVM IR到SDNode的转换98
  67. 7.2.3 SDNode合法化108
  68. 7.2.4 机器指令选择117
  69. 7.2.5 从DAG输出MIR123
  70. 7.3 快速指令选择算法分析126
  71. 7.4 全局指令选择算法原理与实现128
  72. 7.4.1 全局指令选择的阶段128
  73. 7.4.2 GMIR生成129
  74. 7.4.3 指令合法化133
  75. 7.4.4 寄存器类型选择137
  76. 7.4.5 机器指令选择141
  77. 7.4.6 合并优化143
  78. 7.5 本章小结146
  79. 第8章 指令调度147
  80. 8.1 LLVM指令调度149
  81. 8.1.1 指令调度算法150
  82. 8.1.2 拓扑排序算法151
  83. 8.2 Linearize调度器152
  84. 8.2.1 构造依赖图153
  85. 8.2.2 对依赖图进行调度153
  86. 8.3 Fast调度器156
  87. 8.3.1 Fast调度器实现157
  88. 8.3.2 物理寄存器依赖场景的处理158
  89. 8.3.3 示例分析162
  90. 8.4 BURR List调度器166
  91. 8.4.1 影响指令调度的关键因素166
  92. 8.4.2 指令优先级计算方法168
  93. 8.4.3 示例分析170
  94. 8.5 Source List调度器173
  95. 8.6 Hybrid List调度器174
  96. 8.7 Pre-RA-MISched调度器174
  97. 8.7.1 Pre-RA-MISched调度器实现174
  98. 8.7.2 调度区域的划分175
  99. 8.7.3 影响Pre-RA-MISched调度器的关键因素175
  100. 8.7.4 MIR指令时延的计算175
  101. 8.7.5 寄存器压力的计算177
  102. 8.7.6 示例分析181
  103. 8.8 Post-RA-TDList调度器186
  104. 8.8.1 Post-RA-TDList调度器实现186
  105. 8.8.2 示例分析186
  106. 8.9 Post-RA-MISched调度器189
  107. 8.10 循环调度190
  108. 8.10.1 循环调度算法实现190
  109. 8.10.2 示例分析194
  110. 8.11 扩展阅读:调度算法的影响因素200
  111. 8.12 本章小结203
  112. 第9章 基于SSA形式的编译优化204
  113. 9.1 前期尾代码重复205
  114. 9.1.1 尾代码重复原理205
  115. 9.1.2 尾代码收益判断207
  116. 9.1.3 执行尾代码重复优化209
  117. 9.2 Phi优化212
  118. 9.3 栈着色213
  119. 9.4 栈槽分配217
  120. 9.5 死指令消除218
  121. 9.6 IPL优化之If-Conversion219
  122. 9.7 循环不变量外提224
  123. 9.8 公共子表达式消除224
  124. 9.9 代码下沉227
  125. 9.10 窥孔优化228
  126. 9.11 本章小结231
  127. 第10章 寄存器分配232
  128. 10.1 寄存器分配流程解析233
  129. 10.1.1 Fast算法执行流程233
  130. 10.1.2 Basic算法执行流程233
  131. 10.2 寄存器分配涉及的Pass241
  132. 10.2.1 死亡和未定义子寄存器检测241
  133. 10.2.2 隐式定义指令处理243
  134. 10.2.3 不可达MBB消除243
  135. 10.2.4 活跃变量分析244
  136. 10.2.5 Phi消除246
  137. 10.2.6 二地址指令变换249
  138. 10.2.7 指令编号255
  139. 10.2.8 变量活跃区间分析256
  140. 10.2.9 寄存器合并256
  141. 10.2.10 MBB的频率分析259
  142. 10.2.11 寄存器分配:直接分配与间接分配265
  143. 10.2.12 将虚拟寄存器映射到物理寄存器266
  144. 10.2.13 栈槽着色266
  145. 10.2.14 复制传播267
  146. 10.2.15 循环不变量外提269
  147. 10.3 Fast算法实现269
  148. 10.3.1 Fast算法实现思路269
  149. 10.3.2 示例分析270
  150. 10.4 Basic算法实现276
  151. 10.4.1 算法实现思路276
  152. 10.4.2 示例分析277
  153. 10.5 Greedy算法实现289
  154. 10.5.1 Greedy算法实现思路290
  155. 10.5.2 算法实现的核心:拆分291
  156. 10.5.3 区域拆分之Hopfield网络详解293
  157. 10.5.4 使用Hopfield网络求解拆分296
  158. 10.5.5 示例分析300
  159. 10.6 PBQP算法实现313
  160. 10.6.1 PBQP介绍313
  161. 10.6.2 寄存器分配和PBQP的关系314
  162. 10.6.3 PBQP问题求解314
  163. 10.6.4 寄存器分配问题建模示例317
  164. 10.6.5 PBQP实现原理以及示例分析318
  165. 10.7 扩展阅读:图着色分配324
  166. 10.8 4种算法对比326
  167. 10.9 本章小结329
  168. 第11章 函数栈帧生成和非SSA形式的编译优化330
  169. 11.1 函数栈帧生成以及相关优化331
  170. 11.1.1 栈帧生成331
  171. 11.1.2 代码下沉332
  172. 11.1.3 栈帧范围收缩335
  173. 11.2 MIR优化337
  174. 11.2.1 分支折叠337
  175. 11.2.2 尾代码重复347
  176. 11.2.3 复制传播347
  177. 11.3 MIR指令变换和调度347
  178. 11.4 MIR信息收集及布局优化348
  179. 11.4.1 基本块布局优化349
  180. 11.4.2 公共代码提取355
  181. 11.4.3 函数冷热代码分离359
  182. 11.4.4 代码布局优化比较363
  183. 11.5 扩展阅读:后缀树构造和应用365
  184. 11.5.1 后缀树的构造365
  185. 11.5.2 后缀树的应用372
  186. 11.6 本章小结372
  187. 第12章 生成机器码373
  188. 12.1 MC374
  189. 12.2 机器码生成过程375
  190. 12.2.1 汇编代码生成376
  191. 12.2.2 二进制代码生成378
  192. 12.3 本章小结381
  193. 第13章 添加一个新后端382
  194. 13.1 适配新后端的各个阶段382
  195. 13.1.1 指令选择阶段的适配383
  196. 13.1.2 寄存器分配相关的适配383
  197. 13.1.3 插入前言/后序384
  198. 13.1.4 机器码生成相关的适配384
  199. 13.2 添加新后端所需要的适配385
  200. 13.2.1 定义TD文件386
  201. 13.2.2 指令选择处理386
  202. 13.2.3 栈帧处理387
  203. 13.2.4 机器码生成处理388
  204. 13.2.5 添加新后端到LLVM框架中388
  205. 13.3 本章小结389
  206. 附录
  207. 附录A LLVM的中间表示392
  208. 附录B BPF介绍407
  209. 附录C Pass的分类与管理413

常见问题

《深入理解LLVM:代码生成》适合谁读?

适合希望系统学习技术概念、实践方法、工具使用和行业知识的读者。

《深入理解LLVM:代码生成》阅读难度高吗?

建议先看简介、目录、作者和相关书籍,再判断是否适合当前阶段阅读。

《深入理解LLVM:代码生成》纸质书值得买吗?

当前暂未接入已核验的纸质书购买链接,建议通过出版社、京东、当当等正版渠道核对版本后购买。

《深入理解LLVM:代码生成》哪个版本更适合?

优先选择作者、译者、出版社、出版年份和 ISBN 信息清楚的版本;经典作品可优先选择校注、导读或权威出版社版本。

在哪里可以合法获取《深入理解LLVM:代码生成》?

当前没有确认授权的电子书下载资源,也暂未接入已核验购买链接;商业出版物不提供未授权下载,建议通过出版社、京东、当当或官方电子书平台核对获取。

如何继续查找《深入理解LLVM:代码生成》相关书籍?

可以进入 彭成寒/李灵/戴贤泽/王志磊/俞佳嘉 作者页查看其他作品,也可以通过分类、标签、排行榜、人工推荐和“读完这本还可以读”继续发现相近主题。

手机扫码下载

使用手机扫描二维码

扫码后会直接打开下载链接。

电子书下载二维码

手机端点击下载会直接跳转,无需扫码。