获取非原始类型的内存访问大小
Get size of memory access with non-primitive type
我正在尝试使用
获取内存访问(加载)的大小
dyn_cast<LoadInst>(Inst)->getType()->getPrimitiveSizeinBits()
适用于大多数情况。
但是,对于
这样的加载指令
%18 = load i8*, i8** %11, align 8, !tbaa !10
我们有双星 (**) 指针访问,这种方法只会 return 值为 0。我想知道是否有任何方法可以让我获得加载的大小案例?
提前致谢,
汤姆
如果你想要原语的类型而不管有多少个间接层,
你可以这样做:
llvm::Type *t = [...]; // getting the type varies on instruction and operand required
while(t && t->isPointerTy()) {
t = llvm::dyn_cast<llvm::PointerType>(t)->getElementType();
}
指针大小取决于目标,因此您需要遍历 Module
的 DataLayout
。你可能想要像 M.getDataLayout().getTypeAllocSizeInBits(Ty)
.
这样的东西
我正在尝试使用
获取内存访问(加载)的大小dyn_cast<LoadInst>(Inst)->getType()->getPrimitiveSizeinBits()
适用于大多数情况。
但是,对于
这样的加载指令%18 = load i8*, i8** %11, align 8, !tbaa !10
我们有双星 (**) 指针访问,这种方法只会 return 值为 0。我想知道是否有任何方法可以让我获得加载的大小案例?
提前致谢,
汤姆
如果你想要原语的类型而不管有多少个间接层, 你可以这样做:
llvm::Type *t = [...]; // getting the type varies on instruction and operand required
while(t && t->isPointerTy()) {
t = llvm::dyn_cast<llvm::PointerType>(t)->getElementType();
}
指针大小取决于目标,因此您需要遍历 Module
的 DataLayout
。你可能想要像 M.getDataLayout().getTypeAllocSizeInBits(Ty)
.