2017-02-23 5 views
1

LLVM IR에서로드/저장 장치가 바이트, 하프 워드, 워드 또는 더블 워드에 액세스하는지 알고 싶습니다.LLVM IR에서 특정로드/저장소가 액세스하는 메모리 크기를 확인하는 방법은 무엇입니까?

getAlignment()llvm::LoadInst에 있고 llvm:StoreInst 클래스에는이 기능이 있습니다. 설명에 따르면 수행중인 액세스의 정렬이 반환됩니다. 이것이 메모리 정렬을 제공하는지 또는 액세스하는 바이트가 없는지 확실하지 않습니다.

답변

3
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 기타 기능이 있습니다.