2016-03-24 26 views
0

我正在写一些llvm(3.7)pass,我需要一些关于Constant类的信息。 在我解析的llvm-IR中,存在用作全局变量初始值的“ConstantStruct”或“ConstantArray”实例。例如: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); 

到目前为止,我要读通过一个元件的一个,这是一种痛苦的(和错误易发生)的过程。

任何提示将不胜感激。

+1

任何意见downvote将不胜感激...我不认为这是一个微不足道的问题... –

回答

0

我刚刚明白这是不可能的,因为在初始化操作数中可能存在ConstExpr。

然而,我设法得到一个很好的递归实现与valueId上的大开关。