gpt4 book ai didi

struct - 如何创建 LLVM 结构值?

转载 作者:行者123 更新时间:2023-12-04 14:02:36 24 4
gpt4 key购买 nike

我正在尝试创建结构类型的 LLVM 值。我正在使用 LLVM-C 接口(interface)并找到一个函数:

LLVMValueRef    LLVMConstStruct (LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)

如果所有成员都是由 LLVMConstXXX() 创建的常量值,这可以正常工作,它将生成如下代码:
store { i32, i32, i32 } { i32 1, i32 2, i32 3 }, { i32, i32, i32 }* %17, align 4

但问题是如果成员不是恒定的,它会产生类似的东西:
%0 = call i32 @llvm.nvvm.read.ptx.sreg.tid.x()
store { i32, i32, i32 } { i32 1, i32 %0, i32 3 }, { i32, i32, i32 }* %17, align 4

当我将这段 LLVM 代码发送到 NVVM(Nvidia PTX 后端)时,它会说:

module 0 (27, 39): parse error: invalid use of function-local name



所以,我不知道这个结构值创建是否正确。我需要的是一个值,而不是分配的内存。

有人有想法吗?

问候,
翔。

最佳答案

常量结构是一种字面量 - 忠于其名称 - 可能只包含其他常量,而不是一般值。那么,生成该结构的正确方法是通过 insertvalue .在上面的示例中,它应该如下所示:

%0 = call i32 @llvm.nvvm.read.ptx.sreg.tid.x()
%1 = insertvalue {i32, i32, i32} {i32 1, i32 undef, i32 3}, i32 %0, 1
store { i32, i32, i32 } %1, { i32, i32, i32 }* %17, align 4

关于struct - 如何创建 LLVM 结构值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com