LLVM中的非指针全局变量
Non pointer global variables in LLVM
我正在编写一个函数pass,并希望在初始化阶段添加一个int类型的全局变量,用于pass的实际工作。
到目前为止,我有
bool doInitialization(Module &M) {
LLVMContext &c = M.getContext();
Type *intTy = TypeBuilder<int,false>::get(c);
Value *p = M.getOrInsertGlobal("var1",intTy);
return true
}
无论出于何种原因,var1的类型都是int*。例如,在声明之后添加
Type *pt = p->getType();
if (isa<PointerType>(pt)) {
errs().write_escaped("Is a pointer ty") << 'n';
}
当编译的代码运行时,将以打印结束,并且
if ((intTy->getPointerTo()) == (p->getType())) {
errs().write_escaped("This is confusing") << 'n';
}
将再次打印字符串。
是否可以使用此方法添加int类型的全局变量?如果可以,哪里出错了?
你做得对。全局变量总是存储在内存中——您插入了一个类型为i32
的全局变量,并返回了一个指向该内存位置的指针。在C术语中,您得到的是&var1
而不是var1
。要操作存储在指针中的值,需要创建load
和store
指令。
使用getOrInsertGlobal
时,您将传递要在全局命名空间中创建的对象的底层类型。然后,实现使用getPointerType
在模块的符号表中实际创建映射,这就是为什么您会看到一个指向传入类型的指针
因此,您需要加载并存储到全局。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 指向作为类成员的全局变量的指针
- 使用全局变量显示C++在使用 pthread 时比指针慢 100%?
- 存储在全局变量中的函数指针在进入函数时设置为 0,并在退出函数时返回到以前的状态
- 多进程 c++(11),链表指针作为全局变量
- 我可以在不使用全局变量的情况下将信息传递给函数指针回调吗?
- 正在删除指向全局变量的指针
- 使用智能指针作为全局变量
- 为什么我的全局变量必须声明为指针
- LLVM中的非指针全局变量
- 指向用户定义类型的类的全局变量指针