如何更改类型:在定义之前使用全局变量

时间:2012-11-02 08:57:40

标签: llvm llvm-c++-api

就我而言,我需要在模块中创建对全局变量的引用,然后在引用之后定义全局变量。

当我创建将使用全局变量的指令时,我不知道变量的类型。即使我实际上只需要符号的地址,我仍然需要通过指定类型来创建llvm :: GlobalVariable对象。

这引起了一个问题,当我稍后定义全局变量时,我知道了类型但不幸的是我无法替换之前创建的GlobalVariable对象。

这是伪代码:

llvm::Value *val = new llvm::GlobalVariable(module, llvm::Type::getInt32Ty(), false
          , llvm::GlobalValue::ExternalLinkage, 0, "myvar");

//.... create instructions
builder.CreatePtrToInt(val, llvm::Type::getInt32Ty());

//Here I need to define and intialize the global variable. 
//Now I know the exact type of   the variable. It's different as int32 
//for example it's int16.

llvm::Value *real_val = new llvm::GlobalVariable(module, llvm::Type::getInt16Ty()
          , false,llvm::GlobalValue::ExternalLinkage, 0, "myvar");

显然,我无法创建具有相同名称的另一个变量。但是,如何将第一个GlobalVariable对象转换为实际类型并为其提供初始化器?

有没有其他方法可以在不创建GlobalVariable对象的情况下获取符号地址?

0 个答案:

没有答案