• 深入理解LLVM:代码生成9787111764151
21年品牌 40万+商家 超1.5亿件商品

深入理解LLVM:代码生成9787111764151

正版图书,可开发票,请放心购买。

81.75 7.5折 109 全新

库存75件

广东广州
认证卖家担保交易快速发货售后保障

作者彭成寒 李灵 戴贤泽 王志磊 俞佳嘉 著

出版社机械工业出版社

ISBN9787111764151

出版时间2023-03

装帧平装

开本16开

定价109元

货号17651261

上书时间2025-01-07

哲仁书店

已实名 已认证 进店 收藏店铺

   商品详情   

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

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

通过阅读本书,读者理解和掌握LLVM代码生成过程,可以根据本书指导为基于LLVM开发一款新后端的编译器。同时本书还介绍了各种编译过程中使用到的算法,读者可以根据场景对算法进行增强从而达到性能优化目的。

主编推荐
1

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP