在llvm::Module
中有两个有趣的字段:
typedef SymbolTableList<Function> FunctionListType;
typedef SymbolTableList<GlobalVariable> GlobalListType;
GlobalListType GlobalList; ///< The Global Variables in the module
FunctionListType FunctionList; ///< The Functions in the module
因此,如果我们将定义一些函数或全局变量,我们将能够从程序的任何其他位置使用它们,只需向我们的模块询问它们。但是函数局部变量怎么样?如何定义它们?
答案 0 :(得分:2)
在运行时通过alloca
分配局部变量。
要创建AllocaInst,您需要
llvm::BasicBlock::iterator I = ...
const llvm::Type *Ty =
auto AI = new AllocaInst(Ty, 0, Name, I);
要在函数中查找allocas,您需要迭代指令:
for (auto I = F->begin(), E = F->end(); I != E; ++I) {
for (auto J = I->begin(), E = I->end(); J != E; ++J) {
if (auto AI = dyn_cast<AllocaInst>(*J)) {
..
}
}
}