Skip to content

Commit 85c17e4

Browse files
authored
[LLVM] Make more use of IRBuilder::CreateIntrinsic. NFC. (#112706)
Convert many instances of: Fn = Intrinsic::getOrInsertDeclaration(...); CreateCall(Fn, ...) to the equivalent CreateIntrinsic call.
1 parent 8c7f80f commit 85c17e4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+251
-453
lines changed

llvm/lib/CodeGen/ExpandVectorPredication.cpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,12 @@ Value *CachingVPExpander::convertEVLToMask(IRBuilder<> &Builder,
235235
// TODO add caching
236236
// Scalable vector %evl conversion.
237237
if (ElemCount.isScalable()) {
238-
auto *M = Builder.GetInsertBlock()->getModule();
239238
Type *BoolVecTy = VectorType::get(Builder.getInt1Ty(), ElemCount);
240-
Function *ActiveMaskFunc = Intrinsic::getOrInsertDeclaration(
241-
M, Intrinsic::get_active_lane_mask, {BoolVecTy, EVLParam->getType()});
242239
// `get_active_lane_mask` performs an implicit less-than comparison.
243240
Value *ConstZero = Builder.getInt32(0);
244-
return Builder.CreateCall(ActiveMaskFunc, {ConstZero, EVLParam});
241+
return Builder.CreateIntrinsic(Intrinsic::get_active_lane_mask,
242+
{BoolVecTy, EVLParam->getType()},
243+
{ConstZero, EVLParam});
245244
}
246245

247246
// Fixed vector %evl conversion.
@@ -299,18 +298,18 @@ Value *CachingVPExpander::expandPredicationToIntCall(
299298
case Intrinsic::umin: {
300299
Value *Op0 = VPI.getOperand(0);
301300
Value *Op1 = VPI.getOperand(1);
302-
Function *Fn = Intrinsic::getOrInsertDeclaration(
303-
VPI.getModule(), UnpredicatedIntrinsicID, {VPI.getType()});
304-
Value *NewOp = Builder.CreateCall(Fn, {Op0, Op1}, VPI.getName());
301+
Value *NewOp = Builder.CreateIntrinsic(
302+
UnpredicatedIntrinsicID, {VPI.getType()}, {Op0, Op1},
303+
/*FMFSource=*/nullptr, VPI.getName());
305304
replaceOperation(*NewOp, VPI);
306305
return NewOp;
307306
}
308307
case Intrinsic::bswap:
309308
case Intrinsic::bitreverse: {
310309
Value *Op = VPI.getOperand(0);
311-
Function *Fn = Intrinsic::getOrInsertDeclaration(
312-
VPI.getModule(), UnpredicatedIntrinsicID, {VPI.getType()});
313-
Value *NewOp = Builder.CreateCall(Fn, {Op}, VPI.getName());
310+
Value *NewOp =
311+
Builder.CreateIntrinsic(UnpredicatedIntrinsicID, {VPI.getType()}, {Op},
312+
/*FMFSource=*/nullptr, VPI.getName());
314313
replaceOperation(*NewOp, VPI);
315314
return NewOp;
316315
}
@@ -327,19 +326,19 @@ Value *CachingVPExpander::expandPredicationToFPCall(
327326
case Intrinsic::fabs:
328327
case Intrinsic::sqrt: {
329328
Value *Op0 = VPI.getOperand(0);
330-
Function *Fn = Intrinsic::getOrInsertDeclaration(
331-
VPI.getModule(), UnpredicatedIntrinsicID, {VPI.getType()});
332-
Value *NewOp = Builder.CreateCall(Fn, {Op0}, VPI.getName());
329+
Value *NewOp =
330+
Builder.CreateIntrinsic(UnpredicatedIntrinsicID, {VPI.getType()}, {Op0},
331+
/*FMFSource=*/nullptr, VPI.getName());
333332
replaceOperation(*NewOp, VPI);
334333
return NewOp;
335334
}
336335
case Intrinsic::maxnum:
337336
case Intrinsic::minnum: {
338337
Value *Op0 = VPI.getOperand(0);
339338
Value *Op1 = VPI.getOperand(1);
340-
Function *Fn = Intrinsic::getOrInsertDeclaration(
341-
VPI.getModule(), UnpredicatedIntrinsicID, {VPI.getType()});
342-
Value *NewOp = Builder.CreateCall(Fn, {Op0, Op1}, VPI.getName());
339+
Value *NewOp = Builder.CreateIntrinsic(
340+
UnpredicatedIntrinsicID, {VPI.getType()}, {Op0, Op1},
341+
/*FMFSource=*/nullptr, VPI.getName());
343342
replaceOperation(*NewOp, VPI);
344343
return NewOp;
345344
}
@@ -592,12 +591,10 @@ bool CachingVPExpander::discardEVLParameter(VPIntrinsic &VPI) {
592591
Type *Int32Ty = Type::getInt32Ty(VPI.getContext());
593592
if (StaticElemCount.isScalable()) {
594593
// TODO add caching
595-
auto *M = VPI.getModule();
596-
Function *VScaleFunc =
597-
Intrinsic::getOrInsertDeclaration(M, Intrinsic::vscale, Int32Ty);
598594
IRBuilder<> Builder(VPI.getParent(), VPI.getIterator());
599595
Value *FactorConst = Builder.getInt32(StaticElemCount.getKnownMinValue());
600-
Value *VScale = Builder.CreateCall(VScaleFunc, {}, "vscale");
596+
Value *VScale = Builder.CreateIntrinsic(Intrinsic::vscale, Int32Ty, {},
597+
/*FMFSource=*/nullptr, "vscale");
601598
MaxEVL = Builder.CreateMul(VScale, FactorConst, "scalable_size",
602599
/*NUW*/ true, /*NSW*/ false);
603600
} else {

llvm/lib/CodeGen/HardwareLoops.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -512,8 +512,7 @@ Value* HardwareLoop::InsertIterationSetup(Value *LoopCountInit) {
512512
: Intrinsic::test_set_loop_iterations)
513513
: (UsePhi ? Intrinsic::start_loop_iterations
514514
: Intrinsic::set_loop_iterations);
515-
Function *LoopIter = Intrinsic::getOrInsertDeclaration(M, ID, Ty);
516-
Value *LoopSetup = Builder.CreateCall(LoopIter, LoopCountInit);
515+
Value *LoopSetup = Builder.CreateIntrinsic(ID, Ty, LoopCountInit);
517516

518517
// Use the return value of the intrinsic to control the entry of the loop.
519518
if (UseLoopGuard) {
@@ -541,10 +540,9 @@ void HardwareLoop::InsertLoopDec() {
541540
Attribute::StrictFP))
542541
CondBuilder.setIsFPConstrained(true);
543542

544-
Function *DecFunc = Intrinsic::getOrInsertDeclaration(
545-
M, Intrinsic::loop_decrement, LoopDecrement->getType());
546543
Value *Ops[] = { LoopDecrement };
547-
Value *NewCond = CondBuilder.CreateCall(DecFunc, Ops);
544+
Value *NewCond = CondBuilder.CreateIntrinsic(Intrinsic::loop_decrement,
545+
LoopDecrement->getType(), Ops);
548546
Value *OldCond = ExitBranch->getCondition();
549547
ExitBranch->setCondition(NewCond);
550548

@@ -565,10 +563,9 @@ Instruction* HardwareLoop::InsertLoopRegDec(Value *EltsRem) {
565563
Attribute::StrictFP))
566564
CondBuilder.setIsFPConstrained(true);
567565

568-
Function *DecFunc = Intrinsic::getOrInsertDeclaration(
569-
M, Intrinsic::loop_decrement_reg, {EltsRem->getType()});
570566
Value *Ops[] = { EltsRem, LoopDecrement };
571-
Value *Call = CondBuilder.CreateCall(DecFunc, Ops);
567+
Value *Call = CondBuilder.CreateIntrinsic(Intrinsic::loop_decrement_reg,
568+
{EltsRem->getType()}, Ops);
572569

573570
LLVM_DEBUG(dbgs() << "HWLoops: Inserted loop dec: " << *Call << "\n");
574571
return cast<Instruction>(Call);

llvm/lib/IR/AutoUpgrade.cpp

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,8 +1757,7 @@ static Value *upgradeX86BinaryIntrinsics(IRBuilder<> &Builder, CallBase &CI,
17571757
Type *Ty = CI.getType();
17581758
Value *Op0 = CI.getOperand(0);
17591759
Value *Op1 = CI.getOperand(1);
1760-
Function *Intrin = Intrinsic::getOrInsertDeclaration(CI.getModule(), IID, Ty);
1761-
Value *Res = Builder.CreateCall(Intrin, {Op0, Op1});
1760+
Value *Res = Builder.CreateIntrinsic(IID, Ty, {Op0, Op1});
17621761

17631762
if (CI.arg_size() == 4) { // For masked intrinsics.
17641763
Value *VecSrc = CI.getOperand(2);
@@ -1784,8 +1783,7 @@ static Value *upgradeX86Rotate(IRBuilder<> &Builder, CallBase &CI,
17841783
}
17851784

17861785
Intrinsic::ID IID = IsRotateRight ? Intrinsic::fshr : Intrinsic::fshl;
1787-
Function *Intrin = Intrinsic::getOrInsertDeclaration(CI.getModule(), IID, Ty);
1788-
Value *Res = Builder.CreateCall(Intrin, {Src, Src, Amt});
1786+
Value *Res = Builder.CreateIntrinsic(IID, Ty, {Src, Src, Amt});
17891787

17901788
if (CI.arg_size() == 4) { // For masked intrinsics.
17911789
Value *VecSrc = CI.getOperand(2);
@@ -1854,8 +1852,7 @@ static Value *upgradeX86ConcatShift(IRBuilder<> &Builder, CallBase &CI,
18541852
}
18551853

18561854
Intrinsic::ID IID = IsShiftRight ? Intrinsic::fshr : Intrinsic::fshl;
1857-
Function *Intrin = Intrinsic::getOrInsertDeclaration(CI.getModule(), IID, Ty);
1858-
Value *Res = Builder.CreateCall(Intrin, {Op0, Op1, Amt});
1855+
Value *Res = Builder.CreateIntrinsic(IID, Ty, {Op0, Op1, Amt});
18591856

18601857
unsigned NumArgs = CI.arg_size();
18611858
if (NumArgs >= 4) { // For masked intrinsics.
@@ -1915,9 +1912,8 @@ static Value *upgradeMaskedLoad(IRBuilder<> &Builder, Value *Ptr,
19151912
static Value *upgradeAbs(IRBuilder<> &Builder, CallBase &CI) {
19161913
Type *Ty = CI.getType();
19171914
Value *Op0 = CI.getArgOperand(0);
1918-
Function *F =
1919-
Intrinsic::getOrInsertDeclaration(CI.getModule(), Intrinsic::abs, Ty);
1920-
Value *Res = Builder.CreateCall(F, {Op0, Builder.getInt1(false)});
1915+
Value *Res = Builder.CreateIntrinsic(Intrinsic::abs, Ty,
1916+
{Op0, Builder.getInt1(false)});
19211917
if (CI.arg_size() == 3)
19221918
Res = emitX86Select(Builder, CI.getArgOperand(2), Res, CI.getArgOperand(1));
19231919
return Res;
@@ -2009,9 +2005,8 @@ static Value *upgradeMaskedCompare(IRBuilder<> &Builder, CallBase &CI,
20092005
// Replace a masked intrinsic with an older unmasked intrinsic.
20102006
static Value *upgradeX86MaskedShift(IRBuilder<> &Builder, CallBase &CI,
20112007
Intrinsic::ID IID) {
2012-
Function *Intrin = Intrinsic::getOrInsertDeclaration(CI.getModule(), IID);
2013-
Value *Rep = Builder.CreateCall(Intrin,
2014-
{ CI.getArgOperand(0), CI.getArgOperand(1) });
2008+
Value *Rep = Builder.CreateIntrinsic(
2009+
IID, {}, {CI.getArgOperand(0), CI.getArgOperand(1)});
20152010
return emitX86Select(Builder, CI.getArgOperand(3), Rep, CI.getArgOperand(2));
20162011
}
20172012

@@ -2480,9 +2475,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
24802475
} else if (Name == "sse.sqrt.ss" || Name == "sse2.sqrt.sd") {
24812476
Value *Vec = CI->getArgOperand(0);
24822477
Value *Elt0 = Builder.CreateExtractElement(Vec, (uint64_t)0);
2483-
Function *Intr = Intrinsic::getOrInsertDeclaration(
2484-
F->getParent(), Intrinsic::sqrt, Elt0->getType());
2485-
Elt0 = Builder.CreateCall(Intr, Elt0);
2478+
Elt0 = Builder.CreateIntrinsic(Intrinsic::sqrt, Elt0->getType(), Elt0);
24862479
Rep = Builder.CreateInsertElement(Vec, Elt0, (uint64_t)0);
24872480
} else if (Name.starts_with("avx.sqrt.p") ||
24882481
Name.starts_with("sse2.sqrt.p") ||
@@ -2770,9 +2763,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
27702763
cast<ConstantInt>(CI->getArgOperand(3))->getZExtValue() != 4)) {
27712764
Intrinsic::ID IID = IsUnsigned ? Intrinsic::x86_avx512_uitofp_round
27722765
: Intrinsic::x86_avx512_sitofp_round;
2773-
Function *F = Intrinsic::getOrInsertDeclaration(CI->getModule(), IID,
2774-
{DstTy, SrcTy});
2775-
Rep = Builder.CreateCall(F, {Rep, CI->getArgOperand(3)});
2766+
Rep = Builder.CreateIntrinsic(IID, {DstTy, SrcTy},
2767+
{Rep, CI->getArgOperand(3)});
27762768
} else {
27772769
Rep = IsUnsigned ? Builder.CreateUIToFP(Rep, DstTy, "cvt")
27782770
: Builder.CreateSIToFP(Rep, DstTy, "cvt");
@@ -2813,9 +2805,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
28132805
Value *MaskVec = getX86MaskVec(Builder, CI->getArgOperand(2),
28142806
ResultTy->getNumElements());
28152807

2816-
Function *ELd = Intrinsic::getOrInsertDeclaration(
2817-
F->getParent(), Intrinsic::masked_expandload, ResultTy);
2818-
Rep = Builder.CreateCall(ELd, {Ptr, MaskVec, CI->getOperand(1)});
2808+
Rep = Builder.CreateIntrinsic(Intrinsic::masked_expandload, ResultTy,
2809+
{Ptr, MaskVec, CI->getOperand(1)});
28192810
} else if (Name.starts_with("avx512.mask.compress.store.")) {
28202811
auto *ResultTy = cast<VectorType>(CI->getArgOperand(1)->getType());
28212812
Type *PtrTy = ResultTy->getElementType();
@@ -2828,9 +2819,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
28282819
getX86MaskVec(Builder, CI->getArgOperand(2),
28292820
cast<FixedVectorType>(ResultTy)->getNumElements());
28302821

2831-
Function *CSt = Intrinsic::getOrInsertDeclaration(
2832-
F->getParent(), Intrinsic::masked_compressstore, ResultTy);
2833-
Rep = Builder.CreateCall(CSt, {CI->getArgOperand(1), Ptr, MaskVec});
2822+
Rep = Builder.CreateIntrinsic(Intrinsic::masked_compressstore, ResultTy,
2823+
{CI->getArgOperand(1), Ptr, MaskVec});
28342824
} else if (Name.starts_with("avx512.mask.compress.") ||
28352825
Name.starts_with("avx512.mask.expand.")) {
28362826
auto *ResultTy = cast<FixedVectorType>(CI->getType());
@@ -2841,10 +2831,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
28412831
bool IsCompress = Name[12] == 'c';
28422832
Intrinsic::ID IID = IsCompress ? Intrinsic::x86_avx512_mask_compress
28432833
: Intrinsic::x86_avx512_mask_expand;
2844-
Function *Intr =
2845-
Intrinsic::getOrInsertDeclaration(F->getParent(), IID, ResultTy);
2846-
Rep = Builder.CreateCall(Intr,
2847-
{CI->getOperand(0), CI->getOperand(1), MaskVec});
2834+
Rep = Builder.CreateIntrinsic(
2835+
IID, ResultTy, {CI->getOperand(0), CI->getOperand(1), MaskVec});
28482836
} else if (Name.starts_with("xop.vpcom")) {
28492837
bool IsSigned;
28502838
if (Name.ends_with("ub") || Name.ends_with("uw") || Name.ends_with("ud") ||
@@ -2905,11 +2893,10 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
29052893
bool ZeroMask = Name[11] == 'z';
29062894
Rep = upgradeX86ConcatShift(Builder, *CI, true, ZeroMask);
29072895
} else if (Name == "sse42.crc32.64.8") {
2908-
Function *CRC32 = Intrinsic::getOrInsertDeclaration(
2909-
F->getParent(), Intrinsic::x86_sse42_crc32_32_8);
29102896
Value *Trunc0 =
29112897
Builder.CreateTrunc(CI->getArgOperand(0), Type::getInt32Ty(C));
2912-
Rep = Builder.CreateCall(CRC32, {Trunc0, CI->getArgOperand(1)});
2898+
Rep = Builder.CreateIntrinsic(Intrinsic::x86_sse42_crc32_32_8, {},
2899+
{Trunc0, CI->getArgOperand(1)});
29132900
Rep = Builder.CreateZExt(Rep, CI->getType(), "");
29142901
} else if (Name.starts_with("avx.vbroadcast.s") ||
29152902
Name.starts_with("avx512.vbroadcast.s")) {
@@ -3769,12 +3756,9 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
37693756
IID = Intrinsic::x86_avx512_vfmadd_f64;
37703757
else
37713758
IID = Intrinsic::x86_avx512_vfmadd_f32;
3772-
Function *FMA = Intrinsic::getOrInsertDeclaration(CI->getModule(), IID);
3773-
Rep = Builder.CreateCall(FMA, Ops);
3759+
Rep = Builder.CreateIntrinsic(IID, {}, Ops);
37743760
} else {
3775-
Function *FMA = Intrinsic::getOrInsertDeclaration(
3776-
CI->getModule(), Intrinsic::fma, A->getType());
3777-
Rep = Builder.CreateCall(FMA, {A, B, C});
3761+
Rep = Builder.CreateIntrinsic(Intrinsic::fma, A->getType(), {A, B, C});
37783762
}
37793763

37803764
Value *PassThru = IsMaskZ ? Constant::getNullValue(Rep->getType())
@@ -3827,9 +3811,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
38273811

38283812
Rep = Builder.CreateIntrinsic(IID, {}, {A, B, C, CI->getArgOperand(4)});
38293813
} else {
3830-
Function *FMA = Intrinsic::getOrInsertDeclaration(
3831-
CI->getModule(), Intrinsic::fma, A->getType());
3832-
Rep = Builder.CreateCall(FMA, {A, B, C});
3814+
Rep = Builder.CreateIntrinsic(Intrinsic::fma, A->getType(), {A, B, C});
38333815
}
38343816

38353817
Value *PassThru = IsMaskZ ? llvm::Constant::getNullValue(CI->getType())
@@ -4088,8 +4070,8 @@ static Value *upgradeAArch64IntrinsicCall(StringRef Name, CallBase *CI,
40884070
Args[1] = Builder.CreateIntrinsic(Intrinsic::aarch64_sve_convert_from_svbool,
40894071
GoodPredTy, Args[1]);
40904072

4091-
Function *NewF = Intrinsic::getOrInsertDeclaration(CI->getModule(), NewID);
4092-
return Builder.CreateCall(NewF, Args, CI->getName());
4073+
return Builder.CreateIntrinsic(NewID, {}, Args, /*FMFSource=*/nullptr,
4074+
CI->getName());
40934075
}
40944076

40954077
static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
@@ -4171,8 +4153,8 @@ static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
41714153
Ops.push_back(Op);
41724154
}
41734155

4174-
Function *Fn = Intrinsic::getOrInsertDeclaration(F->getParent(), ID, Tys);
4175-
return Builder.CreateCall(Fn, Ops, CI->getName());
4156+
return Builder.CreateIntrinsic(ID, Tys, Ops, /*FMFSource=*/nullptr,
4157+
CI->getName());
41764158
}
41774159
llvm_unreachable("Unknown function for ARM CallBase upgrade.");
41784160
}

0 commit comments

Comments
 (0)