Skip to content

Commit f69b9b7

Browse files
committed
[llvm] Remove uses of Type::getPointerTo() (NFC)
Partial progress towards removing in-tree uses of `getPointerTo()`, by employing the following options: * Drop the call entirely if the sole purpose of it is to support a no-op bitcast (remove the no-op bitcast as well). * Replace with `PointerType::get()`/`PointerType::getUnqual()`. Also, remove no-op function `EmitBitCastOfLValueToProperType()`. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D154392
1 parent 820be30 commit f69b9b7

File tree

6 files changed

+31
-70
lines changed

6 files changed

+31
-70
lines changed

llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Lines changed: 15 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,7 @@ OpenMPIRBuilder::getOrCreateRuntimeFunction(Module &M, RuntimeFunction FnID) {
465465

466466
assert(Fn && "Failed to create OpenMP runtime function");
467467

468-
// Cast the function to the expected type if necessary
469-
Constant *C = ConstantExpr::getBitCast(Fn, FnTy->getPointerTo());
470-
return {FnTy, C};
468+
return {FnTy, Fn};
471469
}
472470

473471
Function *OpenMPIRBuilder::getOrCreateRuntimeFunctionPtr(RuntimeFunction FnID) {
@@ -1533,12 +1531,6 @@ OpenMPIRBuilder::createTask(const LocationDescription &Loc,
15331531
(Twine(OutlinedFn.getName()) + ".wrapper").str(),
15341532
FunctionType::get(Builder.getInt32Ty(), WrapperArgTys, false));
15351533
Function *WrapperFunc = dyn_cast<Function>(WrapperFuncVal.getCallee());
1536-
PointerType *WrapperFuncBitcastType =
1537-
FunctionType::get(Builder.getInt32Ty(),
1538-
{Builder.getInt32Ty(), Builder.getInt8PtrTy()}, false)
1539-
->getPointerTo();
1540-
Value *WrapperFuncBitcast =
1541-
ConstantExpr::getBitCast(WrapperFunc, WrapperFuncBitcastType);
15421534

15431535
// Emit the @__kmpc_omp_task_alloc runtime call
15441536
// The runtime call returns a pointer to an area where the task captured
@@ -1547,7 +1539,7 @@ OpenMPIRBuilder::createTask(const LocationDescription &Loc,
15471539
TaskAllocFn,
15481540
{/*loc_ref=*/Ident, /*gtid=*/ThreadID, /*flags=*/Flags,
15491541
/*sizeof_task=*/TaskSize, /*sizeof_shared=*/Builder.getInt64(0),
1550-
/*task_func=*/WrapperFuncBitcast});
1542+
/*task_func=*/WrapperFunc});
15511543

15521544
// Copy the arguments for outlined function
15531545
if (HasTaskData) {
@@ -1982,10 +1974,9 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createReductions(
19821974
BasicBlock *ReductionFuncBlock =
19831975
BasicBlock::Create(Module->getContext(), "", ReductionFunc);
19841976
Builder.SetInsertPoint(ReductionFuncBlock);
1985-
Value *LHSArrayPtr = Builder.CreateBitCast(ReductionFunc->getArg(0),
1986-
RedArrayTy->getPointerTo());
1987-
Value *RHSArrayPtr = Builder.CreateBitCast(ReductionFunc->getArg(1),
1988-
RedArrayTy->getPointerTo());
1977+
Value *LHSArrayPtr = ReductionFunc->getArg(0);
1978+
Value *RHSArrayPtr = ReductionFunc->getArg(1);
1979+
19891980
for (auto En : enumerate(ReductionInfos)) {
19901981
const ReductionInfo &RI = En.value();
19911982
Value *LHSI8PtrPtr = Builder.CreateConstInBoundsGEP2_64(
@@ -4438,7 +4429,8 @@ Value *OpenMPIRBuilder::getOMPCriticalRegionLock(StringRef CriticalName) {
44384429

44394430
Value *OpenMPIRBuilder::getSizeInBytes(Value *BasePtr) {
44404431
LLVMContext &Ctx = Builder.getContext();
4441-
Value *Null = Constant::getNullValue(BasePtr->getType()->getPointerTo());
4432+
Value *Null =
4433+
Constant::getNullValue(PointerType::getUnqual(BasePtr->getContext()));
44424434
Value *SizeGep =
44434435
Builder.CreateGEP(BasePtr->getType(), Null, Builder.getInt32(1));
44444436
Value *SizePtrToInt = Builder.CreatePtrToInt(SizeGep, Type::getInt64Ty(Ctx));
@@ -4499,7 +4491,8 @@ void OpenMPIRBuilder::emitMapperCall(const LocationDescription &Loc,
44994491
Value *ArgSizesGEP =
45004492
Builder.CreateInBoundsGEP(ArrI64Ty, MapperAllocas.ArgSizes,
45014493
{Builder.getInt32(0), Builder.getInt32(0)});
4502-
Value *NullPtr = Constant::getNullValue(Int8Ptr->getPointerTo());
4494+
Value *NullPtr =
4495+
Constant::getNullValue(PointerType::getUnqual(Int8Ptr->getContext()));
45034496
Builder.CreateCall(MapperFunc,
45044497
{SrcLocInfo, Builder.getInt64(DeviceID),
45054498
Builder.getInt32(NumOperands), ArgsBaseGEP, ArgsGEP,
@@ -4971,14 +4964,11 @@ OpenMPIRBuilder::createAtomicRead(const LocationDescription &Loc,
49714964
XLD->setAtomic(AO);
49724965
XRead = cast<Value>(XLD);
49734966
} else {
4974-
// We need to bitcast and perform atomic op as integer
4975-
unsigned Addrspace = cast<PointerType>(XTy)->getAddressSpace();
4967+
// We need to perform atomic op as integer
49764968
IntegerType *IntCastTy =
49774969
IntegerType::get(M.getContext(), XElemTy->getScalarSizeInBits());
4978-
Value *XBCast = Builder.CreateBitCast(
4979-
X.Var, IntCastTy->getPointerTo(Addrspace), "atomic.src.int.cast");
49804970
LoadInst *XLoad =
4981-
Builder.CreateLoad(IntCastTy, XBCast, X.IsVolatile, "omp.atomic.load");
4971+
Builder.CreateLoad(IntCastTy, X.Var, X.IsVolatile, "omp.atomic.load");
49824972
XLoad->setAtomic(AO);
49834973
if (XElemTy->isFloatingPointTy()) {
49844974
XRead = Builder.CreateBitCast(XLoad, XElemTy, "atomic.flt.cast");
@@ -5120,13 +5110,10 @@ std::pair<Value *, Value *> OpenMPIRBuilder::emitAtomicUpdate(
51205110
else
51215111
Res.second = emitRMWOpAsInstruction(Res.first, Expr, RMWOp);
51225112
} else {
5123-
unsigned Addrspace = cast<PointerType>(X->getType())->getAddressSpace();
51245113
IntegerType *IntCastTy =
51255114
IntegerType::get(M.getContext(), XElemTy->getScalarSizeInBits());
5126-
Value *XBCast =
5127-
Builder.CreateBitCast(X, IntCastTy->getPointerTo(Addrspace));
51285115
LoadInst *OldVal =
5129-
Builder.CreateLoad(IntCastTy, XBCast, X->getName() + ".atomic.load");
5116+
Builder.CreateLoad(IntCastTy, X, X->getName() + ".atomic.load");
51305117
OldVal->setAtomic(AO);
51315118
// CurBB
51325119
// | /---\
@@ -5147,14 +5134,7 @@ std::pair<Value *, Value *> OpenMPIRBuilder::emitAtomicUpdate(
51475134
Builder.SetInsertPoint(ContBB);
51485135
llvm::PHINode *PHI = Builder.CreatePHI(OldVal->getType(), 2);
51495136
PHI->addIncoming(OldVal, CurBB);
5150-
IntegerType *NewAtomicCastTy =
5151-
IntegerType::get(M.getContext(), XElemTy->getScalarSizeInBits());
51525137
bool IsIntTy = XElemTy->isIntegerTy();
5153-
Value *NewAtomicIntAddr =
5154-
(IsIntTy)
5155-
? NewAtomicAddr
5156-
: Builder.CreateBitCast(NewAtomicAddr,
5157-
NewAtomicCastTy->getPointerTo(Addrspace));
51585138
Value *OldExprVal = PHI;
51595139
if (!IsIntTy) {
51605140
if (XElemTy->isFloatingPointTy()) {
@@ -5168,15 +5148,11 @@ std::pair<Value *, Value *> OpenMPIRBuilder::emitAtomicUpdate(
51685148

51695149
Value *Upd = UpdateOp(OldExprVal, Builder);
51705150
Builder.CreateStore(Upd, NewAtomicAddr);
5171-
LoadInst *DesiredVal = Builder.CreateLoad(IntCastTy, NewAtomicIntAddr);
5172-
Value *XAddr =
5173-
(IsIntTy)
5174-
? X
5175-
: Builder.CreateBitCast(X, IntCastTy->getPointerTo(Addrspace));
5151+
LoadInst *DesiredVal = Builder.CreateLoad(IntCastTy, NewAtomicAddr);
51765152
AtomicOrdering Failure =
51775153
llvm::AtomicCmpXchgInst::getStrongestFailureOrdering(AO);
51785154
AtomicCmpXchgInst *Result = Builder.CreateAtomicCmpXchg(
5179-
XAddr, PHI, DesiredVal, llvm::MaybeAlign(), AO, Failure);
5155+
X, PHI, DesiredVal, llvm::MaybeAlign(), AO, Failure);
51805156
Result->setVolatile(VolatileX);
51815157
Value *PreviousVal = Builder.CreateExtractValue(Result, /*Idxs=*/0);
51825158
Value *SuccessFailureVal = Builder.CreateExtractValue(Result, /*Idxs=*/1);
@@ -5256,15 +5232,11 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createAtomicCompare(
52565232
AtomicOrdering Failure = AtomicCmpXchgInst::getStrongestFailureOrdering(AO);
52575233
AtomicCmpXchgInst *Result = nullptr;
52585234
if (!IsInteger) {
5259-
unsigned Addrspace =
5260-
cast<PointerType>(X.Var->getType())->getAddressSpace();
52615235
IntegerType *IntCastTy =
52625236
IntegerType::get(M.getContext(), X.ElemTy->getScalarSizeInBits());
5263-
Value *XBCast =
5264-
Builder.CreateBitCast(X.Var, IntCastTy->getPointerTo(Addrspace));
52655237
Value *EBCast = Builder.CreateBitCast(E, IntCastTy);
52665238
Value *DBCast = Builder.CreateBitCast(D, IntCastTy);
5267-
Result = Builder.CreateAtomicCmpXchg(XBCast, EBCast, DBCast, MaybeAlign(),
5239+
Result = Builder.CreateAtomicCmpXchg(X.Var, EBCast, DBCast, MaybeAlign(),
52685240
AO, Failure);
52695241
} else {
52705242
Result =

llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,16 +1210,15 @@ instCombineSVELD1(InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL) {
12101210
Value *Pred = II.getOperand(0);
12111211
Value *PtrOp = II.getOperand(1);
12121212
Type *VecTy = II.getType();
1213-
Value *VecPtr = IC.Builder.CreateBitCast(PtrOp, VecTy->getPointerTo());
12141213

12151214
if (isAllActivePredicate(Pred)) {
1216-
LoadInst *Load = IC.Builder.CreateLoad(VecTy, VecPtr);
1215+
LoadInst *Load = IC.Builder.CreateLoad(VecTy, PtrOp);
12171216
Load->copyMetadata(II);
12181217
return IC.replaceInstUsesWith(II, Load);
12191218
}
12201219

12211220
CallInst *MaskedLoad =
1222-
IC.Builder.CreateMaskedLoad(VecTy, VecPtr, PtrOp->getPointerAlignment(DL),
1221+
IC.Builder.CreateMaskedLoad(VecTy, PtrOp, PtrOp->getPointerAlignment(DL),
12231222
Pred, ConstantAggregateZero::get(VecTy));
12241223
MaskedLoad->copyMetadata(II);
12251224
return IC.replaceInstUsesWith(II, MaskedLoad);
@@ -1230,17 +1229,15 @@ instCombineSVEST1(InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL) {
12301229
Value *VecOp = II.getOperand(0);
12311230
Value *Pred = II.getOperand(1);
12321231
Value *PtrOp = II.getOperand(2);
1233-
Value *VecPtr =
1234-
IC.Builder.CreateBitCast(PtrOp, VecOp->getType()->getPointerTo());
12351232

12361233
if (isAllActivePredicate(Pred)) {
1237-
StoreInst *Store = IC.Builder.CreateStore(VecOp, VecPtr);
1234+
StoreInst *Store = IC.Builder.CreateStore(VecOp, PtrOp);
12381235
Store->copyMetadata(II);
12391236
return IC.eraseInstFromFunction(II);
12401237
}
12411238

12421239
CallInst *MaskedStore = IC.Builder.CreateMaskedStore(
1243-
VecOp, VecPtr, PtrOp->getPointerAlignment(DL), Pred);
1240+
VecOp, PtrOp, PtrOp->getPointerAlignment(DL), Pred);
12441241
MaskedStore->copyMetadata(II);
12451242
return IC.eraseInstFromFunction(II);
12461243
}

llvm/lib/Target/X86/X86InterleavedAccess.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,22 +193,18 @@ void X86InterleavedAccessGroup::decompose(
193193

194194
// Decompose the load instruction.
195195
LoadInst *LI = cast<LoadInst>(VecInst);
196-
Type *VecBaseTy, *VecBasePtrTy;
197-
Value *VecBasePtr;
196+
Type *VecBaseTy;
198197
unsigned int NumLoads = NumSubVectors;
199198
// In the case of stride 3 with a vector of 32 elements load the information
200199
// in the following way:
201200
// [0,1...,VF/2-1,VF/2+VF,VF/2+VF+1,...,2VF-1]
202201
unsigned VecLength = DL.getTypeSizeInBits(VecWidth);
202+
Value *VecBasePtr = LI->getPointerOperand();
203203
if (VecLength == 768 || VecLength == 1536) {
204204
VecBaseTy = FixedVectorType::get(Type::getInt8Ty(LI->getContext()), 16);
205-
VecBasePtrTy = VecBaseTy->getPointerTo(LI->getPointerAddressSpace());
206-
VecBasePtr = Builder.CreateBitCast(LI->getPointerOperand(), VecBasePtrTy);
207205
NumLoads = NumSubVectors * (VecLength / 384);
208206
} else {
209207
VecBaseTy = SubVecTy;
210-
VecBasePtrTy = VecBaseTy->getPointerTo(LI->getPointerAddressSpace());
211-
VecBasePtr = Builder.CreateBitCast(LI->getPointerOperand(), VecBasePtrTy);
212208
}
213209
// Generate N loads of T type.
214210
assert(VecBaseTy->getPrimitiveSizeInBits().isKnownMultipleOf(8) &&

llvm/lib/Target/X86/X86WinEHState.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@ Type *WinEHStatePass::getEHLinkRegistrationType() {
212212
LLVMContext &Context = TheModule->getContext();
213213
EHLinkRegistrationTy = StructType::create(Context, "EHRegistrationNode");
214214
Type *FieldTys[] = {
215-
EHLinkRegistrationTy->getPointerTo(0), // EHRegistrationNode *Next
215+
PointerType::getUnqual(
216+
EHLinkRegistrationTy->getContext()), // EHRegistrationNode *Next
216217
Type::getInt8PtrTy(Context) // EXCEPTION_DISPOSITION (*Handler)(...)
217218
};
218219
EHLinkRegistrationTy->setBody(FieldTys, false);
@@ -404,11 +405,9 @@ Function *WinEHStatePass::generateLSDAInEAXThunk(Function *ParentFunc) {
404405
BasicBlock *EntryBB = BasicBlock::Create(Context, "entry", Trampoline);
405406
IRBuilder<> Builder(EntryBB);
406407
Value *LSDA = emitEHLSDA(Builder, ParentFunc);
407-
Value *CastPersonality =
408-
Builder.CreateBitCast(PersonalityFn, TargetFuncTy->getPointerTo());
409408
auto AI = Trampoline->arg_begin();
410409
Value *Args[5] = {LSDA, &*AI++, &*AI++, &*AI++, &*AI++};
411-
CallInst *Call = Builder.CreateCall(TargetFuncTy, CastPersonality, Args);
410+
CallInst *Call = Builder.CreateCall(TargetFuncTy, PersonalityFn, Args);
412411
// Can't use musttail due to prototype mismatch, but we can use tail.
413412
Call->setTailCall(true);
414413
// Set inreg so we pass it in EAX.

llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1650,15 +1650,14 @@ class LowerMatrixIntrinsics {
16501650
auto *ArrayTy = ArrayType::get(VT->getElementType(), VT->getNumElements());
16511651
AllocaInst *Alloca =
16521652
Builder.CreateAlloca(ArrayTy, Load->getPointerAddressSpace());
1653-
Value *BC = Builder.CreateBitCast(Alloca, VT->getPointerTo());
16541653

1655-
Builder.CreateMemCpy(BC, Alloca->getAlign(), Load->getPointerOperand(),
1654+
Builder.CreateMemCpy(Alloca, Alloca->getAlign(), Load->getPointerOperand(),
16561655
Load->getAlign(), LoadLoc.Size.getValue());
16571656
Builder.SetInsertPoint(Fusion, Fusion->begin());
16581657
PHINode *PHI = Builder.CreatePHI(Load->getPointerOperandType(), 3);
16591658
PHI->addIncoming(Load->getPointerOperand(), Check0);
16601659
PHI->addIncoming(Load->getPointerOperand(), Check1);
1661-
PHI->addIncoming(BC, Copy);
1660+
PHI->addIncoming(Alloca, Copy);
16621661

16631662
// Adjust DT.
16641663
DTUpdates.push_back({DT->Insert, Check0, Check1});

llvm/unittests/IR/PatternMatch.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1756,18 +1756,16 @@ TEST_F(PatternMatchTest, VScale) {
17561756
DataLayout DL = M->getDataLayout();
17571757

17581758
Type *VecTy = ScalableVectorType::get(IRB.getInt8Ty(), 1);
1759-
Type *VecPtrTy = VecTy->getPointerTo();
1760-
Value *NullPtrVec = Constant::getNullValue(VecPtrTy);
1759+
Value *NullPtrVec =
1760+
Constant::getNullValue(PointerType::getUnqual(VecTy->getContext()));
17611761
Value *GEP = IRB.CreateGEP(VecTy, NullPtrVec, IRB.getInt64(1));
17621762
Value *PtrToInt = IRB.CreatePtrToInt(GEP, DL.getIntPtrType(GEP->getType()));
17631763
EXPECT_TRUE(match(PtrToInt, m_VScale()));
17641764

1765-
// This used to cause assertion failures when attempting to match m_VScale.
1766-
// With opaque pointers the bitcast is no longer present.
17671765
Type *VecTy2 = ScalableVectorType::get(IRB.getInt8Ty(), 2);
1768-
Value *NullPtrVec2 = Constant::getNullValue(VecTy2->getPointerTo());
1769-
Value *BitCast = IRB.CreateBitCast(NullPtrVec2, VecPtrTy);
1770-
Value *GEP2 = IRB.CreateGEP(VecTy, BitCast, IRB.getInt64(1));
1766+
Value *NullPtrVec2 =
1767+
Constant::getNullValue(PointerType::getUnqual(VecTy2->getContext()));
1768+
Value *GEP2 = IRB.CreateGEP(VecTy, NullPtrVec2, IRB.getInt64(1));
17711769
Value *PtrToInt2 =
17721770
IRB.CreatePtrToInt(GEP2, DL.getIntPtrType(GEP2->getType()));
17731771
EXPECT_TRUE(match(PtrToInt2, m_VScale()));

0 commit comments

Comments
 (0)