我正在写一些llvm(3.7)传递,我需要一些关于Constant类的信息。 在llvm-IR I解析中,有" 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);
到目前为止,我必须逐个阅读元素,这是一个痛苦(并且容易出错)的过程。
任何提示都将受到赞赏。
答案 0 :(得分:0)
我只是理解由于初始化操作数中可能存在ConstExpr而无法实现。
然而,我设法通过valueId上的大开关获得了很好的递归实现。