Compiler construction 获取非基元类型的内存访问大小

Compiler construction 获取非基元类型的内存访问大小,compiler-construction,clang,llvm,llvm-ir,Compiler Construction,Clang,Llvm,Llvm Ir,我正在尝试使用获取内存访问(加载)的大小 当我们有双星(**)指针访问时,这种方法将只返回0的值。我想知道有没有什么方法可以让我在这种情况下得到装载的大小 提前感谢, Tom如果您想要原语的类型,而不管有多少间接层, 你可以这样做: llvm::Type *t = [...]; // getting the type varies on instruction and operand required while(t && t->isPointerTy()) { t

我正在尝试使用获取内存访问(加载)的大小

当我们有双星(**)指针访问时,这种方法将只返回0的值。我想知道有没有什么方法可以让我在这种情况下得到装载的大小

提前感谢,

Tom

如果您想要原语的类型,而不管有多少间接层, 你可以这样做:

llvm::Type *t = [...]; // getting the type varies on instruction and operand required

while(t && t->isPointerTy()) {
  t = llvm::dyn_cast<llvm::PointerType>(t)->getElementType();
}
llvm::Type*t=[…];//获取类型取决于所需的指令和操作数
而(t&&t->isPointerTy()){
t=llvm::dyn_cast(t)->getElementType();
}

指针大小取决于目标,因此您需要浏览
模块的
数据布局
。你可能想要像这样的东西

%18 = load i8*, i8** %11, align 8, !tbaa !10
llvm::Type *t = [...]; // getting the type varies on instruction and operand required

while(t && t->isPointerTy()) {
  t = llvm::dyn_cast<llvm::PointerType>(t)->getElementType();
}