0%

Write HelloWorld for LLVM IR

一直想寫一篇關於LLVM的文章,想了好久終於下筆了。 同樣從Hello world開始下手

1
2
3
4
5
6
#include <stdio.h>
int main()
{
puts("Hello world!\n");
return 0;
}

編譯成 LLVM的IR中間形式,利用lli來執行IR Code。

1
2
$ clang hello.c -S -emit-llvm -o hello.lli
$ lli hello.lli

刪除hello.lli的Meta data之後,一個Hello world的最小部分掌這個樣子

1
2
3
4
5
6
7
8
@.str = private unnamed_addr constant [14 x i8] c"Hello world!\0A\00", align 1
define i32 @main() #0 {
%1 = alloca i32, align 4
store i32 0, i32* %1
%2 = call i32 @puts(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0))
ret i32 0
}
declare i32 @puts(i8*) #1