搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
LLVM Cookbook中文版
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787121288470
  • 作      者:
    (印)Mayur Pandey,(印)Suyog Sarda著
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2016
收藏
编辑推荐

本书特色:简洁明了、容易效仿的风格||选择*重要的任务和问题||仔细组织有效解决问题的指令||清晰解释所完成的工作||将解决方案应用于其他场景

本书包括以下内容:

√ 介绍LLVM的模块化设计及LLVM工具

√ 编写一门语言的前端

√ 增加JIT支持,使用不同语言的前端

√ 学习LLVM Pass基础架构及LLVM Pass管理器

√ 创建分析和转换的优化Pass

√ 从头开始构建LLVM TOY语言后端

√ 在SelectionDAG的层面进行代码优化,并实现寄存器分配


展开
作者简介

Mayur Pandey 是一名专业的软件工程师,同时也是一位开源软件的爱好者。他专注于编译器以及编译器工具的开发,是LLVM 开源社区的活跃贡献者,也是Tizen 编译器项目的一员,他对其他编译器也有着亲身实践经验。

Mayur 在印度阿拉哈巴德的Motilal Nehru 国家技术研究所获得学士学位。目前居住在印度班加罗尔。

Suyog Sarda 是一名专业的软件工程师,同时也是一位开源软件的爱好者。他专注于编译器以及编译器工具的开发,是LLVM 开源社区的活跃贡献者,也是Tizen 编译器项目的一员。除此之外,Suyog 也参与了ARM 和x86 架构的代码改进工作。他对其他的编译器也有着亲身实践经验。他对编译器的主要研究在于代码优化和向量化。除了编译器之外,Suyog 也对Linux 内核的开发很感兴趣。他曾在2012 年于迪拜由Birla技术协会举办的IEEE 国际云计算技术应用大会的议程上发表技术论文,题为“SecureCo-resident Virtualization in Multicore Systems by VM Pinning and Page Coloring”。他在印度普纳工程大学获得计算机学士学位。目前居住于印度班加罗尔。


展开
内容介绍

《LLVM Cookbook中文版》以任务驱动的方式,带领读者编写基于LLVM 的编译器前端、优化器、后端。通过丰富的实例,读者能够从中理解LLVM 的架构,以及如何使用LLVM 来编写自己的编译器。

相比于传统的介绍编译技术的书籍,此书更偏向于实战,因此适合熟悉编译但对LLVM 比较陌生的人员,也适合正在学习编译技术并且在寻找实战机会的人员。


展开
精彩书摘

译者序

LLVM 这个名字源于Lower Level Virtual Machine,但这个项目并不局限于创建一个虚拟机,它已经发展成为当今炙手可热的编译器基础框架。LLVM 最初以C/C++为编译目标,近年来经过众多机构和开源社区的努力,LLVM 已经能够为ActionScript、D、Fortran、Haskell、Java、Objective-C、Swift、Python、Ruby、Rust、Scala 等众多语言提供编译支持,而一些新兴语言则直接采用了LLVM 作为后端。可以说,LLVM 对编译器领域的发展起到了举足轻重的作用。

本书是目前为数不多的介绍LLVM 的书籍。本书从LLVM 的构建与安装开始说起,介绍了LLVM 的设计思想、LLVM 工具链、前端、优化器、后端,涵盖了LLVM 的绝大部分内容。本书以任务驱动的方式对内容进行介绍,围绕着实现TOY 语言的编译器,每一章节都会带领读者编写代码。在第2 章实现了编译器的前端,第4、5 章逐步实现优化器,后面的章节则实现了编译器后端。书中以实践的方式进行讲述,既阐述了原理,又让读者参与到编译器的开发当中,这一方面降低了学习LLVM 的门槛,另一方面也让读者在实践中理解LLVM 的细节。

作为译者,我觉得能够翻译此书也是一种缘分。最初是因为一次偶然的机会,我接触了一些自然语言处理的内容,在此过程中我领悟了词法分析和语法分析是怎么一回事;之后凭借着自己先前了解的零零碎碎的知识,在没有系统学习过编译原理的情况下写出了自己的第一个解释器(当然它很不完备);接着便去系统学习编译原理,由于有了一定的实践基础,理解那些概念也轻松了许多;而关于这本书的翻译,则是因为在豆瓣上看到了一位豆友转发的消息,遂联系出版社的张春雨老师;最后在翻译此书的过程中,也收获了很多。

所以在这里要感谢带我走近自然语言处理的那位朋友,要感谢转发此消息的那位豆友,还要感谢博文视点的张春雨老师。人生充满了机缘巧合,我很幸运能够遇见你们。

与此同时,我也希望此书能够揭开编译器的面纱,能够让国内更多的人了解编译技术。

王欢明

2015 年8 月


展开
目录

前言  XI

第1 章 LLVM设计与使用  1

概述  1

模块化设计  2

交叉编译Clang/LLVM  6

将C 源码转换为LLVM 汇编码  8

将LLVM IR 转换为bitcode  9

将LLVM bitcode 转换为目标平台汇编码  12

将LLVM bitcode 转回为LLVM 汇编码  14

转换LLVM IR  15

链接LLVM bitcode  18

执行LLVM bitcode  19

使用C 语言前端——Clang  20

使用GO 语言前端  24

使用DragonEgg  25

第2 章 实现编译器前端  29

概述  29

定义TOY 语言  30

实现词法分析器  32

定义抽象语法树  35

实现语法分析器  38

解析简单的表达式  39

解析二元表达式  42

为解析编写驱动  45

对TOY 语言进行词法分析和语法分析  47

为每个AST 类定义IR 代码生成方法  48

为表达式生成IR 代码  49

为函数生成IR 代码  51

增加IR 优化支持 55

第3 章 扩展前端并增加JIT 支持 57

概述  57

处理条件控制结构——if/then/else 结构  58

生成循环结构  64

处理自定义二元运算符  71

处理自定义一元运算符. 77

增加JIT 支持  83

第4 章 准备优化  87

概述  87

多级优化  88

自定义LLVM Pass  89

使用opt 工具运行自定义Pass  92

在新的Pass 中调用其他Pass  93

使用Pass 管理器注册Pass 96

实现一个分析Pass  99

实现一个别名分析Pass  102

使用其他分析Pass  105

第5 章 实现优化  109

概述  109

编写无用代码消除Pass  110

编写内联转换Pass  115

编写内存优化Pass  119

合并LLVM IR  121

循环的转换与优化 123

表达式重组  126

IR 向量化  127

其他优化Pass  134

第6 章 平台无关代码生成器  139

概述  139

LLVM IR 指令的生命周期  140

使用GraphViz 可视化LLVM IR 控制流图  143

使用TableGen 描述目标平台  150

定义指令集  151

添加机器码描述  152

实现MachineInstrBuilder 类 156

实现MachineBasicBlock 类  157

实现MachineFunction 类  159

编写指令选择器  160

合法化SelectionDAG  166

优化SelectionDAG   173

基于DAG 的指令选择  179

基于SelectionDAG 的指令调度  186

第7 章 机器码优化  191

概述  191

消除机器码公共子表达式 192

活动周期分析  203

寄存器分配  209

插入头尾代码 215

代码发射  219

尾调用优化  221

兄弟调用优化 225

第8 章 实现LLVM 后端  227

概述 227

定义寄存器和寄存器集合  228

定义调用约定  230

定义指令集  231

实现栈帧lowering 232

打印指令  236

选择指令  240

增加指令编码  244

子平台支持 246

多指令lowering  249

平台注册  251

第9 章 LLVM项目最佳实践  265

概述265

LLVM 中的异常处理  265

使用sanitizer  271

使用LLVM 编写垃圾回收器  273

将LLVM IR 转换为JavaScript  279

使用Clang 静态分析器 281

使用bugpoint  282

使用LLDB  286

使用LLVM 通用Pass  291


展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证