我是LLVM的新手,并试图在
Linux上生成一个人类可读的.ll文件.我安装了llvm-gcc但是我看到它只能生成汇编代码(-S选项).有什么方法可以获得llvm online
compiler生成的内容吗?
这就是我在Linux上使用-S -emit-llvm所得到的:
.file "hello.c" .ident "GCC: (Ubuntu/Linaro 4.5.1-7ubuntu2) 4.5.1 LLVM: " .text .globl main .align 16,0x90 .type main,@function main: pushl %ebp movl %esp,%ebp subl $8,%esp movl $.L.str,4(%esp) movl $1,(%esp) call __printf_chk xorl %eax,%eax addl $8,%esp popl %ebp ret .Ltmp0: .size main,.Ltmp0-main .type .L.str,@object .section .rodata.str1.1,"aMS",@progbits,1 .L.str: .asciz "hello world\n" .size .L.str,13 .section .note.GNU-stack,"",@progbits
这就是我想要得到的:
; ModuleID = '/tmp/webcompile/_7829_0.bc' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-linux-gnu" @.str = private constant [12 x i8] c"hello world\00",align 1 ; <[12 x i8]*> [#uses=1] define i32 @main() nounwind { entry: %0 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str,i64 0,i64 0)) nounwind ; <i32> [#uses=0] ret i32 0 } declare i32 @puts(i8* nocapture) nounwind
解决方法
在llvm-gcc的ubuntu包装中有些东西可怕破碎. llvm-gcc的版本是4.2.1,但在这里我们看到4.5.请报告Ubuntu错误.