如何使用整数列表在LLVM中初始化整数数组

How do I initialize an integer array in LLVM using a list of integers?

本文关键字:整数 初始化 LLVM 数组 何使用 列表      更新时间:2023-10-16

我有以下我要生成C 的IR代码:

@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

我知道我可以使用这些代码线将数组初始化为所有零:

    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);

此代码(以及前面的20行左右)创建了一个初始化的全局结构:https://github.com/leporacanthicus/lacsap/blob/master/expr.cpp#l2585

这是使用setInitializer的另一个示例 - 同样,它不是数组,而是一个结构,但是从概念上讲,数组和结构之间没有太大区别:https://github.com/leporacanthicus/lacsap/blob/master/expr.cpp#l3376

另请参见(例如):http://llvm.org/docs/doxygen/html/classllvm_1_1_1 constantarray.html