如何使用LLVM API获取全局变量的初始化器

How to get the inializers of global variables with LLVM API

本文关键字:初始化 全局变量 获取 何使用 LLVM API      更新时间:2023-10-16

我正在编写一个适用于LLVM IR代码的LLVM通行证。目标的一部分是读取全局变量的初始值,其中全局变量可以是任何类型的,从基本类型到结构和类。我该如何实现?

如果在GlobalVariable实例上调用getInitializer,则会获得类型为 Constant 的初始值设定项(尽管请确保先调用 hasInitializer 或其姊妹方法之一,以验证是否存在初始值设定项)。此外,IIRC 全局变量和常量是作为同一件事实现的,因此如果您不需要常量,请使用 isConstant 过滤掉它们。

当然,Constant是抽象基类;实际类型将是它的子类之一,您可以在文档页面上显示的图表中看到。您可以通过 isa/cast/dyn_cast 以通常的方式查询和获取实际的常量类型,或者您可以在其上使用getType(毕竟常量是一种Value)并从那里开始工作。

最后,要从Module获取所有全局变量,请使用global_begin/global_end迭代器,或者只在其上使用getGlobalList(它有自己的迭代器)。