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

C++ LLVM,初始化值为0的整数全局变量,c++,llvm,C++,Llvm,我已经在LLVM文档/堆栈溢出中绕了一圈,无法理解整数全局变量应该如何初始化为0(第一次使用LLVM)。这是我目前的一些代码: TheModule = (argc > 1) ? new Module(argv[1], Context) : new Module("Filename", Context); // Unrelated code // currentGlobal->id is just a string TheModule->getOrInsertGlobal(c

我已经在LLVM文档/堆栈溢出中绕了一圈,无法理解整数全局变量应该如何初始化为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
但是,
clangfoo.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
据我所知,我需要一个
常量*
,我有
“?”
,但我不知道怎么做:

用于获得一个0值
常量
(AP代表任意精度)

然后设置初始值设定项值(常量子类)


谢谢,我理解了获取
ConstantInt
参数的上下文,什么是
APInt
,我假设
32
只是整数的位表示。关于
StringRef(“0”)
10
?我发布的那一个,它可能不是您需要做的事情的最佳构造函数,但我希望它易于使用,并且类似于atoi函数。我编辑了这篇文章,使之更简单,但第一个版本解释了给定基数的字符串:基本上你是在要求基数为10的字符串“10”的整数值。谢谢,我有了一些基础。最后,我使用了
gVar->setInitializer(ConstantInt::get(Context,APInt(32,0,true)),我相信它也做了同样的事情。这是正确的,llvm中几乎所有的东西都是一个值子类,您通常有工厂方法来获得正确的方法
ConstantInt* const_int_val = ConstantInt::get(module->getContext(), APInt(32,0));
global_var->setInitializer(const_int_val);