获取非原始类型的内存访问大小

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();
}

指针大小取决于目标,因此您需要遍历 ModuleDataLayout。你可能想要像 M.getDataLayout().getTypeAllocSizeInBits(Ty).

这样的东西