为什么它要求令牌?
why it is asking for a token?
我写了一个非常简单的 llvm IR 代码。但是,当我尝试通过 llc 运行 它时,出现以下错误:
llc: add_test.ll:10:16: error: expected value token
%r = load i32, i32* %retval
^
代码如下:
目标数据布局 = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
目标三元组 = "x86_64-unknown-linux-gnu"
; Function Attrs: nounwind uwtable
define i32 @main() #0 {
entry:
%retval = alloca i32, align 4
store i32 0, i32* %retval
%r = load i32, i32* %retval
ret i32 0
}
attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
!llvm.ident = !{!0}
!0 = metadata !{metadata !"clang version 3.5.0 "}
我 运行ning 的命令是 llc add-test.ll
有人知道可能是什么问题吗?
load
(以及其他语法)的语法在 LLVM 3.7 版中发生了变化。您使用的语法是新语法。由于您使用的是 3.5 版,因此需要使用旧语法,即:
%r = load i32* %retval
换句话说,您只指定参数的类型,而不是结果的类型。
我认为问题的发生是因为您在使用旧版本的 LLVM 时使用了当前版本的文档。可以在 here.
找到 LLVM 3.5.0 的文档
我写了一个非常简单的 llvm IR 代码。但是,当我尝试通过 llc 运行 它时,出现以下错误:
llc: add_test.ll:10:16: error: expected value token
%r = load i32, i32* %retval
^
代码如下: 目标数据布局 = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 目标三元组 = "x86_64-unknown-linux-gnu"
; Function Attrs: nounwind uwtable
define i32 @main() #0 {
entry:
%retval = alloca i32, align 4
store i32 0, i32* %retval
%r = load i32, i32* %retval
ret i32 0
}
attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
!llvm.ident = !{!0}
!0 = metadata !{metadata !"clang version 3.5.0 "}
我 运行ning 的命令是 llc add-test.ll
有人知道可能是什么问题吗?
load
(以及其他语法)的语法在 LLVM 3.7 版中发生了变化。您使用的语法是新语法。由于您使用的是 3.5 版,因此需要使用旧语法,即:
%r = load i32* %retval
换句话说,您只指定参数的类型,而不是结果的类型。
我认为问题的发生是因为您在使用旧版本的 LLVM 时使用了当前版本的文档。可以在 here.
找到 LLVM 3.5.0 的文档