如何使用整数列表初始化LLVM中的整数数组? 我有下面的IR代码,我想生成C++: @gArray = global [10 x i32] [i32 3, i32 4, i32 5, i32 6, i32 0, i32 0, i32 0, i32 0, i32 12, i32 0], align 16

如何使用整数列表初始化LLVM中的整数数组? 我有下面的IR代码,我想生成C++: @gArray = global [10 x i32] [i32 3, i32 4, i32 5, i32 6, i32 0, i32 0, i32 0, i32 0, i32 12, i32 0], align 16,c++,arrays,llvm,llvm-c++-api,C++,Arrays,Llvm,Llvm C++ Api,我知道我可以使用以下代码行将数组初始化为全零: ConstantAggregateZero* const_array_2 = ConstantAggregateZero::get(ArrayTy_0); GArray->setInitializer(const_array_2); 如何将LLVM中的数组初始化为值列表?您可以创建一个常量初始化器列表: std::vector<llvm::Constant*> values; ... /* Make the va

我知道我可以使用以下代码行将数组初始化为全零:

    ConstantAggregateZero* const_array_2 = ConstantAggregateZero::get(ArrayTy_0);
    GArray->setInitializer(const_array_2);

如何将LLVM中的数组初始化为值列表?

您可以创建一个常量初始化器列表:

std::vector<llvm::Constant*> values;
...
/* Make the value 42 appear in the array - ty is "i32" */
llvm::Constant* c = llvm::Constant::getIntegerValue(ty, 42);
values.push_back(c);
... // Add more values here ... 
llvm::Constant* init = llvm::ConstantArray::get(arrayTy_0, values);
GArray->setInitializer(init);
std::向量值;
...
/*使值42出现在数组中-ty为“i32”*/
llvm::Constant*c=llvm::Constant::getIntegerValue(ty,42);
值。推回(c);
... // 在这里添加更多值。。。
llvm::Constant*init=llvm::ConstantArray::get(arrayTy_0,值);
GArray->setInitializer(初始值);
此代码(及其前面的20行左右)创建了一个全局结构,该结构已初始化:

这里是使用setInitializer的另一个例子——同样,它不是数组而是结构,但从概念上讲,数组和结构之间没有太大区别:

另见(例如):

谢谢!使用
ConstantArray
ConstantDataArray
之间有什么区别?似乎ConstantDataArray“基本相同,只是只支持有限范围的成员类型”(1/2/4/8字节类型-例如
int
float
double
)-是的,您可以在本例中使用它-我的描述适用于任何类型[当然,除了
getIntegerValue
如果您使用的是非integertype,则不起作用]谢谢,非常有用!