【发布时间】:2011-06-16 15:25:09
【问题描述】:
我正在编写a compiler,它使用 LLVM 作为后端,我的编译器生成以下 LLVM 汇编代码
@0 = private constant [25 x i8] c"Hello World to %dntegers\00"
declare void @printf (i8*, i32)
define void @main () {
%1 = getelementptr [25 x i8]* @0, i32 0, i32 0
%2 = 1
tail call void @printf(i8* %1, i32 %2)
ret void
}
但我收到以下错误:
c.ll:8:8: error: expected instruction opcode
%2 = 1
^
文档显示examples like that。
你知道如何让它工作吗?目前,我正在使用:
%2 = add i32 0, 1 ; FIXME
【问题讨论】:
-
为什么要将常量值绑定到名称?只需在原地使用常量,如
tail call void @printf(i8* %1, i31 1)。顺便说一句,您是否将 IR 生成为文本?干什么用的? -
因为这对于代码生成器来说更简单。我正在使用文本 IR,因为我无法从我使用的语言轻松访问 C/C++ 库。
标签: assembly integer constants llvm