是否可以直接使用LLVM-assembly?

时间:2011-10-14 20:25:37

标签: llvm

我已经阅读了一些关于llvm的网页和文章,我对这个项目很感兴趣。 (也许要学习一些关于编译器编写的东西,而不需要为x86的复杂点而烦恼)。

有些页面描述了如何编写llvm程序集以及如何组装它,但我没有找到任何关于实际执行这些环境所需的环境。我知道我可以在我的文件上运行llvm-gcc来获取可在C上下文中执行的目标文件。但是在我不想使用C运行时环境(libc.so和朋友)的情况下,运行llvm代码需要什么?有没有关于那个的文件?

4 个答案:

答案 0 :(得分:10)

似乎有LLVM assembler

  

llvm-和LLVM汇编程序一样。它读取包含的文件   人类可读的LLVM汇编语言,将其转换为LLVM bitcode,   并将结果写入文件或标准输出。

答案 1 :(得分:3)

静态编译器,它接受LLVM汇编:

http://llvm.org/docs/CommandGuide/llc.html

LLVM汇编语言参考:

http://llvm.org/docs/LangRef.html

答案 2 :(得分:3)

快速设置:(适用于Windows上的llvm 3.4.0 .ll文件)

来自https://notepad-plus-plus.org/

的高级文本编辑器 来自https://github.com/CRogers/LLVM-Windows-Binaries

的llvm二进制文件

hello.ll as“UTF-8 without BOM”(此代码采用llvm 3.4.0格式):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

在命令提示符中:

lli hello.ll

快速设置:(适用于Windows上的llvm 3.8.0 .ll文件)

来自https://notepad-plus-plus.org/

的高级文本编辑器

来自http://llvm.org/releases/download.html#3.8.0

的clang二进制文件

hello.ll as“UTF-8 without BOM”(此代码采用llvm 3.8.0格式):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

在命令提示符中:

clang hello.ll -o hello.exe
hello.exe

或者作为一个命令:

clang hello.ll -o hello.exe & hello.exe

有关char16_t,u16String等的错误意味着clang需要:-fms-compatibility-version = 19

答案 3 :(得分:0)

Archlinux 上的 LLVM 11.1 不接受上述答案中的代码。这是来自当前的LLVM IR docs

cat > hello.ll <<EOF
@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"
declare i32 @puts(i8* nocapture) nounwind
define i32 @main() {   ; i32()*
  %cast210 = getelementptr [13 x i8], [13 x i8]* @.str, i64 0, i64 0
  call i32 @puts(i8* %cast210)
  ret i32 0
}
!0 = !{i32 42, null, !"string"}
!foo = !{!0}
EOF
lli hello.ll

如果单独启动 lli,它不会显示提示,而是接受输入。 不过,此输入仅在 Ctrl-D (EOF) 之后进行评估。

我来这里是因为我想找到一个 REPL。没有运气。