From 3be16bd7d102205eaa6a67e918de75306883ed15 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 18 Jul 2023 11:00:44 +0200 Subject: [PATCH] [IRBuilder] Remove various typed pointer handling (NFC) --- llvm/include/llvm/IR/IRBuilder.h | 2 - llvm/lib/IR/IRBuilder.cpp | 92 ++++------------------------------------ 2 files changed, 8 insertions(+), 86 deletions(-) diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 28380a3..f86ce84 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1021,8 +1021,6 @@ private: ArrayRef OverloadedTypes, const Twine &Name = ""); - Value *getCastedInt8PtrValue(Value *Ptr); - //===--------------------------------------------------------------------===// // Instruction creation methods: Terminators //===--------------------------------------------------------------------===// diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp index a015073..5262bc6 100644 --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -60,15 +60,6 @@ Type *IRBuilderBase::getCurrentFunctionReturnType() const { return BB->getParent()->getReturnType(); } -Value *IRBuilderBase::getCastedInt8PtrValue(Value *Ptr) { - auto *PT = cast(Ptr->getType()); - if (PT->isOpaqueOrPointeeTypeMatches(getInt8Ty())) - return Ptr; - - // Otherwise, we need to insert a bitcast. - return CreateBitCast(Ptr, getInt8PtrTy(PT->getAddressSpace())); -} - DebugLoc IRBuilderBase::getCurrentDebugLocation() const { for (auto &KV : MetadataToCopy) if (KV.first == LLVMContext::MD_dbg) @@ -147,7 +138,6 @@ CallInst *IRBuilderBase::CreateMemSet(Value *Ptr, Value *Val, Value *Size, MaybeAlign Align, bool isVolatile, MDNode *TBAATag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Ptr = getCastedInt8PtrValue(Ptr); Value *Ops[] = {Ptr, Val, Size, getInt1(isVolatile)}; Type *Tys[] = { Ptr->getType(), Size->getType() }; Module *M = BB->getParent()->getParent(); @@ -176,7 +166,6 @@ CallInst *IRBuilderBase::CreateMemSetInline(Value *Dst, MaybeAlign DstAlign, bool IsVolatile, MDNode *TBAATag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Dst = getCastedInt8PtrValue(Dst); Value *Ops[] = {Dst, Val, Size, getInt1(IsVolatile)}; Type *Tys[] = {Dst->getType(), Size->getType()}; Module *M = BB->getParent()->getParent(); @@ -204,7 +193,6 @@ CallInst *IRBuilderBase::CreateElementUnorderedAtomicMemSet( Value *Ptr, Value *Val, Value *Size, Align Alignment, uint32_t ElementSize, MDNode *TBAATag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Ptr = getCastedInt8PtrValue(Ptr); Value *Ops[] = {Ptr, Val, Size, getInt32(ElementSize)}; Type *Tys[] = {Ptr->getType(), Size->getType()}; Module *M = BB->getParent()->getParent(); @@ -232,9 +220,6 @@ CallInst *IRBuilderBase::CreateMemTransferInst( Intrinsic::ID IntrID, Value *Dst, MaybeAlign DstAlign, Value *Src, MaybeAlign SrcAlign, Value *Size, bool isVolatile, MDNode *TBAATag, MDNode *TBAAStructTag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Dst = getCastedInt8PtrValue(Dst); - Src = getCastedInt8PtrValue(Src); - Value *Ops[] = {Dst, Src, Size, getInt1(isVolatile)}; Type *Tys[] = { Dst->getType(), Src->getType(), Size->getType() }; Module *M = BB->getParent()->getParent(); @@ -269,9 +254,6 @@ CallInst *IRBuilderBase::CreateMemCpyInline( Value *Dst, MaybeAlign DstAlign, Value *Src, MaybeAlign SrcAlign, Value *Size, bool IsVolatile, MDNode *TBAATag, MDNode *TBAAStructTag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Dst = getCastedInt8PtrValue(Dst); - Src = getCastedInt8PtrValue(Src); - Value *Ops[] = {Dst, Src, Size, getInt1(IsVolatile)}; Type *Tys[] = {Dst->getType(), Src->getType(), Size->getType()}; Function *F = BB->getParent(); @@ -311,9 +293,6 @@ CallInst *IRBuilderBase::CreateElementUnorderedAtomicMemCpy( "Pointer alignment must be at least element size"); assert(SrcAlign >= ElementSize && "Pointer alignment must be at least element size"); - Dst = getCastedInt8PtrValue(Dst); - Src = getCastedInt8PtrValue(Src); - Value *Ops[] = {Dst, Src, Size, getInt32(ElementSize)}; Type *Tys[] = {Dst->getType(), Src->getType(), Size->getType()}; Module *M = BB->getParent()->getParent(); @@ -349,9 +328,6 @@ CallInst *IRBuilderBase::CreateMemMove(Value *Dst, MaybeAlign DstAlign, Value *Size, bool isVolatile, MDNode *TBAATag, MDNode *ScopeTag, MDNode *NoAliasTag) { - Dst = getCastedInt8PtrValue(Dst); - Src = getCastedInt8PtrValue(Src); - Value *Ops[] = {Dst, Src, Size, getInt1(isVolatile)}; Type *Tys[] = { Dst->getType(), Src->getType(), Size->getType() }; Module *M = BB->getParent()->getParent(); @@ -386,9 +362,6 @@ CallInst *IRBuilderBase::CreateElementUnorderedAtomicMemMove( "Pointer alignment must be at least element size"); assert(SrcAlign >= ElementSize && "Pointer alignment must be at least element size"); - Dst = getCastedInt8PtrValue(Dst); - Src = getCastedInt8PtrValue(Src); - Value *Ops[] = {Dst, Src, Size, getInt32(ElementSize)}; Type *Tys[] = {Dst->getType(), Src->getType(), Size->getType()}; Module *M = BB->getParent()->getParent(); @@ -493,7 +466,6 @@ CallInst *IRBuilderBase::CreateFPMinimumReduce(Value *Src) { CallInst *IRBuilderBase::CreateLifetimeStart(Value *Ptr, ConstantInt *Size) { assert(isa(Ptr->getType()) && "lifetime.start only applies to pointers."); - Ptr = getCastedInt8PtrValue(Ptr); if (!Size) Size = getInt64(-1); else @@ -509,7 +481,6 @@ CallInst *IRBuilderBase::CreateLifetimeStart(Value *Ptr, ConstantInt *Size) { CallInst *IRBuilderBase::CreateLifetimeEnd(Value *Ptr, ConstantInt *Size) { assert(isa(Ptr->getType()) && "lifetime.end only applies to pointers."); - Ptr = getCastedInt8PtrValue(Ptr); if (!Size) Size = getInt64(-1); else @@ -526,7 +497,6 @@ CallInst *IRBuilderBase::CreateInvariantStart(Value *Ptr, ConstantInt *Size) { assert(isa(Ptr->getType()) && "invariant.start only applies to pointers."); - Ptr = getCastedInt8PtrValue(Ptr); if (!Size) Size = getInt64(-1); else @@ -606,7 +576,6 @@ CallInst *IRBuilderBase::CreateMaskedLoad(Type *Ty, Value *Ptr, Align Alignment, const Twine &Name) { auto *PtrTy = cast(Ptr->getType()); assert(Ty->isVectorTy() && "Type should be vector"); - assert(PtrTy->isOpaqueOrPointeeTypeMatches(Ty) && "Wrong element type"); assert(Mask && "Mask should not be all-ones (null)"); if (!PassThru) PassThru = PoisonValue::get(Ty); @@ -627,7 +596,6 @@ CallInst *IRBuilderBase::CreateMaskedStore(Value *Val, Value *Ptr, auto *PtrTy = cast(Ptr->getType()); Type *DataTy = Val->getType(); assert(DataTy->isVectorTy() && "Val should be a vector"); - assert(PtrTy->isOpaqueOrPointeeTypeMatches(DataTy) && "Wrong element type"); assert(Mask && "Mask should not be all-ones (null)"); Type *OverloadedTypes[] = { DataTy, PtrTy }; Value *Ops[] = {Val, Ptr, getInt32(Alignment.value()), Mask}; @@ -662,10 +630,6 @@ CallInst *IRBuilderBase::CreateMaskedGather(Type *Ty, Value *Ptrs, auto *VecTy = cast(Ty); ElementCount NumElts = VecTy->getElementCount(); auto *PtrsTy = cast(Ptrs->getType()); - assert(cast(PtrsTy->getElementType()) - ->isOpaqueOrPointeeTypeMatches( - cast(Ty)->getElementType()) && - "Element type mismatch"); assert(NumElts == PtrsTy->getElementCount() && "Element count mismatch"); if (!Mask) @@ -696,13 +660,6 @@ CallInst *IRBuilderBase::CreateMaskedScatter(Value *Data, Value *Ptrs, auto *DataTy = cast(Data->getType()); ElementCount NumElts = PtrsTy->getElementCount(); -#ifndef NDEBUG - auto *PtrTy = cast(PtrsTy->getElementType()); - assert(NumElts == DataTy->getElementCount() && - PtrTy->isOpaqueOrPointeeTypeMatches(DataTy->getElementType()) && - "Incompatible pointer and data types"); -#endif - if (!Mask) Mask = getAllOnesMask(NumElts); @@ -725,12 +682,7 @@ CallInst *IRBuilderBase::CreateMaskedScatter(Value *Data, Value *Ptrs, CallInst *IRBuilderBase::CreateMaskedExpandLoad(Type *Ty, Value *Ptr, Value *Mask, Value *PassThru, const Twine &Name) { - auto *PtrTy = cast(Ptr->getType()); assert(Ty->isVectorTy() && "Type should be vector"); - assert(PtrTy->isOpaqueOrPointeeTypeMatches( - cast(Ty)->getElementType()) && - "Wrong element type"); - (void)PtrTy; assert(Mask && "Mask should not be all-ones (null)"); if (!PassThru) PassThru = PoisonValue::get(Ty); @@ -747,13 +699,8 @@ CallInst *IRBuilderBase::CreateMaskedExpandLoad(Type *Ty, Value *Ptr, /// be accessed in memory CallInst *IRBuilderBase::CreateMaskedCompressStore(Value *Val, Value *Ptr, Value *Mask) { - auto *PtrTy = cast(Ptr->getType()); Type *DataTy = Val->getType(); assert(DataTy->isVectorTy() && "Val should be a vector"); - assert(PtrTy->isOpaqueOrPointeeTypeMatches( - cast(DataTy)->getElementType()) && - "Wrong element type"); - (void)PtrTy; assert(Mask && "Mask should not be all-ones (null)"); Type *OverloadedTypes[] = {DataTy}; Value *Ops[] = {Val, Ptr, Mask}; @@ -1174,9 +1121,6 @@ Value *IRBuilderBase::CreatePtrDiff(Type *ElemTy, Value *LHS, Value *RHS, const Twine &Name) { assert(LHS->getType() == RHS->getType() && "Pointer subtraction operand types must match!"); - assert(cast(LHS->getType()) - ->isOpaqueOrPointeeTypeMatches(ElemTy) && - "Pointer type must match element type"); Value *LHS_int = CreatePtrToInt(LHS, Type::getInt64Ty(Context)); Value *RHS_int = CreatePtrToInt(RHS, Type::getInt64Ty(Context)); Value *Difference = CreateSub(LHS_int, RHS_int); @@ -1187,50 +1131,34 @@ Value *IRBuilderBase::CreatePtrDiff(Type *ElemTy, Value *LHS, Value *RHS, Value *IRBuilderBase::CreateLaunderInvariantGroup(Value *Ptr) { assert(isa(Ptr->getType()) && "launder.invariant.group only applies to pointers."); - // FIXME: we could potentially avoid casts to/from i8*. auto *PtrType = Ptr->getType(); - auto *Int8PtrTy = getInt8PtrTy(PtrType->getPointerAddressSpace()); - if (PtrType != Int8PtrTy) - Ptr = CreateBitCast(Ptr, Int8PtrTy); Module *M = BB->getParent()->getParent(); Function *FnLaunderInvariantGroup = Intrinsic::getDeclaration( - M, Intrinsic::launder_invariant_group, {Int8PtrTy}); + M, Intrinsic::launder_invariant_group, {PtrType}); - assert(FnLaunderInvariantGroup->getReturnType() == Int8PtrTy && + assert(FnLaunderInvariantGroup->getReturnType() == PtrType && FnLaunderInvariantGroup->getFunctionType()->getParamType(0) == - Int8PtrTy && + PtrType && "LaunderInvariantGroup should take and return the same type"); - CallInst *Fn = CreateCall(FnLaunderInvariantGroup, {Ptr}); - - if (PtrType != Int8PtrTy) - return CreateBitCast(Fn, PtrType); - return Fn; + return CreateCall(FnLaunderInvariantGroup, {Ptr}); } Value *IRBuilderBase::CreateStripInvariantGroup(Value *Ptr) { assert(isa(Ptr->getType()) && "strip.invariant.group only applies to pointers."); - // FIXME: we could potentially avoid casts to/from i8*. auto *PtrType = Ptr->getType(); - auto *Int8PtrTy = getInt8PtrTy(PtrType->getPointerAddressSpace()); - if (PtrType != Int8PtrTy) - Ptr = CreateBitCast(Ptr, Int8PtrTy); Module *M = BB->getParent()->getParent(); Function *FnStripInvariantGroup = Intrinsic::getDeclaration( - M, Intrinsic::strip_invariant_group, {Int8PtrTy}); + M, Intrinsic::strip_invariant_group, {PtrType}); - assert(FnStripInvariantGroup->getReturnType() == Int8PtrTy && + assert(FnStripInvariantGroup->getReturnType() == PtrType && FnStripInvariantGroup->getFunctionType()->getParamType(0) == - Int8PtrTy && + PtrType && "StripInvariantGroup should take and return the same type"); - CallInst *Fn = CreateCall(FnStripInvariantGroup, {Ptr}); - - if (PtrType != Int8PtrTy) - return CreateBitCast(Fn, PtrType); - return Fn; + return CreateCall(FnStripInvariantGroup, {Ptr}); } Value *IRBuilderBase::CreateVectorReverse(Value *V, const Twine &Name) { @@ -1326,8 +1254,6 @@ Value *IRBuilderBase::CreatePreserveArrayAccessIndex( auto *BaseType = Base->getType(); assert(isa(BaseType) && "Invalid Base ptr type for preserve.array.access.index."); - assert(cast(BaseType)->isOpaqueOrPointeeTypeMatches(ElTy) && - "Pointer element type mismatch"); Value *LastIndexV = getInt32(LastIndex); Constant *Zero = ConstantInt::get(Type::getInt32Ty(Context), 0); @@ -1377,8 +1303,6 @@ Value *IRBuilderBase::CreatePreserveStructAccessIndex( auto *BaseType = Base->getType(); assert(isa(BaseType) && "Invalid Base ptr type for preserve.struct.access.index."); - assert(cast(BaseType)->isOpaqueOrPointeeTypeMatches(ElTy) && - "Pointer element type mismatch"); Value *GEPIndex = getInt32(Index); Constant *Zero = ConstantInt::get(Type::getInt32Ty(Context), 0); -- 2.7.4