本文共 1951 字,大约阅读时间需要 6 分钟。
llvm 是一个模块化的开源编译器框架,最早的时候是Illinois 大学的一个研究项目,早先的主要负责人是Chris Lattner。
llvm 有一个表达形式很好的IR语言(intermediate representation),高度模块化的结构,因此它可以作为多种语言的后端,提供与编程语言无关的优化和针对多种CPU的目标代码生成功能。其借鉴了 GCC 等传统编译器的分段设计方式,引入了高度模块化的设计。
Low Level Virtual Machine
A set of reusable libraries that collect of compiler technology components Program analyzer and optimizator Machine code generator Clang: C based language front-end such as C, C++ Just-In-Time compiler
Implemented in C++ with well-defined interfaces: Easy to add, remove, and change funcitionality
Open source, and BSD licensed
Website:
opt foo.ll -O1 -view-cfg
优化 | opt 选项 |
---|---|
Constant Propagation | -constprop |
Function Inlining | -inline |
Dead Code Elimination | -dce |
Common Sub-expression Elimination | -early-cse |
Loop Unrolling | -loop-unroll |
三种类型是等价的。bitcode file 的后缀名是 .bc
;assembly file 的后缀名是 .ll
。
llvm-dis
: LLVM IR assembly code, llvm .bc => .ll
llc
: native assembly code, llvm .bc => .s clang -emit-llvm -S filename.c -o out.llopt -S xx.bc -o out.llllvm-dis xxx.bc -o -out.ll
clang -emit-llvm -c filename.c -o out.bcopt xx.ll -o out.bcllvm-as xx.ll -o out.bc
转载地址:http://fnstd.baihongyu.com/