LLVM,初始化值为0的整数全局变量
我一直在通过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
然而, 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
使用其中一个APInt构造函数获取0值ConstantInt
(AP代表Arbitrary Precision)
ConstantInt* const_int_val = ConstantInt::get(module->getContext(), APInt(32,0));
然后设置你的初始化值(一个常量子类)
global_var->setInitializer(const_int_val);
链接地址: http://www.djcxy.com/p/78745.html
上一篇: LLVM, Initialize an integer global variable with value 0
下一篇: JQM footer issue