llvm 学习笔记一 编译llvm

一 、 llvm构建(Linux ubuntu64 3.2.0-29-generic)

http://llvm.org/releases/download.html#3.3

从llvm 下载3.3版本, 下载clang、llvm、compiler-rt三部分。

 tar vxzf llvm-3.3.src.tar.gz 
 tar vxzf cfe-3.3.src.tar.gz 
 tar vxzf compiler-rt-3.3.src.tar.gz 

mv cfe-3.3.src llvm-3.3.src/tools/clang
mv compiler-rt-3.3.src llvm-3.3.src/projects/compiler-rt

mkdir build

cd build 

../llvm/configure 或者 cmake ../llvm 

make -j8

生成clang等在build/bin中。

参考文档 http://llvm.org/docs/GettingStarted.html


二、基本工具使用 (参考 http://llvm.org/docs/CommandGuide/index.html)

hello.c  

clang hello.c -o hello    //生成可执行文件hello

clang -O3 -emit-llvm hello.c -c -o hello.bc     //生成llvmir 的bc格式文件

clang -O3 -emit-llvm hello.c -S -o hello.ll      //生成llvmir的ll格式

llvm-dis < hello.bc |less    //bc格式转换成ll格式显示


lli hello.bc   //JIT运行

llc hello.bc -o hello.s   //生成.s文件


clang 前端命令。

clang -cc1 -help      //获取cc1的命令选项列表


clang -cc1 -ast-dump hello.c      //dump AST

#include <stdio.h>


int main()
{
printf("hello world.\n");
    return 0;
}


TranslationUnitDecl 0x6f15720 <<invalid sloc>>
|-TypedefDecl 0x6f15c00 <<invalid sloc>> __int128_t '__int128'
|-TypedefDecl 0x6f15c60 <<invalid sloc>> __uint128_t 'unsigned __int128'
|-TypedefDecl 0x6f15fb0 <<invalid sloc>> __builtin_va_list '__va_list_tag [1]'
|-FunctionDecl 0x6f16050 <hello.c:3:1, line:7:1> main 'int ()'
| `-CompoundStmt 0x6f42b40 <line:4:1, line:7:1>
|   |-CallExpr 0x6f16390 <line:5:2, col:25> 'int'
|   | |-ImplicitCastExpr 0x6f16378 <col:2> 'int (*)(const char *, ...)' <FunctionToPointerDecay>
|   | | `-DeclRefExpr 0x6f162b8 <col:2> 'int (const char *, ...)' Function 0x6f16160 'printf' 'int (const char *, ...)'
|   | `-ImplicitCastExpr 0x6f16400 <col:9> 'const char *' <BitCast>
|   |   `-ImplicitCastExpr 0x6f163e8 <col:9> 'char *' <ArrayToPointerDecay>
|   |     `-StringLiteral 0x6f16318 <col:9> 'char [14]' lvalue "hello world.\n"
|   `-ReturnStmt 0x6f42b20 <line:6:5, col:12>
|     `-IntegerLiteral 0x6f16418 <col:12> 'int' 0
`-FunctionDecl 0x6f16160 <line:5:2> printf 'int (const char *, ...)' extern
  |-ParmVarDecl 0x6f16200 <<invalid sloc>> 'const char *'
  `-FormatAttr 0x6f16260 <col:2> "printf" 1 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值