aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/AutoUpgrade.cpp
diff options
context:
space:
mode:
authorJay Foad <jay.foad@amd.com>2024-10-16 15:43:30 +0100
committerGitHub <noreply@github.com>2024-10-16 15:43:30 +0100
commitd9c95efb6c102fc9e9c52a558d611bb7aa433dbb (patch)
tree414fb671e4a1d182232ca484244ce2dbd3658227 /llvm/lib/IR/AutoUpgrade.cpp
parent383df16317eec3b29b93025e2a86ea024b3f59c7 (diff)
downloadllvm-d9c95efb6c102fc9e9c52a558d611bb7aa433dbb.zip
llvm-d9c95efb6c102fc9e9c52a558d611bb7aa433dbb.tar.gz
llvm-d9c95efb6c102fc9e9c52a558d611bb7aa433dbb.tar.bz2
[LLVM] Make more use of IRBuilder::CreateIntrinsic. NFC. (#112546)
Convert almost every instance of: CreateCall(Intrinsic::getOrInsertDeclaration(...), ...) to the equivalent CreateIntrinsic call.
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp150
1 files changed, 55 insertions, 95 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 32f66f7..519ff8d 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -1745,8 +1745,7 @@ static Value *upgradeX86VPERMT2Intrinsics(IRBuilder<> &Builder, CallBase &CI,
if (!IndexForm)
std::swap(Args[0], Args[1]);
- Value *V = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI.getModule(), IID), Args);
+ Value *V = Builder.CreateIntrinsic(IID, {}, Args);
Value *PassThru = ZeroMask ? ConstantAggregateZero::get(Ty)
: Builder.CreateBitCast(CI.getArgOperand(1),
Ty);
@@ -2269,8 +2268,7 @@ static bool upgradeAVX512MaskToSelect(StringRef Name, IRBuilder<> &Builder,
SmallVector<Value *, 4> Args(CI.args());
Args.pop_back();
Args.pop_back();
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI.getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
unsigned NumArgs = CI.arg_size();
Rep = emitX86Select(Builder, CI.getArgOperand(NumArgs - 1), Rep,
CI.getArgOperand(NumArgs - 2));
@@ -2325,25 +2323,21 @@ static Value *upgradeNVVMIntrinsicCall(StringRef Name, CallBase *CI,
} else if (Name == "clz.ll") {
// llvm.nvvm.clz.ll returns an i32, but llvm.ctlz.i64 returns an i64.
Value *Arg = CI->getArgOperand(0);
- Value *Ctlz = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), Intrinsic::ctlz,
- {Arg->getType()}),
- {Arg, Builder.getFalse()}, "ctlz");
+ Value *Ctlz = Builder.CreateIntrinsic(Intrinsic::ctlz, {Arg->getType()},
+ {Arg, Builder.getFalse()},
+ /*FMFSource=*/nullptr, "ctlz");
Rep = Builder.CreateTrunc(Ctlz, Builder.getInt32Ty(), "ctlz.trunc");
} else if (Name == "popc.ll") {
// llvm.nvvm.popc.ll returns an i32, but llvm.ctpop.i64 returns an
// i64.
Value *Arg = CI->getArgOperand(0);
- Value *Popc = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), Intrinsic::ctpop,
- {Arg->getType()}),
- Arg, "ctpop");
+ Value *Popc = Builder.CreateIntrinsic(Intrinsic::ctpop, {Arg->getType()},
+ Arg, /*FMFSource=*/nullptr, "ctpop");
Rep = Builder.CreateTrunc(Popc, Builder.getInt32Ty(), "ctpop.trunc");
} else if (Name == "h2f") {
- Rep = Builder.CreateCall(Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::convert_from_fp16,
- {Builder.getFloatTy()}),
- CI->getArgOperand(0), "h2f");
+ Rep = Builder.CreateIntrinsic(Intrinsic::convert_from_fp16,
+ {Builder.getFloatTy()}, CI->getArgOperand(0),
+ /*FMFSource=*/nullptr, "h2f");
} else if (Name.consume_front("bitcast.") &&
(Name == "f2i" || Name == "i2f" || Name == "ll2d" ||
Name == "d2ll")) {
@@ -2493,10 +2487,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
} else if (Name.starts_with("avx.sqrt.p") ||
Name.starts_with("sse2.sqrt.p") ||
Name.starts_with("sse.sqrt.p")) {
- Rep =
- Builder.CreateCall(Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::sqrt, CI->getType()),
- {CI->getArgOperand(0)});
+ Rep = Builder.CreateIntrinsic(Intrinsic::sqrt, CI->getType(),
+ {CI->getArgOperand(0)});
} else if (Name.starts_with("avx512.mask.sqrt.p")) {
if (CI->arg_size() == 4 &&
(!isa<ConstantInt>(CI->getArgOperand(3)) ||
@@ -2505,13 +2497,10 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
: Intrinsic::x86_avx512_sqrt_pd_512;
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(3)};
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
} else {
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), Intrinsic::sqrt,
- CI->getType()),
- {CI->getArgOperand(0)});
+ Rep = Builder.CreateIntrinsic(Intrinsic::sqrt, CI->getType(),
+ {CI->getArgOperand(0)});
}
Rep =
emitX86Select(Builder, CI->getArgOperand(2), Rep, CI->getArgOperand(1));
@@ -2635,9 +2624,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
break;
}
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
- {CI->getOperand(0), CI->getArgOperand(1)});
+ Rep = Builder.CreateIntrinsic(IID, {},
+ {CI->getOperand(0), CI->getArgOperand(1)});
Rep = applyX86MaskOn1BitsVec(Builder, Rep, CI->getArgOperand(2));
} else if (Name.starts_with("avx512.mask.fpclass.p")) {
Type *OpTy = CI->getArgOperand(0)->getType();
@@ -2659,9 +2647,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
llvm_unreachable("Unexpected intrinsic");
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
- {CI->getOperand(0), CI->getArgOperand(1)});
+ Rep = Builder.CreateIntrinsic(IID, {},
+ {CI->getOperand(0), CI->getArgOperand(1)});
Rep = applyX86MaskOn1BitsVec(Builder, Rep, CI->getArgOperand(2));
} else if (Name.starts_with("avx512.cmp.p")) {
SmallVector<Value *, 4> Args(CI->args());
@@ -2689,8 +2676,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
std::swap(Mask, Args.back());
Args.push_back(Mask);
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
} else if (Name.starts_with("avx512.mask.cmp.")) {
// Integer compare intrinsics.
unsigned Imm = cast<ConstantInt>(CI->getArgOperand(2))->getZExtValue();
@@ -3413,8 +3399,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
IID = Intrinsic::x86_avx512_add_pd_512;
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
+ Rep = Builder.CreateIntrinsic(
+ IID, {},
{CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(4)});
} else {
Rep = Builder.CreateFAdd(CI->getArgOperand(0), CI->getArgOperand(1));
@@ -3429,8 +3415,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
IID = Intrinsic::x86_avx512_div_pd_512;
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
+ Rep = Builder.CreateIntrinsic(
+ IID, {},
{CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(4)});
} else {
Rep = Builder.CreateFDiv(CI->getArgOperand(0), CI->getArgOperand(1));
@@ -3445,8 +3431,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
IID = Intrinsic::x86_avx512_mul_pd_512;
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
+ Rep = Builder.CreateIntrinsic(
+ IID, {},
{CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(4)});
} else {
Rep = Builder.CreateFMul(CI->getArgOperand(0), CI->getArgOperand(1));
@@ -3461,8 +3447,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
IID = Intrinsic::x86_avx512_sub_pd_512;
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
+ Rep = Builder.CreateIntrinsic(
+ IID, {},
{CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(4)});
} else {
Rep = Builder.CreateFSub(CI->getArgOperand(0), CI->getArgOperand(1));
@@ -3479,16 +3465,15 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
{Intrinsic::x86_avx512_min_ps_512, Intrinsic::x86_avx512_min_pd_512}};
Intrinsic::ID IID = MinMaxTbl[IsMin][IsDouble];
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
+ Rep = Builder.CreateIntrinsic(
+ IID, {},
{CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(4)});
Rep =
emitX86Select(Builder, CI->getArgOperand(3), Rep, CI->getArgOperand(2));
} else if (Name.starts_with("avx512.mask.lzcnt.")) {
Rep =
- Builder.CreateCall(Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::ctlz, CI->getType()),
- {CI->getArgOperand(0), Builder.getInt1(false)});
+ Builder.CreateIntrinsic(Intrinsic::ctlz, CI->getType(),
+ {CI->getArgOperand(0), Builder.getInt1(false)});
Rep =
emitX86Select(Builder, CI->getArgOperand(2), Rep, CI->getArgOperand(1));
} else if (Name.starts_with("avx512.mask.psll")) {
@@ -3732,10 +3717,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
if (NegAcc)
Ops[2] = Builder.CreateFNeg(Ops[2]);
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), Intrinsic::fma,
- Ops[0]->getType()),
- Ops);
+ Rep = Builder.CreateIntrinsic(Intrinsic::fma, Ops[0]->getType(), Ops);
if (IsScalar)
Rep = Builder.CreateInsertElement(CI->getArgOperand(0), Rep, (uint64_t)0);
@@ -3747,10 +3729,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Ops[1] = Builder.CreateExtractElement(Ops[1], (uint64_t)0);
Ops[2] = Builder.CreateExtractElement(Ops[2], (uint64_t)0);
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), Intrinsic::fma,
- Ops[0]->getType()),
- Ops);
+ Rep = Builder.CreateIntrinsic(Intrinsic::fma, Ops[0]->getType(), Ops);
Rep = Builder.CreateInsertElement(Constant::getNullValue(CI->getType()),
Rep, (uint64_t)0);
@@ -3846,9 +3825,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
else
IID = Intrinsic::x86_avx512_vfmadd_pd_512;
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID),
- {A, B, C, CI->getArgOperand(4)});
+ Rep = Builder.CreateIntrinsic(IID, {}, {A, B, C, CI->getArgOperand(4)});
} else {
Function *FMA = Intrinsic::getOrInsertDeclaration(
CI->getModule(), Intrinsic::fma, A->getType());
@@ -3878,8 +3855,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Value *Ops[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2)};
Ops[2] = Builder.CreateFNeg(Ops[2]);
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID), Ops);
+ Rep = Builder.CreateIntrinsic(IID, {}, Ops);
} else if (Name.starts_with("avx512.mask.vfmaddsub.p") ||
Name.starts_with("avx512.mask3.vfmaddsub.p") ||
Name.starts_with("avx512.maskz.vfmaddsub.p") ||
@@ -3902,8 +3878,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
if (IsSubAdd)
Ops[2] = Builder.CreateFNeg(Ops[2]);
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(F->getParent(), IID), Ops);
+ Rep = Builder.CreateIntrinsic(IID, {}, Ops);
} else {
int NumElts = cast<FixedVectorType>(CI->getType())->getNumElements();
@@ -3954,8 +3929,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2), CI->getArgOperand(3)};
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
Value *PassThru = ZeroMask ? ConstantAggregateZero::get(CI->getType())
: CI->getArgOperand(0);
Rep = emitX86Select(Builder, CI->getArgOperand(4), Rep, PassThru);
@@ -3982,8 +3956,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2)};
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
Value *PassThru = ZeroMask ? ConstantAggregateZero::get(CI->getType())
: CI->getArgOperand(0);
Rep = emitX86Select(Builder, CI->getArgOperand(3), Rep, PassThru);
@@ -4018,8 +3991,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2)};
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
Value *PassThru = ZeroMask ? ConstantAggregateZero::get(CI->getType())
: CI->getArgOperand(0);
Rep = emitX86Select(Builder, CI->getArgOperand(3), Rep, PassThru);
@@ -4048,8 +4020,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2)};
- Rep = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Rep = Builder.CreateIntrinsic(IID, {}, Args);
Value *PassThru = ZeroMask ? ConstantAggregateZero::get(CI->getType())
: CI->getArgOperand(0);
Rep = emitX86Select(Builder, CI->getArgOperand(3), Rep, PassThru);
@@ -4071,8 +4042,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
// Make a call with 3 operands.
Value *Args[] = {CI->getArgOperand(0), CI->getArgOperand(1),
CI->getArgOperand(2)};
- Value *NewCall = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(CI->getModule(), IID), Args);
+ Value *NewCall = Builder.CreateIntrinsic(IID, {}, Args);
// Extract the second result and store it.
Value *Data = Builder.CreateExtractValue(NewCall, 1);
@@ -4127,20 +4097,15 @@ static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
if (Name == "mve.vctp64.old") {
// Replace the old v4i1 vctp64 with a v2i1 vctp and predicate-casts to the
// correct type.
- Value *VCTP =
- Builder.CreateCall(Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::arm_mve_vctp64),
- CI->getArgOperand(0), CI->getName());
- Value *C1 = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::arm_mve_pred_v2i,
- {VectorType::get(Builder.getInt1Ty(), 2, false)}),
- VCTP);
- return Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::arm_mve_pred_i2v,
- {VectorType::get(Builder.getInt1Ty(), 4, false)}),
- C1);
+ Value *VCTP = Builder.CreateIntrinsic(Intrinsic::arm_mve_vctp64, {},
+ CI->getArgOperand(0),
+ /*FMFSource=*/nullptr, CI->getName());
+ Value *C1 = Builder.CreateIntrinsic(
+ Intrinsic::arm_mve_pred_v2i,
+ {VectorType::get(Builder.getInt1Ty(), 2, false)}, VCTP);
+ return Builder.CreateIntrinsic(
+ Intrinsic::arm_mve_pred_i2v,
+ {VectorType::get(Builder.getInt1Ty(), 4, false)}, C1);
} else if (Name == "mve.mull.int.predicated.v2i64.v4i32.v4i1" ||
Name == "mve.vqdmull.predicated.v2i64.v4i32.v4i1" ||
Name == "mve.vldr.gather.base.predicated.v2i64.v2i64.v4i1" ||
@@ -4198,15 +4163,10 @@ static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
for (Value *Op : CI->args()) {
Type *Ty = Op->getType();
if (Ty->getScalarSizeInBits() == 1) {
- Value *C1 = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::arm_mve_pred_v2i,
- {VectorType::get(Builder.getInt1Ty(), 4, false)}),
- Op);
- Op = Builder.CreateCall(
- Intrinsic::getOrInsertDeclaration(
- F->getParent(), Intrinsic::arm_mve_pred_i2v, {V2I1Ty}),
- C1);
+ Value *C1 = Builder.CreateIntrinsic(
+ Intrinsic::arm_mve_pred_v2i,
+ {VectorType::get(Builder.getInt1Ty(), 4, false)}, Op);
+ Op = Builder.CreateIntrinsic(Intrinsic::arm_mve_pred_i2v, {V2I1Ty}, C1);
}
Ops.push_back(Op);
}