如何确定特定 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::LoadInst
和 llvm: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
适用于加载和存储指令。这是函数 getTypeStoreSize
的 reference。还有其他功能,如 getTypeStoreSizeInBits
、getTypeAllocSize
等,您可以根据需要使用。
我想知道 load/store 是否访问了 LLVM IR 中的字节、半字、字或双字。
在 llvm::LoadInst
和 llvm: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
适用于加载和存储指令。这是函数 getTypeStoreSize
的 reference。还有其他功能,如 getTypeStoreSizeInBits
、getTypeAllocSize
等,您可以根据需要使用。