IRGen: Remove all uses of CreateDefaultAlignedLoad.
Differential Revision: https://reviews.llvm.org/D27157 llvm-svn: 288083
This commit is contained in:
parent
28dd54c38f
commit
b367c567d9
|
@ -124,19 +124,6 @@ public:
|
|||
|
||||
// FIXME: these "default-aligned" APIs should be removed,
|
||||
// but I don't feel like fixing all the builtin code right now.
|
||||
llvm::LoadInst *CreateDefaultAlignedLoad(llvm::Value *Addr,
|
||||
const llvm::Twine &Name = "") {
|
||||
return CGBuilderBaseTy::CreateLoad(Addr, false, Name);
|
||||
}
|
||||
llvm::LoadInst *CreateDefaultAlignedLoad(llvm::Value *Addr,
|
||||
const char *Name) {
|
||||
return CGBuilderBaseTy::CreateLoad(Addr, false, Name);
|
||||
}
|
||||
llvm::LoadInst *CreateDefaultAlignedLoad(llvm::Value *Addr, bool IsVolatile,
|
||||
const llvm::Twine &Name = "") {
|
||||
return CGBuilderBaseTy::CreateLoad(Addr, IsVolatile, Name);
|
||||
}
|
||||
|
||||
llvm::StoreInst *CreateDefaultAlignedStore(llvm::Value *Val,
|
||||
llvm::Value *Addr,
|
||||
bool IsVolatile = false) {
|
||||
|
|
|
@ -2191,8 +2191,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
|||
Value *IntToPtr =
|
||||
Builder.CreateIntToPtr(EmitScalarExpr(E->getArg(0)),
|
||||
llvm::PointerType::get(IntTy, 257));
|
||||
LoadInst *Load =
|
||||
Builder.CreateDefaultAlignedLoad(IntToPtr, /*isVolatile=*/true);
|
||||
LoadInst *Load = Builder.CreateAlignedLoad(
|
||||
IntTy, IntToPtr, getContext().getTypeAlignInChars(E->getType()));
|
||||
Load->setVolatile(true);
|
||||
return RValue::get(Load);
|
||||
}
|
||||
|
||||
|
@ -5440,9 +5441,11 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
|
|||
switch (BuiltinID) {
|
||||
default: break;
|
||||
case NEON::BI__builtin_neon_vldrq_p128: {
|
||||
llvm::Type *Int128PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), 128);
|
||||
llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128);
|
||||
llvm::Type *Int128PTy = llvm::PointerType::get(Int128Ty, 0);
|
||||
Value *Ptr = Builder.CreateBitCast(EmitScalarExpr(E->getArg(0)), Int128PTy);
|
||||
return Builder.CreateDefaultAlignedLoad(Ptr);
|
||||
return Builder.CreateAlignedLoad(Int128Ty, Ptr,
|
||||
CharUnits::fromQuantity(16));
|
||||
}
|
||||
case NEON::BI__builtin_neon_vstrq_p128: {
|
||||
llvm::Type *Int128PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), 128);
|
||||
|
@ -6615,27 +6618,37 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
|
|||
return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "");
|
||||
}
|
||||
case NEON::BI__builtin_neon_vld1_v:
|
||||
case NEON::BI__builtin_neon_vld1q_v:
|
||||
case NEON::BI__builtin_neon_vld1q_v: {
|
||||
Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
|
||||
return Builder.CreateDefaultAlignedLoad(Ops[0]);
|
||||
auto Alignment = CharUnits::fromQuantity(
|
||||
BuiltinID == NEON::BI__builtin_neon_vld1_v ? 8 : 16);
|
||||
return Builder.CreateAlignedLoad(VTy, Ops[0], Alignment);
|
||||
}
|
||||
case NEON::BI__builtin_neon_vst1_v:
|
||||
case NEON::BI__builtin_neon_vst1q_v:
|
||||
Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
|
||||
Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
|
||||
return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
|
||||
case NEON::BI__builtin_neon_vld1_lane_v:
|
||||
case NEON::BI__builtin_neon_vld1q_lane_v:
|
||||
case NEON::BI__builtin_neon_vld1q_lane_v: {
|
||||
Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
|
||||
Ty = llvm::PointerType::getUnqual(VTy->getElementType());
|
||||
Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
|
||||
Ops[0] = Builder.CreateDefaultAlignedLoad(Ops[0]);
|
||||
auto Alignment = CharUnits::fromQuantity(
|
||||
BuiltinID == NEON::BI__builtin_neon_vld1_lane_v ? 8 : 16);
|
||||
Ops[0] =
|
||||
Builder.CreateAlignedLoad(VTy->getElementType(), Ops[0], Alignment);
|
||||
return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vld1_lane");
|
||||
}
|
||||
case NEON::BI__builtin_neon_vld1_dup_v:
|
||||
case NEON::BI__builtin_neon_vld1q_dup_v: {
|
||||
Value *V = UndefValue::get(Ty);
|
||||
Ty = llvm::PointerType::getUnqual(VTy->getElementType());
|
||||
Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
|
||||
Ops[0] = Builder.CreateDefaultAlignedLoad(Ops[0]);
|
||||
auto Alignment = CharUnits::fromQuantity(
|
||||
BuiltinID == NEON::BI__builtin_neon_vld1_dup_v ? 8 : 16);
|
||||
Ops[0] =
|
||||
Builder.CreateAlignedLoad(VTy->getElementType(), Ops[0], Alignment);
|
||||
llvm::Constant *CI = ConstantInt::get(Int32Ty, 0);
|
||||
Ops[0] = Builder.CreateInsertElement(V, Ops[0], CI);
|
||||
return EmitNeonSplat(Ops[0], CI);
|
||||
|
|
|
@ -2884,13 +2884,13 @@ static AggValueSlot createPlaceholderSlot(CodeGenFunction &CGF,
|
|||
// FIXME: Generate IR in one pass, rather than going back and fixing up these
|
||||
// placeholders.
|
||||
llvm::Type *IRTy = CGF.ConvertTypeForMem(Ty);
|
||||
llvm::Value *Placeholder =
|
||||
llvm::UndefValue::get(IRTy->getPointerTo()->getPointerTo());
|
||||
Placeholder = CGF.Builder.CreateDefaultAlignedLoad(Placeholder);
|
||||
llvm::Type *IRPtrTy = IRTy->getPointerTo();
|
||||
llvm::Value *Placeholder = llvm::UndefValue::get(IRPtrTy->getPointerTo());
|
||||
|
||||
// FIXME: When we generate this IR in one pass, we shouldn't need
|
||||
// this win32-specific alignment hack.
|
||||
CharUnits Align = CharUnits::fromQuantity(4);
|
||||
Placeholder = CGF.Builder.CreateAlignedLoad(IRPtrTy, Placeholder, Align);
|
||||
|
||||
return AggValueSlot::forAddr(Address(Placeholder, Align),
|
||||
Ty.getQualifiers(),
|
||||
|
|
|
@ -2890,9 +2890,11 @@ llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF,
|
|||
if (RuntimeVersion < 10 ||
|
||||
CGF.CGM.getTarget().getTriple().isKnownWindowsMSVCEnvironment())
|
||||
return CGF.Builder.CreateZExtOrBitCast(
|
||||
CGF.Builder.CreateDefaultAlignedLoad(CGF.Builder.CreateAlignedLoad(
|
||||
ObjCIvarOffsetVariable(Interface, Ivar),
|
||||
CGF.getPointerAlign(), "ivar")),
|
||||
CGF.Builder.CreateAlignedLoad(
|
||||
Int32Ty, CGF.Builder.CreateAlignedLoad(
|
||||
ObjCIvarOffsetVariable(Interface, Ivar),
|
||||
CGF.getPointerAlign(), "ivar"),
|
||||
CharUnits::fromQuantity(4)),
|
||||
PtrDiffTy);
|
||||
std::string name = "__objc_ivar_offset_value_" +
|
||||
Interface->getNameAsString() +"." + Ivar->getNameAsString();
|
||||
|
|
|
@ -3548,15 +3548,17 @@ Address X86_64ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
|
|||
llvm::Value *RegHiAddr = TyLo->isFPOrFPVectorTy() ? GPAddr : FPAddr;
|
||||
|
||||
// Copy the first element.
|
||||
llvm::Value *V =
|
||||
CGF.Builder.CreateDefaultAlignedLoad(
|
||||
CGF.Builder.CreateBitCast(RegLoAddr, PTyLo));
|
||||
// FIXME: Our choice of alignment here and below is probably pessimistic.
|
||||
llvm::Value *V = CGF.Builder.CreateAlignedLoad(
|
||||
TyLo, CGF.Builder.CreateBitCast(RegLoAddr, PTyLo),
|
||||
CharUnits::fromQuantity(getDataLayout().getABITypeAlignment(TyLo)));
|
||||
CGF.Builder.CreateStore(V,
|
||||
CGF.Builder.CreateStructGEP(Tmp, 0, CharUnits::Zero()));
|
||||
|
||||
// Copy the second element.
|
||||
V = CGF.Builder.CreateDefaultAlignedLoad(
|
||||
CGF.Builder.CreateBitCast(RegHiAddr, PTyHi));
|
||||
V = CGF.Builder.CreateAlignedLoad(
|
||||
TyHi, CGF.Builder.CreateBitCast(RegHiAddr, PTyHi),
|
||||
CharUnits::fromQuantity(getDataLayout().getABITypeAlignment(TyHi)));
|
||||
CharUnits Offset = CharUnits::fromQuantity(
|
||||
getDataLayout().getStructLayout(ST)->getElementOffset(1));
|
||||
CGF.Builder.CreateStore(V, CGF.Builder.CreateStructGEP(Tmp, 1, Offset));
|
||||
|
|
Loading…
Reference in New Issue