首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在LLVM IR中使用RISC-V向量(RVV)指令?

如何在LLVM IR中使用RISC-V向量(RVV)指令?
EN

Stack Overflow用户
提问于 2020-09-28 09:07:40
回答 2查看 2K关注 0票数 3

这份报告中,Kruppe和Espasa概述了RISC-V向量扩展(RVV),并在幻灯片16上展示了通过本征函数使用向量指令的LLVM IR样本,例如:

代码语言:javascript
复制
%vl = call i32 @llvm.riscv.vsetvl(i32 8)

在演讲时(2019年4月),LLVM对V扩展的支持是在https://github.com/hanna-kruppe/rvv-llvm上开发的。然而,该存储库现在已经存档,自述文件表明它已经过时,因为对RISC-V扩展的支持现在是上游开发的。我假设这意味着这些特性现在可以从https://github.com/llvm/llvm-project的LLVM母版中获得。

但是,当我提取当前的母版并构建它并尝试用llc编译示例代码(用--mtriple=riscv32-unkown-none-rv32imv指定目标)时,我会得到以下错误:

代码语言:javascript
复制
error: ../llvm-project/build/bin/llc: test.ll:4:18: error: use of undefined value '@llvm.riscv.vsetvl'

看来V扩展是可用的,因为llc -march=riscv32 -mattr=help列出了它:

代码语言:javascript
复制
Available features for this target:
...
  experimental-v           - 'V' (Vector Instructions).

是否必须显式启用标记为实验性的目标特性?这些向量本质是否显示在幻灯片中,甚至出现在上游版本中?如果是的话,我该如何使用?如果不是,我如何在LLVM IR中使用向量指令?

后续:在这个职位中,Eli解释说,特定于目标的本质应该在include/llvm/IR/IntrinsicsRISCV.td中定义,实际上在存档的树外存储库中,该文件包含一些在上游版本中不存在的载体特异性内含子。如果这些本质没有移植到上游,那么使用RISC-V矢量指令的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 08:41:44

我在LLVM开发人员邮件列表上问到:目前(2020年11月)只有MC层(即组装级)支持LLVM中的RISC扩展(所以现在没有本质)。

但是,有一个RFC补丁,它增加了对矢量加载、存储和整数添加本质的初始支持,以及生成vsetvl[i]指令所需的基础结构。

票数 1
EN

Stack Overflow用户

发布于 2020-09-29 21:17:27

llvm/include/llvm/ADT/Triple.h中只有两个riscv三重定义: riscv32和riscv64。

默认情况下,HasStdExtV是与experimental-v对应的标志,在llvm/lib/Target/RISCV/RISCVSubtarget.h中初始化为false,如果要使用此扩展,则需要启用此特性。

Clangs似乎也支持这个特性。在clang/lib/Driver/ToolChains/Arch/RISCV.cpp中,您可以看到三月支持v特性,并为llc生成experimental-v

include/llvm/IR/IntrinsicsRISCV.td中没有关于向量扩展的任何内容,但是您可以在llvm/lib/Target/RISCV/RISCVInstrInfoV.td中找到标准'V‘向量扩展中的指令描述。,它还在实验。在clang中还可以发现,即使支持v扩展,默认情况下也可以在clang/lib/Driver/ToolChains/Arch/RISCV.cpp中看到clang/lib/Driver/ToolChains/Arch/RISCV.cpp中的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64099125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档