c++ - LLVM,用值 0 初始化一个整数全局变量

标签 c++ llvm

我一直在 LLVM 文档/Stack Overflow 中兜圈子,无法弄清楚整数全局变量应该如何初始化为 0(第一次使用 LLVM)。这是我目前的一些代码:

TheModule = (argc > 1) ? new Module(argv[1], Context) : new Module("Filename", Context);

// Unrelated code

// currentGlobal->id is just a string
TheModule->getOrInsertGlobal(currentGlobal->id, Builder.getInt32Ty());
llvm::GlobalVariable* gVar = TheModule->getNamedGlobal(currentGlobal->id);
gVar->setLinkage(llvm::GlobalValue::CommonLinkage);
gVar->setAlignment(4);

// What replaces "???" below?
//gVar->setInitializer(???);

这几乎可以满足我的要求,它可以产生一个输出示例:

@a = common global i32, align 4
@b = common global i32, align 4
@c = common global i32, align 4

但是,clang foo.c -S -emit-llvm 也产生了我想要的:

@a = common global i32 0, align 4
@b = common global i32 0, align 4
@c = common global i32 0, align 4

据我所知,我需要一个Constant*,其中有"???",但我不确定如何去做:http://llvm.org/docs/doxygen/html/classllvm_1_1GlobalVariable.html#a095f8f031d99ce3c0b25478713293dea

最佳答案

使用one of the APInt constructors获得 0 值 ConstantInt(AP 代表任意精度)

ConstantInt* const_int_val = ConstantInt::get(module->getContext(), APInt(32,0));

然后设置你的初始化值(一个常量子类)

global_var->setInitializer(const_int_val);

关于c++ - LLVM,用值 0 初始化一个整数全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23328832/

相关文章:

c++ - 是直接初始化还是复制初始化?

c++ - 如何调试导致计算机崩溃的代码

c++ - 如何在 LLVM pass 中添加一行新代码?

c++ - 从对象或库文件中识别C++的版本(例如c++ 11,c++ 14)

c++ - 关于 "casting"变量的快速建议?非常短的功能需要调整

c++ - 模板和继承问题!

C++ OpenCV 源代码

c++ - 用于 LLVM 的 GCC 工具链

ios - 标记位码(-fembed-bitcode-marker)的意义是什么?

c++ - 在 Linux 上为 clang 构建 libc++ 的认可方法是什么?