LLVM0

LLVM学习笔记0:安装

算是重拾LLVM,这次重头记录学习历程。

安装

安装比较简单,apt-get直接安装即可:

1
2
sudo apt-get install clang
sudo apt-get install llvm

测试安装

使用LLVM CookBook里的一个小例子验证安装是否成功。

demo code:

1
2
3
4
5
6
7
8
9
10
11
12
13
define i32 @test1(i32 %A) {
%B = add i32 %A, 0
ret i32 %B
}

define internal i32 @test(i32 %X, i32 %dead) {
ret i32 %X
}

define i32 @caller() {
%A = call i32 @test(i32 123, i32 456)
ret i32 %A
}
  1. 将上述LLVM代码输入到testfile.ll
  2. 运行opt工具中指令合并的pass:opt -S -instcombine testfile.ll -o output1.ll
  3. 运行死代码消除pass:opt -S -deadargelim testfile.ll -o output2.ll

我们容易通过查看上面运行pass后的输出代码确认pass已生效:

output1.ll

1
2
3
4
5
6
7
8
9
10
11
12
13
14
; ModuleID = 'tesetfile.ll'

define i32 @test1(i32 %A) {
ret i32 %A ; eliminated adding 0
}

define internal i32 @test(i32 %X, i32 %dead) {
return i32 %X
}

define i32 @caller() {
%A = call i32 @test(i32 123, i32 456)
ret i32 %A
}

output2.ll

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
; ModuleID = 'testfile.ll'

define i32 @test1(i32 %A) {
%B = add i32 %A, 0
ret i32 %B
}

define internal i32 @test(i32 %X) { ; eliminated dead arg
ret i32 %X
}

define i32 @caller() {
%A = call i32 @test(i32 123) ; elminated dead arg
ret i32 %A
}
/!-- -->