llvm之clang前端的一些例子:

来源:互联网 发布:电信宽带网络线路故障 编辑:程序博客网 时间:2024/05/01 20:39
这是我第一次写博客,最近刚刚接触llvm,写这篇blog主要是边学习边总结,当然有很多理解不到位,甚至是错误的地方。我非常愿意和大家一起探讨,请教llvm的相关知识。这篇blog不求能帮助大家,只求能不误导大家就好。以后也要养成写blog的习惯,在这里非常感谢@snsn1984  在他blog里我学到很多东西,也正是这个原因激发了自己写blog的动力,希望能够坚持下去。有问题也希望能够和大家一起探讨!

这些例子来源于http://llvm.org/docs/GettingStarted.html#requirements,大家最好参照一下,以免我误导大家!
llvm之clang前端的一些例子:
1.首先写一个最简单的C程序,名字叫hello.c

include <stdio.h>int main() {  printf("hello world\n");  return 0;}

2.接下来,编译C文件到本机的可执行文件:

% clang hello.c -o hello

当然这里的clang必须需要用

 export PATH="$PATH:/usr/local/llvm/build/bin"

让clang变为默认的编译器(个人理解),不然就会报
程序 'clang' 已包含在下列软件包中:
* clang-3.3
* clang-3.4
* clang-3.5
请尝试:apt-get install <选定的软件包>

这样的问题。
3.接下来,编译C文件成LLVM bitcode文件:

clang -O3 -emit-llvm hello.c -c -o hello.bc

这种是生成二进制的.bc文件:
如果是

clang -O3 -emit-llvm hello.c -S -o hello.ll

就生成的是.ll文件,这个文件是可读的,可以通过文本编辑器打开的,这样我们就可以直观的得到IR的两种格式。
4.可以有两种方式来运行我们的程序:

./hello

这中大家肯定都很熟悉,还有一种:

 lli hello.bc

第二个例子是调用了llvm的JIT,LLI。
5.使用LLVM-DIS工具来看看LLVM的汇编代码:

llvm-dis < hello.bc | less

也就是看.ll文件中的IR内容。
6.编译程序使用LLC代码生成器生成汇编语言文件:

 llc hello.bc -o hello.s

7.汇编语言文件生成一个程序:

/opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native # On Solaris

Solaris 是Sun Microsystems研发的计算机操作系统。它被认为是UNIX操作系统的衍生版本之一

gcc hello.s -o hello.native       # On others

8.执行上面生成的程序

 ./hello.native

值得注意的是使用clang直接编译为本地代码(即当-emit,LLVM选项不存在)则步骤5/6/7/8可以使用。

0 0
原创粉丝点击