ConstantStruct 或 ConstantArray 读取内存内容

ConstantStruct or ConstantArray read memory content

我正在写一些 llvm (3.7) pass,我需要一些关于 Constant 类 的信息。 在我正在解析的 llvm-IR 中,有 "ConstantStruct" 或 "ConstantArray" 实例用作全局变量的初始值设定项。例如:

%struct.S = type { i32, i32, i32, i32 }

@s = global [2 x %struct.S] [%struct.S { i32 6, i32 8, i32 -8, i32 -5 }, %struct.S { i32 0, i32 2, i32 -1, i32 2 }], align 4

如果我可以读取这些常量的内存,而不必递归遍历所有元素(也可以是 ConstantStructs 或数组),我的工作会容易得多。

例如,我需要一个函数

llvm::ConstantStruct* initializer = globalVar->getInitializer();
void* memoryContent;
int sizeInBytes = initializer->getMemoryContent(&memoryContent);

到目前为止,我必须一个一个地阅读元素,这是一个痛苦的(而且容易出错)的过程。

如有任何提示,我们将不胜感激。

我只是知道这是不可能的,因为初始化操作数中可能有 ConstExpr。

但是,我设法通过对 valueId 的大切换获得了一个很好的递归实现。