游客,欢迎您!
登录
注册
您的建议
0
高级检索
全部
题名
ISBN
作者
出版社
客户端下载
个人中心
学科
哲学
哲学
经济学
理论经济学
应用经济学
法学
法学
政治学
社会学
民族学
马克思主义理论
公安学
教育学
教育学
心理学
体育学
文学
中国语言文学
外国语言文学
新闻传播学
历史学
考古学
中国史
世界史
理学
数学
物理学
化学
天文学
地理学
大气科学
海洋科学
地球物理学
地质学
生物学
系统科学
科学技术史
生态学
统计学
工学
力学
机械工程
光学工程
仪器科学与技术
材料科学与工程
冶金工程
动力工程及工程热物理
电气工程
电子科学与技术
信息与通信工程
控制科学与工程
计算机科学与技术
建筑学
土木工程
水利工程
测绘科学与技术
化学工程与技术
地质资源与地质工程
矿业工程
石油与天然气工程
纺织科学与工程
轻工技术与工程
交通运输工程
船舶与海洋工程
航空宇航科学与技术
兵器科学与技术
核科学与技术
农业工程
林业工程
环境科学与工程
生物医学工程
食品科学与工程
城乡规划学
风景园林学
软件工程
生物工程
安全科学与工程
公安技术
农学
作物学
园艺学
农业资源利用
植物保护
畜牧学
兽医学
林学
水产
草学
医学
基础医学
临床医学
口腔医学
公共卫生与预防医学
中医学
中西医结合
药学
中药学
特种医学
医学技术
护理学
军事学
军事思想及军事历史
战略学
战役学
战术学
军队指挥学
军制学
军队政治工作学
军事后勤学与军事装备学
军事装备学
军事训练学
管理学
管理科学与工程
工商管理
农林经济管理
公共管理
图书馆、情报与档案管理
艺术学
艺术学理论
音乐与舞蹈学
戏剧与影视学
美术学
设计学
中图法
A 马克思主义、列宁主义、毛泽东思想、邓小平理论
B 哲学、宗教
哲学理论
C 社会科学总论
社会学
D 政治、法律
政治理论
E 军事
军事理论
、
世界军事
F 经济
经济学
、
农业经济
G 文化、科学、教育、体育
H 语言、文字
语言学
、
汉语
I 文学
文学理论
、
世界文学
J 艺术
艺术理论
、
摄影艺术
K 历史、地理
史学理论
N 自然科学总论
系统科学
O 数理科学和化学
数学
P 天文学、地球科学
天文学
Q 生物科学
植物学
、
动物学
R 医药、卫生
医学研究方法
S 农业科学
农业经济
、
园艺
T 工业技术
工业技术理论
U 交通运输
交通运输经济
V 航空、航天
航空、航天医学
X 环境科学、安全科学
Z 综合性图书
丛书
、
辞典
首页
新书专区
专题推荐
排行榜
数字资源平台
>
工学
>
计算机科学与技术(可授工学、理学学位)
>
计算机软件与理论
>
LLVM编译器原理与实践
阅读次数:
1
下载次数:
0
荐购次数:
0
收藏次数:
0
LLVM编译器原理与实践
作者:
吴建明
,
吴一昊
编著
出版社:
机械工业出版社
出版时间:
2024.10
ISBN:
978-7-111-76354-3
主题:
编译程序
中图法分类号:
TP314
【中图法分类】
T 工业技术
>
TP自动化技术、计算机技术
>
TP3计算技术、计算机技术
>
TP31计算机软件
【学科分类】
工学
>
计算机科学与技术(可授工学、理学学位)
>
计算机软件与理论
工学
>
电子信息
>
软件工程
建议阅读终端:
扫描用手机阅读此书支持Android/iPhone
在线试读
EPUB格式
下载
EPUB下载
分享到
新浪微博
QQ空间
豆瓣网
注:如果您的电脑尚未安装PC客户端,请先
安装客户端
后再下载阅读!
编辑推荐
简介
目录
评论
这本书是关于LLVM这一强大而灵活的编译技术的详尽指南,它将帮助理解编译器的设计和实现。鼓励每位对编译器技术有兴趣的读者阅读这本书,从而提升自身技术能力。
简介
本书力求将LLVM基础知识理论与案例实践融合在一起,进行详细的介绍,帮助读者理解LLVM工作原理,同时按照应用与设备需要,使用LLVM进行相应的优化与部署。本书包含大量示例和代码片段,以帮助读者掌握LLVM的编译器开发环境。本书共11章,包括编译和安装LLVM、外部项目、LLVM编译器、Clang前端基础、Clang架构与实践示例、LLVMIR实践、LLVM芯片编译器实践示例、LLVM编译器示例代码分析、LLVM优化示例、LLVM后端实践,以及MLIR编译器。
目录
封面
封二
扉页
版权
前言
第1章 编译和安装LLVM
1.1 LLVM系统入门
1.1.1 查看LLVM(包括Clang等子项目)
1.1.2 配置和构建LLVM与Clang
1.2 独立构建
1.3 软硬件环境要求
1.3.1 硬件环境
1.3.2 软件环境
1.3.3 主机C++编译器和标准库
1.3.4 获取流行主机C++工具链
1.4 LLVM入门
1.4.1 术语和符号
1.4.2 打开LLVM存档文件
1.4.3 从Git中签出LLVM源代码
1.4.4 本地LLVM配置
1.4.5 编译LLVM套件源代码
1.4.6 交叉编译LLVM
1.4.7 LLVM目标文件的位置
1.4.8 可选配置项目
1.5 目录布局
1.6 使用LLVM工具链的示例
1.7 LLVM常见问题
1.8 LLVM相关链接
第2章 LLVM外部项目
2.1 LLDB调试器
2.1.1 LLDB基础知识
2.1.2 LLDB控制台
2.2 C++标准库libc++
2.2.1 libc++库概述
2.2.2 Ubuntu下安装Clang和libc++
2.3 compiler-rt运行时库
2.3.1 compiler-rt项目组成
2.3.2 compiler-rt的作用
2.3.3 平台支持
2.3.4 compiler-rt源代码结构
2.3.5 构建compiler-rt
2.4 DragonEgg
2.4.1 DragonEgg将LLVM作为GCC后端
2.4.2 DragonEgg实践
2.5 构建RISC-V LLVM并编译和运行test-suite
2.5.1 构建RISC-V的前期准备
2.5.2 开始构建
2.5.3 编译test-suite
2.5.4 运行LLVM test-suite
2.6 Clang附加工具
第3章 LLVM编译器
3.1 LLVM与Clang源代码的下载及编译
3.1.1 下载并编译LLVM
3.1.2 Clang源代码的下载与编译
3.2 LLVM编译器基础结构
3.2.1 LLVM工作原理
3.2.2 LLVM的主要子项目
3.2.3 LLVM与Clang语法
3.3 LLVM三段式编译
3.3.1 传统编译器三段式设计及其实现
3.3.2 LLVM的三段式设计的实现
3.4 LLVM与Clang架构
3.4.1 LLVM与Clang架构简介
3.4.2 编译架构特点分析
3.5 LLVM与GCC的区别
3.6 LLVM IR
3.6.1 什么是LLVM IR
3.6.2 LLVM IR编译流程
3.6.3 如何得到IR
3.6.4 IR文件链接
3.6.5 IR文件编译流程
3.6.6 IR语法中的关键字
3.7 词法分析与语法分析
3.7.1 词法分析
3.7.2 AST结构分析
3.8 交叉编译器
3.8.1 主机与目标机
3.8.2 为什么要交叉编译
3.8.3 交叉编译难点
3.9 后端开发
3.9.1 XLA后端分析
3.9.2 SSA问题分析
3.9.3 目标信息代码分析
3.10 LLVM示例实践
3.10.1 如何在ARM上编译LLVM/Clang
3.10.2 如何编写LLVM Pass
3.10.3 基于LLVM的依赖分析方案
3.11 LLVM数据并行、时间并行和多核并行
第4章 Clang前端基础
4.1 编译器Clang会代替GCC吗
4.1.1 GCC概述
4.1.2 Clang概述
4.1.3 GCC基本设计与示例
4.1.4 GCC与Clang的区别
4.2 使用Clang静态分析器进行分析调试
4.2.1 静态分析器概述
4.2.2 静态分析器库的结构
4.2.3 静态分析器工作原理
4.2.4 内部检查器
4.2.5 关于Clang静态分析器
4.3 如何进行编译时间混编优化
4.4 Clang模块实现原理探究
4.4.1 ModuleMap与Umbrella
4.4.2 模块的构建
4.4.3 Clang模块复用机制
4.4.4 PCH与PCM文件
4.5 使用Clang校验AST
4.5.1 制作Clang命令行工具的初衷
4.5.2 制作Clang命令行工具主要步骤
4.5.3 环境搭建
4.5.4 开发框架选择
4.5.5 代码开发
4.6 LLVM与Clang的底层原理
4.6.1 传统编译器设计
4.6.2 Clang前端
4.6.3 IR的优化
4.6.4 bitcode
4.6.5 编译流程总结示例
4.7 自定义Clang命令,利用LLVM Pass实现对Objective-C函数的静态插桩
4.7.1 Objective-C中的常见的函数hook实现思路
4.7.2 什么是LLVM Pass
4.7.3 编译过程
4.8 指令系统
4.8.1 指令系统概述
4.8.2 指令格式
4.8.3 指令的寻址方式
4.8.4 指令的类型与功能
4.8.5 CISC和RISC的比较
第5章 Clang架构与实践示例
5.1 C语言编译器Clang
5.1.1 Clang和GCC编译器架构
5.1.2 Clang起源
5.2 Clang模块内部实现原理及源代码分析
5.2.1 编译参数分析
5.2.2 预处理
5.3 好用的代码检查工具
5.4 Clang在Objective-C中的使用
5.4.1 终端使用特点
5.4.2 Clang的简单使用
5.5 Clang重排对象类结构分析
5.5.1 概述
5.5.2 根类、超类、子类
5.6 使用Clang编译C程序并在安卓设备中执行
5.7 分析Swift高效的原因
5.7.1 Swift的函数派发机制
5.7.2 结构体定义的内存分配
5.7.3 编译SIL
5.7.4 Clang编译流程的缺点
5.7.5 Swift的特点及其编译器的使用流程
5.8 LLVM中矩阵的实现分析
5.8.1 背景说明
5.8.2 功能实现
5.8.3 举例说明
第6章 LLVM IR实践
6.1 LLVM架构简介
6.1.1 LLVM IR的演变
6.1.2 LLVM IR是什么
6.1.3 LLVM架构
6.1.4 前端生成中间代码
6.1.5 LLVM后端优化IR
6.1.6 LLVM后端生成汇编代码
6.2 获取LLVM IR
6.2.1 LLVM IR的三种形式
6.2.2 LLVM IR结构
6.2.3 标识符与变量
6.3 LLVM IR实践——Hello world
6.3.1 LLVM IR程序设计方法概述
6.3.2 最基本的程序
6.3.3 基本概念解释
6.3.4 主程序
6.4 LLVM IR数据表示
6.4.1 汇编层次的数据表示
6.4.2 LLVM IR中的数据表示
6.4.3 链接类型
6.4.4 可见性
6.4.5 寄存器
6.5 LLVM IR类型系统
6.5.1 类型系统
6.5.2 元数据类型
6.5.3 属性
6.6 LLVM IR控制语句
6.6.1 汇编语言层面的控制语句
6.6.2 LLVM IR层面的控制语句
6.7 LLVM IR语法链接类型
6.8 LLVM IR函数
6.8.1 定义与声明
6.8.2 传递参数与获得返回值
6.8.3 内置函数、属性和元数据
6.9 LLVM IR异常处理
6.9.1 异常处理的要求
6.9.2 LLVM IR的异常处理
6.9.3 怎么抛
6.9.4 怎么接
第7章 LLVM芯片编译器实践示例
7.1 编译器基本概念
7.1.1 LLVM的模块化编译器框架
7.1.2 前端在干什么
7.1.3 后端在干什么
7.1.4 DAG下译
7.1.5 DAG合法化
7.1.6 小结
7.2 从无到有开发
7.2.1 不必从头开始开发
7.2.2 需要添加的文件类型
7.2.3 从文件角度看整体框架
7.2.4 从类继承与派生角度看整体框架
7.3 芯片的整体架构部分
7.3.1 ×××.h类文件
7.3.2 ×××.td类文件
7.3.3 ××× TargetMachine.cpp和××× TargetMachine.h类文件
7.3.4 ××× MCTargetDesc类文件
7.3.5 ××× baseInfo类文件
7.3.6 ××× TargetInfo类文件
7.3.7 ××× Subtarget类文件
7.3.8 几个容易混淆的概念
7.3.9 小结
7.4 寄存器信息
7.4.1××× Registerinfo.td类文件
7.4.2 ××× RegisterInfo类文件
7.4.3 ××× SERegisterinfo类文件
7.5 指令描述的.td文件
7.5.1 ××× InstrFormats.td类文件
7.5.2 ××× InstrInfo.td类文件
7.5.3 依次定义指令
7.5.4 定义指令的自动转换
7.5.5 小结
7.6 指令描述的.cpp文件
7.6.1 ××× InstrInfo.cpp(.h)类文件
7.6.2 ××× SEInstrInfo.cpp(.h)类文件
7.6.3 ××× AnalyzeImmediate.cpp(.h)类文件
第8章 LLVM编译器示例代码分析
8.1 建立编译器的基础框架
8.2 使用LLVM实现一个简单编译器
8.2.1 目标
8.2.2 词法分析
8.2.3 语法分析
8.2.4 LLVM IR的代码生成
8.2.5 优化器
8.2.6 添加JIT编译器
8.2.7 静态单一赋值
8.2.8 控制流
8.2.9 用户自定义操作符
8.2.10 可变变量
第9章 LLVM优化示例
9.1 LLVM优化示例介绍
9.1.1 编译器优化目标
9.1.2 LLVM优化Pass如何工作
9.1.3 聚集对象的标量替换
9.1.4 公共子表达式消除
9.1.5 全局变量优化器
9.1.6 指令合并器
9.2 改进优化条件
9.2.1 偏转循环移动代码
9.2.2 运行规范化自然循环
9.2.3 归纳变量简化
9.2.4 进行比特追踪死代码消除
9.3 链接时优化
9.3.1 LTO基本概念
9.3.2 LTO优化处理
9.3.3 linkmap分析
9.4 Nutshell LLVM LTO
9.4.1 ThinLTO
9.4.2 高度并行的前端处理和初始优化
9.5 LLVM完全LTO
9.5.1 LLVM完全LTO的目标
9.5.2 LLD的整个执行流程
9.6 LLVM核心类简明示例
第10章 LLVM后端实践
10.1 LLVM后端概述
10.1.1 LLVM后端基本概念
10.1.2 使用Cpu0作为硬件的例子
10.2 LLVM新后端初始化和软件编译
10.2.1 新后端初始化和软件编译
10.2.2 LLVM代码结构
10.2.3 Cpu0后端初始化
10.2.4 LLVM后端结构
10.2.5 增加AsmPrinter
10.2.6 增加DAGToDAGISel
10.2.7 增加Prologue和Epilogue部分代码
10.2.8 操作数模式
10.2.9 小结
10.3 算术和逻辑运算指令
10.3.1 算术运算指令
10.3.2 逻辑运算指令
10.4 生成目标文件
10.4.1 简要说明
10.4.2 文件新增
10.4.3 文件修改
10.4.4 检验成果
10.5 全局变量
10.5.1 全局变量编译选项
10.5.2 代码修改
10.5.3 检验成果
10.5.4 小结
10.6 更多数据类型
10.6.1 实现类型
10.6.2 代码修改
10.6.3 检验成果
10.7 控制流
10.7.1 控制流语句
10.7.2 消除无用的JMP指令
10.7.3 填充跳转延迟槽
10.7.4 条件MOV指令
10.8 函数调用
10.8.1 栈帧结构
10.8.2 传入参数
10.8.3 函数调用优化
10.9 ELF文件支持
10.9.1 ELF文件
10.9.2 支持反汇编
10.10 汇编
10.10.1 栈帧管理
10.10.2 汇编器
10.10.3 内联汇编
10.11 使用仿真器验证编译器
10.11.1 运行仿真器
10.11.2 小结
第11章 MLIR编译器
11.1 MLIR语言参考
11.1.1 高层结构
11.1.2 MLIR符号
11.1.3 MLIR作用域
11.1.4 控制流和SSACFG作用域
11.1.5 类型系统
11.1.6 方言类型
11.2 MLIR方言及运行分析
11.2.1 MLIR简介
11.2.2 常见的IR表示系统
11.2.3 MLIR的提出
11.3 方言及运行详解
11.3.1 方言
11.3.2 运行结构拆分
11.3.3 创建新的方言操作
11.3.4 将方言加载到MLIRContext中
11.3.5 定义操作
11.3.6 创建方言流程总结(使用ODS)
11.4 MLIR运算与算子
11.4.1 MLIR运算与算子概述
11.4.2 运算类(Operation)
11.4.3 算子类(Op)
11.4.4 MLIR OpBase.td算子类的作用
11.4.5 MLIR运算的构建过程
11.4.6 MLIR TableGen后端生成算子代码
11.5 MLIR的缘起
11.6 MLIR部署
11.6.1 MLIR部署流程
11.6.2 MLIR应用
11.7 MLIR介绍
11.8 MLIR基本数据结构
11.8.1 MLIR源代码目录
11.8.2 MLIR简易UML类图
11.8.3 开发中用到的具体数据结构
11.9 MLIR的出现背景与提供的解决方案
11.9.1 概述
11.9.2 解决方案
11.10 机器学习编译器:MLIR方言体系
11.10.1 基础组件
11.10.2 方言体系
参考文献
封三
封底
展开 ∨
评论
评分:
1
2
3
4
5
评价:
请输入评论信息
5
0
/255
我要评论
全部评论(0)
默认排序
默认排序
最新排序
相关推荐
高级C/C++编译技术:典藏版
(美)米兰·斯特瓦诺维奇(Milan Stevanovic)著
分布式系统架构:架构策略与难题求解 the hard parts
(美)尼尔·福特(Neal Ford)[等]著
测试驱动开发:入门、实战与进阶
(美)萨利姆·西迪基(Saleem Siddiqui)著
软件灵活性设计:如何避免陷入编程困境 how to avoid programming yourself into a corner
(美)克里斯·汉森(Chris Hanson) ,(美)杰拉尔德·杰伊·萨斯曼(Gerald Jay Sussman)著
精通API架构:设计、运维与演进
(英)詹姆斯·高夫(James Gough) ,(英)丹尼尔·布莱恩特(Daniel Bryant) ,(英)马修·奥本(Matthew Auburn)著
游戏设计:深层设计思想与技巧
徐炜泓编著
Linux 9系统管理全面解析
沈超,胡波编著
Windows内核调试技术
谭文著
C语言程序设计实验教程
潘萌,张杰,狄红卫编著
从零开始学UI设计:思路与技法
沈学渊,陈仕编著
请输入图形验证码
换一换
Loading...