引言

LLVM(Low Level Virtual machine)项目是由一系列现代编译工具组成的编译器框架,主要子项目包括:

  • LLVM Core: 提供LLVM IR
  • Clang:一个现代C、C++等语言编译器前端
  • LLDB: 调试器
  • libc++:支持C++11、C++14的C++标准库
  • compiler-rt: 运行时库
  • polly: 公共库
  • OpenMP:让Clang支持OpenMP
  • libclc: 实现OpenCL
  • LLD: 链接器
  • ......

按照理解,通过LLVM可以快速建立一个新的编程语言,只要建立了AST后,遍历AST生成LLVM IR形式,这样就可以利用起LLVM自带的大量优化和后端代码生成,从而支持更多的后端硬件平台。

源码编译安装

$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project
$ cmake -S llvm -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake --build build
$ cd build/ && make install

LLVM IR:中间表示

LLVM IR有三种形式:

  • 文本文件(.ll): 可读性高
  • 字节码文件(.bc): 二进制
  • 内存形式(memory): 比如用于JIT

结语

$ clang --version | grep Target
Target: x86_64-apple-darwin21.4.0

$ ls -l ./llvm-project/llvm/examples/

LLVM官方提供了一些文档和自带了一些例子,但目前来看,要找到不错的教程或文档还是比较麻烦,因此这一系列博文准备记录下学习和使用LLVM的笔记,最后为Ledge语言添加LLVM IR支持,引入JIT技术,实现加速和更多可能性。

资料