【问题标题】:why it is asking for a token?为什么它要一个令牌?
【发布时间】:2015-10-23 21:03:33
【问题描述】:

我编写了一个非常简单的 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 "}

我正在运行的命令是 llc add-test.ll

有人知道可能是什么问题吗?

【问题讨论】:

  • 您使用的是哪个版本的 LLVM?
  • @sepp2k clang 是 3.5.0,我假设它是 LLVM 版本 3.5.0。我不能使用更新版本的 LLVM,对于我的项目,我需要使用给定的版本。

标签: llvm llvm-ir


【解决方案1】:

load(以及其他)的语法在 LLVM 版本 3.7 中进行了更改。您使用的语法是新语法。由于您使用的是 3.5 版本,因此您需要使用旧语法,即:

%r = load i32* %retval

换句话说,您只指定参数的类型,而不是结果的类型。

我认为问题的发生是因为您在使用旧版本的 LLVM 时使用的是当前版本的文档。 LLVM 3.5.0 的文档可以在here 找到。

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2011-07-15
    • 2021-07-29
    • 2021-11-03
    • 2018-04-28
    • 2021-11-04
    • 1970-01-01
    • 2021-12-26
    • 2017-04-03
    相关资源
    最近更新 更多