diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/CallPromotionUtils.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Utils/CallPromotionUtils.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp index 17cba2e642a1..725a0eb97eae 100644 --- a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp +++ b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp @@ -692,14 +692,14 @@ bool llvm::tryPromoteCall(CallBase &CB) { if (!VTableEntryLoad) return false; // Not a vtable entry load. Value *VTableEntryPtr = VTableEntryLoad->getPointerOperand(); - APInt VTableOffset(DL.getTypeSizeInBits(VTableEntryPtr->getType()), 0); + APInt VTableOffset(DL.getIndexTypeSizeInBits(VTableEntryPtr->getType()), 0); Value *VTableBasePtr = VTableEntryPtr->stripAndAccumulateConstantOffsets( DL, VTableOffset, /* AllowNonInbounds */ true); LoadInst *VTablePtrLoad = dyn_cast<LoadInst>(VTableBasePtr); if (!VTablePtrLoad) return false; // Not a vtable load. Value *Object = VTablePtrLoad->getPointerOperand(); - APInt ObjectOffset(DL.getTypeSizeInBits(Object->getType()), 0); + APInt ObjectOffset(DL.getIndexTypeSizeInBits(Object->getType()), 0); Value *ObjectBase = Object->stripAndAccumulateConstantOffsets( DL, ObjectOffset, /* AllowNonInbounds */ true); if (!(isa<AllocaInst>(ObjectBase) && ObjectOffset == 0)) @@ -710,9 +710,9 @@ bool llvm::tryPromoteCall(CallBase &CB) { BasicBlock::iterator BBI(VTablePtrLoad); Value *VTablePtr = FindAvailableLoadedValue( VTablePtrLoad, VTablePtrLoad->getParent(), BBI, 0, nullptr, nullptr); - if (!VTablePtr) + if (!VTablePtr || !VTablePtr->getType()->isPointerTy()) return false; // No vtable found. - APInt VTableOffsetGVBase(DL.getTypeSizeInBits(VTablePtr->getType()), 0); + APInt VTableOffsetGVBase(DL.getIndexTypeSizeInBits(VTablePtr->getType()), 0); Value *VTableGVBase = VTablePtr->stripAndAccumulateConstantOffsets( DL, VTableOffsetGVBase, /* AllowNonInbounds */ true); GlobalVariable *GV = dyn_cast<GlobalVariable>(VTableGVBase); |
