【LLVM编译器系列-3】llvm IR中Module类

随着大家LLVM IR的学习,不难发现LLVM代码程序的最顶层结构就是Module类。对于一个LLVM模块可能是原始程序的翻译单元,也可能是由链接器合并的几个翻译单元。Module类可以跟踪一系列函数/全局变量和一个符号表,以及描述目标特征可变数据。下面简单学习Module类的代码定义吧。

Module类具体实现细节

  • 如何创建Module类呢?

Module类的构造函数相对简单,传入一个Module名字的字符串以及一个llvmcontext。主要对变量ModuleID和SourceFileName完成初始化,把创建好的Module添加到Context中。

Module::Module(StringRef MID, LLVMContext &C)
    : Context(C), ValSymTab(std::make_unique<ValueSymbolTable>(-1)),
      ModuleID(std::string(MID)), SourceFileName(std::string(MID)), DL("") {
  Context.addModule(this);
}
  • 跟踪系列函数的部分

定义Function的迭代器,便于快速访问Module类中一系列函数。

/// @}
/// @name Function Iteration
/// @{

  iterator                begin()       { return FunctionList.begin(); }
  const_iterator          begin() const { return FunctionList.begin(); }
  iterator                end  ()       { return FunctionList.end();   }
  const_iterator          end  () const { return FunctionList.end();   }
  reverse_iterator        rbegin()      { return FunctionList.rbegin(); }
  const_reverse_iterator  rbegin() const{ return FunctionList.rbegin(); }
  reverse_iterator        rend()        { return FunctionList.rend(); }
  const_reverse_iterator  rend() const  { return FunctionList.rend(); }
  size_t         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值