在llvm :: Module中,有2个有趣的字段:
typedef SymbolTableList<Function> FunctionListType;
typedef SymbolTableList<GlobalVariable> GlobalListType;
GlobalListType GlobalList; ///< The Global Variables in the module
FunctionListType FunctionList; ///< The Functions in the module
因此,如果我们要定义一些函数或全局变量,我们将可以在程序的任何其他位置使用它们,而只需向我们的模块询问它们即可.但是函数局部变量呢?如何定义它们?
解决方法:
局部变量在运行时通过alloca分配.
要创建AllocaInst,您需要
llvm::BasicBlock::iterator I = ...
const llvm::Type *Ty =
auto AI = new AllocaInst(Ty, 0, Name, I);
要在函数中查找alloca,您需要遍历指令:
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)) {
..
}
}
}
标签:c,llvm 来源: https://codeday.me/bug/20191013/1911350.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。