目录
LLVM简介:
LLVM 是一个模块化的、可重用的编译器和工具链的集合。尽管LLVM(low level virtual machine)这个名字 与 传统虚拟机 几乎没有关系。官方解释说:“LLVM”本身不是首字母缩略词,它是项目的全名。
LLVM比 gcc 先进在很多方面,我个人认为在jit,面向程序整个生命(所以运行过程)的分析和优化(“A Compilation Framework for Lifelong Program Analysis & Transformation”),前后端隔离,引入bison,flex等等,都比gcc先进。
用于C和C++的LLVM编译系统包括以下内容:
- C、C++、Objto-C、FORTRAN等前端支持ANSI标准C和C++语言。此外,还支持许多GCC扩展。
- LLVM指令集的一种稳定实现,它作为联机和脱机代码表示,以及汇编(ASCII)和字节码(二进制)读写器,以及校验器。
- 一个功能强大的过程管理系统,它根据过程的依赖性自动对传递(包括分析、转换和代码生成过程)进行排序,并对其进行管道传输以提高效率。
- 广泛的全局标量优化。
- 一个具有丰富分析和转换集的链接时间过程间优化框架,包括复杂的整个程序指针分析、调用图构造和对概要文件引导优化的支持。
- 一个易于重定目标的代码生成器,目前支持X86、X86-64、PowerPC、PowerPC-64、ARM、Thumb、SPARC、Alpha、CellSPU、MIPS、MSP430、SystemZ、WebAssembly和XCore。
- 一个实时(JIT)代码生成系统,目前支持X86、X86-64、ARM、AArch64、Mips、SystemZ、PowerPC和PowerPC-64。
- 支持生成DWARF调试信息。
- 一个类似于gprof的分析系统。https://www.cnblogs.com/wuhh123/p/10668609.html
- 一个包含许多基准代码和应用程序的测试框架。
- 简化LLVM组件快速开发的api和调试工具。
LLVM JIT:
上图概览了jit的作用。
先收集一些介绍博客:
官方的文档:
Building a JIT: Starting out with KaleidoscopeJIT
https://llvm.org/docs/tutorial/BuildingAJIT1.html
https://zhuanlan.zhihu.com/p/60936932
https://www.oschina.net/question/565065_91864,编写一个jit运行的 hello world。
网上比较好的博客:
LLVM代码研读(三部分),比较好的源码入门介绍:https://blog.csdn.net/tomsoft/article/details/78206637
llvm入门篇,有安装,有概述:https://www.codercto.com/a/41721.html
应用和开发llvm,有详细的编译过程,https://www.cnblogs.com/wuhh123/p/10668609.html
《writing an LLVM Pass》,详细的llvm后端开发流程,可以看到llvm后端的原理:https://llvm.org/docs/WritingAnLLVMPass.html
《Implementing a Language with LLVM in Objective Caml》,包括llvm前端和后端的实现:https://llvm.org/docs/tutorial/index.html