在LLVM IR中,我有一个类型为[4 x i32]
的全局数组:
@data = local_unnamed_addr global [4 x i32] [i32 17, i32 31, i32 55, i32 7], align 4
使用模块传递,我想在原始示例{17, 31, 55, 7}
中修改此数组的初始值设定项。
我能够检测全局数据。 globalData
包含对GlobalVariable
的引用。然后我确定它是否已初始化并且是否为数组类型。
if(globalData.hasInitializer()) {
auto arrayType = globalData.getInitializer()->getType();
if(arrayType->isArrayTy()) {
SmallVector<Constant *, 4> arrayContent(4); // How to get the dimension?
// How to get each Constant from the orginal initializer?
Constant* initializer = ConstantArray::get((ArrayType*) arrayType, arrayContent);
globalData.setInitializer(initializer);
}
}
但是,我错过了如何获取数组的维度,原始的整数初始值设定项以及如何正确设置新的初始值设定项。
现在,执行显示的代码不会更新初始化程序数组。