Shu*_*eng 4 c++ arrays llvm llvm-c++-api
我有以下要生成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
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用以下代码行将数组初始化为全零:
ConstantAggregateZero* const_array_2 = ConstantAggregateZero::get(ArrayTy_0);
GArray->setInitializer(const_array_2);
Run Code Online (Sandbox Code Playgroud)
如何将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);
Run Code Online (Sandbox Code Playgroud)
这段代码(以及之前的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_1ConstantArray.html
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |