@@ -1757,8 +1757,7 @@ static Value *upgradeX86BinaryIntrinsics(IRBuilder<> &Builder, CallBase &CI,
1757
1757
Type *Ty = CI.getType ();
1758
1758
Value *Op0 = CI.getOperand (0 );
1759
1759
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});
1762
1761
1763
1762
if (CI.arg_size () == 4 ) { // For masked intrinsics.
1764
1763
Value *VecSrc = CI.getOperand (2 );
@@ -1784,8 +1783,7 @@ static Value *upgradeX86Rotate(IRBuilder<> &Builder, CallBase &CI,
1784
1783
}
1785
1784
1786
1785
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});
1789
1787
1790
1788
if (CI.arg_size () == 4 ) { // For masked intrinsics.
1791
1789
Value *VecSrc = CI.getOperand (2 );
@@ -1854,8 +1852,7 @@ static Value *upgradeX86ConcatShift(IRBuilder<> &Builder, CallBase &CI,
1854
1852
}
1855
1853
1856
1854
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});
1859
1856
1860
1857
unsigned NumArgs = CI.arg_size ();
1861
1858
if (NumArgs >= 4 ) { // For masked intrinsics.
@@ -1915,9 +1912,8 @@ static Value *upgradeMaskedLoad(IRBuilder<> &Builder, Value *Ptr,
1915
1912
static Value *upgradeAbs (IRBuilder<> &Builder, CallBase &CI) {
1916
1913
Type *Ty = CI.getType ();
1917
1914
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 )});
1921
1917
if (CI.arg_size () == 3 )
1922
1918
Res = emitX86Select (Builder, CI.getArgOperand (2 ), Res, CI.getArgOperand (1 ));
1923
1919
return Res;
@@ -2009,9 +2005,8 @@ static Value *upgradeMaskedCompare(IRBuilder<> &Builder, CallBase &CI,
2009
2005
// Replace a masked intrinsic with an older unmasked intrinsic.
2010
2006
static Value *upgradeX86MaskedShift (IRBuilder<> &Builder, CallBase &CI,
2011
2007
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 )});
2015
2010
return emitX86Select (Builder, CI.getArgOperand (3 ), Rep, CI.getArgOperand (2 ));
2016
2011
}
2017
2012
@@ -2480,9 +2475,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2480
2475
} else if (Name == " sse.sqrt.ss" || Name == " sse2.sqrt.sd" ) {
2481
2476
Value *Vec = CI->getArgOperand (0 );
2482
2477
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);
2486
2479
Rep = Builder.CreateInsertElement (Vec, Elt0, (uint64_t )0 );
2487
2480
} else if (Name.starts_with (" avx.sqrt.p" ) ||
2488
2481
Name.starts_with (" sse2.sqrt.p" ) ||
@@ -2770,9 +2763,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2770
2763
cast<ConstantInt>(CI->getArgOperand (3 ))->getZExtValue () != 4 )) {
2771
2764
Intrinsic::ID IID = IsUnsigned ? Intrinsic::x86_avx512_uitofp_round
2772
2765
: 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 )});
2776
2768
} else {
2777
2769
Rep = IsUnsigned ? Builder.CreateUIToFP (Rep, DstTy, " cvt" )
2778
2770
: Builder.CreateSIToFP (Rep, DstTy, " cvt" );
@@ -2813,9 +2805,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2813
2805
Value *MaskVec = getX86MaskVec (Builder, CI->getArgOperand (2 ),
2814
2806
ResultTy->getNumElements ());
2815
2807
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 )});
2819
2810
} else if (Name.starts_with (" avx512.mask.compress.store." )) {
2820
2811
auto *ResultTy = cast<VectorType>(CI->getArgOperand (1 )->getType ());
2821
2812
Type *PtrTy = ResultTy->getElementType ();
@@ -2828,9 +2819,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2828
2819
getX86MaskVec (Builder, CI->getArgOperand (2 ),
2829
2820
cast<FixedVectorType>(ResultTy)->getNumElements ());
2830
2821
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});
2834
2824
} else if (Name.starts_with (" avx512.mask.compress." ) ||
2835
2825
Name.starts_with (" avx512.mask.expand." )) {
2836
2826
auto *ResultTy = cast<FixedVectorType>(CI->getType ());
@@ -2841,10 +2831,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2841
2831
bool IsCompress = Name[12 ] == ' c' ;
2842
2832
Intrinsic::ID IID = IsCompress ? Intrinsic::x86_avx512_mask_compress
2843
2833
: 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});
2848
2836
} else if (Name.starts_with (" xop.vpcom" )) {
2849
2837
bool IsSigned;
2850
2838
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,
2905
2893
bool ZeroMask = Name[11 ] == ' z' ;
2906
2894
Rep = upgradeX86ConcatShift (Builder, *CI, true , ZeroMask);
2907
2895
} else if (Name == " sse42.crc32.64.8" ) {
2908
- Function *CRC32 = Intrinsic::getOrInsertDeclaration (
2909
- F->getParent (), Intrinsic::x86_sse42_crc32_32_8);
2910
2896
Value *Trunc0 =
2911
2897
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 )});
2913
2900
Rep = Builder.CreateZExt (Rep, CI->getType (), " " );
2914
2901
} else if (Name.starts_with (" avx.vbroadcast.s" ) ||
2915
2902
Name.starts_with (" avx512.vbroadcast.s" )) {
@@ -3769,12 +3756,9 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
3769
3756
IID = Intrinsic::x86_avx512_vfmadd_f64;
3770
3757
else
3771
3758
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);
3774
3760
} 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});
3778
3762
}
3779
3763
3780
3764
Value *PassThru = IsMaskZ ? Constant::getNullValue (Rep->getType ())
@@ -3827,9 +3811,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
3827
3811
3828
3812
Rep = Builder.CreateIntrinsic (IID, {}, {A, B, C, CI->getArgOperand (4 )});
3829
3813
} 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});
3833
3815
}
3834
3816
3835
3817
Value *PassThru = IsMaskZ ? llvm::Constant::getNullValue (CI->getType ())
@@ -4088,8 +4070,8 @@ static Value *upgradeAArch64IntrinsicCall(StringRef Name, CallBase *CI,
4088
4070
Args[1 ] = Builder.CreateIntrinsic (Intrinsic::aarch64_sve_convert_from_svbool,
4089
4071
GoodPredTy, Args[1 ]);
4090
4072
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 ());
4093
4075
}
4094
4076
4095
4077
static Value *upgradeARMIntrinsicCall (StringRef Name, CallBase *CI, Function *F,
@@ -4171,8 +4153,8 @@ static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
4171
4153
Ops.push_back (Op);
4172
4154
}
4173
4155
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 ());
4176
4158
}
4177
4159
llvm_unreachable (" Unknown function for ARM CallBase upgrade." );
4178
4160
}
0 commit comments