【发布时间】:2013-10-24 03:23:30
【问题描述】:
从联合数组中提取值的 LLVM 方法是什么? 不直接支持联合,这似乎使事情复杂化。
背景: 我正在调用 JIT 执行机器返回的函数 并传递1个参数,即数组的基地址 包含参数的联合。
数据结构是从 C 中设置的:
std::array<union{int,float*}> arguments(5);
int和float*的出现序列被编码
在vector<llvm::Type*>:
i32
i32
float*
float*
float*
现在我正在尝试这个(这是jitted函数):
define void @main([8 x i8]* %arg_ptr) {
entrypoint:
%0 = getelementptr [8 x i8]* %arg_ptr, i32 0
%1 = getelementptr [8 x i8]* %arg_ptr, i32 1
%2 = getelementptr [8 x i8]* %arg_ptr, i32 2
%3 = getelementptr [8 x i8]* %arg_ptr, i32 3
%4 = getelementptr [8 x i8]* %arg_ptr, i32 4
}
首先,函数的签名是否正确(假设 指针大小为 8 字节)?
如何从 %0 中存储的 [8 x i8] 中取出第一个 i32?
我是否需要先将数组[8 x i8] 转换为指针i32*,
然后为其第一个元素创建另一个 GEP?
【问题讨论】:
标签: llvm