如何确定特定 load/store 在 LLVM IR 中访问的内存大小?

How to determine the size of memory a particular load/store is accessing in LLVM IR?

我想知道 load/store 是否访问了 LLVM IR 中的字节、半字、字或双字。

llvm::LoadInstllvm:StoreInst 类 中有一个函数 getAlignment()。它的描述说它 returns 正在执行的访问的对齐方式。我不确定这是否给出了内存对齐或它访问的字节数?

DataLayout* dataLayout = new DataLayout(&module);
Value* memoryPointer = loadInstruction->getPointerOperand();
PointerType* pointerType = cast<PointerType>(memoryPointer->getType());                         
uint64_t storeSize = dataLayout->getTypeStoreSize(pointerType->getPointerElementType());

我在 llvm-3.7 上使用此代码。 storeSize 将是操作数的大小(以字节为单位)。这里 module 是您在模块传递中作为参数获得的模块指针。函数 getPointerOperand 适用于加载和存储指令。这是函数 getTypeStoreSizereference。还有其他功能,如 getTypeStoreSizeInBitsgetTypeAllocSize 等,您可以根据需要使用。