forked from OSchip/llvm-project
[CodeGen] Avoid more pointer element type accesses
This commit is contained in:
parent
f44e3fbadd
commit
a995cdab19
|
@ -127,18 +127,18 @@ CodeGenModule::getDynamicOffsetAlignment(CharUnits actualBaseAlign,
|
|||
|
||||
Address CodeGenFunction::LoadCXXThisAddress() {
|
||||
assert(CurFuncDecl && "loading 'this' without a func declaration?");
|
||||
assert(isa<CXXMethodDecl>(CurFuncDecl));
|
||||
auto *MD = cast<CXXMethodDecl>(CurFuncDecl);
|
||||
|
||||
// Lazily compute CXXThisAlignment.
|
||||
if (CXXThisAlignment.isZero()) {
|
||||
// Just use the best known alignment for the parent.
|
||||
// TODO: if we're currently emitting a complete-object ctor/dtor,
|
||||
// we can always use the complete-object alignment.
|
||||
auto RD = cast<CXXMethodDecl>(CurFuncDecl)->getParent();
|
||||
CXXThisAlignment = CGM.getClassPointerAlignment(RD);
|
||||
CXXThisAlignment = CGM.getClassPointerAlignment(MD->getParent());
|
||||
}
|
||||
|
||||
return Address(LoadCXXThis(), CXXThisAlignment);
|
||||
llvm::Type *Ty = ConvertType(MD->getThisType()->getPointeeType());
|
||||
return Address(LoadCXXThis(), Ty, CXXThisAlignment);
|
||||
}
|
||||
|
||||
/// Emit the address of a field using a member data pointer.
|
||||
|
@ -286,7 +286,7 @@ ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, Address addr,
|
|||
}
|
||||
alignment = alignment.alignmentAtOffset(nonVirtualOffset);
|
||||
|
||||
return Address(ptr, alignment);
|
||||
return Address(ptr, CGF.Int8Ty, alignment);
|
||||
}
|
||||
|
||||
Address CodeGenFunction::GetAddressOfBaseClass(
|
||||
|
@ -996,16 +996,8 @@ namespace {
|
|||
|
||||
private:
|
||||
void emitMemcpyIR(Address DestPtr, Address SrcPtr, CharUnits Size) {
|
||||
llvm::PointerType *DPT = DestPtr.getType();
|
||||
llvm::Type *DBP =
|
||||
llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), DPT->getAddressSpace());
|
||||
DestPtr = CGF.Builder.CreateBitCast(DestPtr, DBP);
|
||||
|
||||
llvm::PointerType *SPT = SrcPtr.getType();
|
||||
llvm::Type *SBP =
|
||||
llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), SPT->getAddressSpace());
|
||||
SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, SBP);
|
||||
|
||||
DestPtr = CGF.Builder.CreateElementBitCast(DestPtr, CGF.Int8Ty);
|
||||
SrcPtr = CGF.Builder.CreateElementBitCast(SrcPtr, CGF.Int8Ty);
|
||||
CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, Size.getQuantity());
|
||||
}
|
||||
|
||||
|
@ -2068,8 +2060,8 @@ void CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D,
|
|||
|
||||
if (SlotAS != ThisAS) {
|
||||
unsigned TargetThisAS = getContext().getTargetAddressSpace(ThisAS);
|
||||
llvm::Type *NewType =
|
||||
ThisPtr->getType()->getPointerElementType()->getPointerTo(TargetThisAS);
|
||||
llvm::Type *NewType = llvm::PointerType::getWithSamePointeeType(
|
||||
This.getType(), TargetThisAS);
|
||||
ThisPtr = getTargetHooks().performAddrSpaceCast(*this, This.getPointer(),
|
||||
ThisAS, SlotAS, NewType);
|
||||
}
|
||||
|
@ -2507,9 +2499,6 @@ void CodeGenFunction::InitializeVTablePointer(const VPtr &Vptr) {
|
|||
|
||||
// Apply the offsets.
|
||||
Address VTableField = LoadCXXThisAddress();
|
||||
unsigned ThisAddrSpace =
|
||||
VTableField.getPointer()->getType()->getPointerAddressSpace();
|
||||
|
||||
if (!NonVirtualOffset.isZero() || VirtualOffset)
|
||||
VTableField = ApplyNonVirtualAndVirtualOffset(
|
||||
*this, VTableField, NonVirtualOffset, VirtualOffset, Vptr.VTableClass,
|
||||
|
@ -2525,8 +2514,7 @@ void CodeGenFunction::InitializeVTablePointer(const VPtr &Vptr) {
|
|||
->getPointerTo(GlobalsAS);
|
||||
// vtable field is is derived from `this` pointer, therefore they should be in
|
||||
// the same addr space. Note that this might not be LLVM address space 0.
|
||||
VTableField = Builder.CreateBitCast(VTableField,
|
||||
VTablePtrTy->getPointerTo(ThisAddrSpace));
|
||||
VTableField = Builder.CreateElementBitCast(VTableField, VTablePtrTy);
|
||||
VTableAddressPoint = Builder.CreateBitCast(VTableAddressPoint, VTablePtrTy);
|
||||
|
||||
llvm::StoreInst *Store = Builder.CreateStore(VTableAddressPoint, VTableField);
|
||||
|
|
Loading…
Reference in New Issue