LLVM,初始化值为0的整数全局变量

asi*_*mes 7 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(???);
Run Code Online (Sandbox Code Playgroud)

这几乎可以实现我想要的,它可以产生的输出示例:

@a = common global i32, align 4
@b = common global i32, align 4
@c = common global i32, align 4
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

据我所知,我需要一个Constant*我所拥有的地方"???",但我不知道该怎么做:http://llvm.org/docs/doxygen/html/classllvm_1_1GlobalVariable.html#a095f8f031d99ce3c0b25478713293dea

Mar*_* A. 5

使用APInt构造函数之一获取0值ConstantInt(AP代表任意精度)

ConstantInt* const_int_val = ConstantInt::get(module->getContext(), APInt(32,0));
Run Code Online (Sandbox Code Playgroud)

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

global_var->setInitializer(const_int_val);
Run Code Online (Sandbox Code Playgroud)