@@ -1875,9 +1875,6 @@ static Value *upgradeX86ConcatShift(IRBuilder<> &Builder, CallBase &CI,
1875
1875
1876
1876
static Value *upgradeMaskedStore (IRBuilder<> &Builder, Value *Ptr , Value *Data,
1877
1877
Value *Mask, bool Aligned) {
1878
- // Cast the pointer to the right type.
1879
- Ptr = Builder.CreateBitCast (Ptr ,
1880
- llvm::PointerType::getUnqual (Data->getType ()));
1881
1878
const Align Alignment =
1882
1879
Aligned
1883
1880
? Align (Data->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 )
@@ -1897,8 +1894,6 @@ static Value *upgradeMaskedStore(IRBuilder<> &Builder, Value *Ptr, Value *Data,
1897
1894
static Value *upgradeMaskedLoad (IRBuilder<> &Builder, Value *Ptr ,
1898
1895
Value *Passthru, Value *Mask, bool Aligned) {
1899
1896
Type *ValTy = Passthru->getType ();
1900
- // Cast the pointer to the right type.
1901
- Ptr = Builder.CreateBitCast (Ptr , llvm::PointerType::getUnqual (ValTy));
1902
1897
const Align Alignment =
1903
1898
Aligned
1904
1899
? Align (
@@ -2421,13 +2416,10 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2421
2416
2422
2417
// Nontemporal (unaligned) store of the 0'th element of the float/double
2423
2418
// vector.
2424
- Type *SrcEltTy = cast<VectorType>(Arg1->getType ())->getElementType ();
2425
- PointerType *EltPtrTy = PointerType::getUnqual (SrcEltTy);
2426
- Value *Addr = Builder.CreateBitCast (Arg0, EltPtrTy, " cast" );
2427
2419
Value *Extract =
2428
2420
Builder.CreateExtractElement (Arg1, (uint64_t )0 , " extractelement" );
2429
2421
2430
- StoreInst *SI = Builder.CreateAlignedStore (Extract, Addr , Align (1 ));
2422
+ StoreInst *SI = Builder.CreateAlignedStore (Extract, Arg0 , Align (1 ));
2431
2423
SI->setMetadata (LLVMContext::MD_nontemporal, Node);
2432
2424
} else if (Name.starts_with (" avx.movnt." ) ||
2433
2425
Name.starts_with (" avx512.storent." )) {
@@ -2439,11 +2431,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2439
2431
Value *Arg0 = CI->getArgOperand (0 );
2440
2432
Value *Arg1 = CI->getArgOperand (1 );
2441
2433
2442
- // Convert the type of the pointer to a pointer to the stored type.
2443
- Value *BC = Builder.CreateBitCast (
2444
- Arg0, PointerType::getUnqual (Arg1->getType ()), " cast" );
2445
2434
StoreInst *SI = Builder.CreateAlignedStore (
2446
- Arg1, BC ,
2435
+ Arg1, Arg0 ,
2447
2436
Align (Arg1->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 ));
2448
2437
SI->setMetadata (LLVMContext::MD_nontemporal, Node);
2449
2438
} else if (Name == " sse2.storel.dq" ) {
@@ -2453,17 +2442,12 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2453
2442
auto *NewVecTy = FixedVectorType::get (Type::getInt64Ty (C), 2 );
2454
2443
Value *BC0 = Builder.CreateBitCast (Arg1, NewVecTy, " cast" );
2455
2444
Value *Elt = Builder.CreateExtractElement (BC0, (uint64_t )0 );
2456
- Value *BC = Builder.CreateBitCast (
2457
- Arg0, PointerType::getUnqual (Elt->getType ()), " cast" );
2458
- Builder.CreateAlignedStore (Elt, BC, Align (1 ));
2445
+ Builder.CreateAlignedStore (Elt, Arg0, Align (1 ));
2459
2446
} else if (Name.starts_with (" sse.storeu." ) ||
2460
2447
Name.starts_with (" sse2.storeu." ) ||
2461
2448
Name.starts_with (" avx.storeu." )) {
2462
2449
Value *Arg0 = CI->getArgOperand (0 );
2463
2450
Value *Arg1 = CI->getArgOperand (1 );
2464
-
2465
- Arg0 = Builder.CreateBitCast (Arg0, PointerType::getUnqual (Arg1->getType ()),
2466
- " cast" );
2467
2451
Builder.CreateAlignedStore (Arg1, Arg0, Align (1 ));
2468
2452
} else if (Name == " avx512.mask.store.ss" ) {
2469
2453
Value *Mask = Builder.CreateAnd (CI->getArgOperand (2 ), Builder.getInt8 (1 ));
@@ -2813,31 +2797,21 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2813
2797
CI->getArgOperand (2 ), Aligned);
2814
2798
} else if (Name.starts_with (" avx512.mask.expand.load." )) {
2815
2799
auto *ResultTy = cast<FixedVectorType>(CI->getType ());
2816
- Type *PtrTy = ResultTy->getElementType ();
2817
-
2818
- // Cast the pointer to element type.
2819
- Value *Ptr = Builder.CreateBitCast (CI->getOperand (0 ),
2820
- llvm::PointerType::getUnqual (PtrTy));
2821
-
2822
2800
Value *MaskVec = getX86MaskVec (Builder, CI->getArgOperand (2 ),
2823
2801
ResultTy->getNumElements ());
2824
2802
2825
- Rep = Builder.CreateIntrinsic (Intrinsic::masked_expandload, ResultTy,
2826
- {Ptr , MaskVec, CI->getOperand (1 )});
2803
+ Rep = Builder.CreateIntrinsic (
2804
+ Intrinsic::masked_expandload, ResultTy,
2805
+ {CI->getOperand (0 ), MaskVec, CI->getOperand (1 )});
2827
2806
} else if (Name.starts_with (" avx512.mask.compress.store." )) {
2828
2807
auto *ResultTy = cast<VectorType>(CI->getArgOperand (1 )->getType ());
2829
- Type *PtrTy = ResultTy->getElementType ();
2830
-
2831
- // Cast the pointer to element type.
2832
- Value *Ptr = Builder.CreateBitCast (CI->getOperand (0 ),
2833
- llvm::PointerType::getUnqual (PtrTy));
2834
-
2835
2808
Value *MaskVec =
2836
2809
getX86MaskVec (Builder, CI->getArgOperand (2 ),
2837
2810
cast<FixedVectorType>(ResultTy)->getNumElements ());
2838
2811
2839
- Rep = Builder.CreateIntrinsic (Intrinsic::masked_compressstore, ResultTy,
2840
- {CI->getArgOperand (1 ), Ptr , MaskVec});
2812
+ Rep = Builder.CreateIntrinsic (
2813
+ Intrinsic::masked_compressstore, ResultTy,
2814
+ {CI->getArgOperand (1 ), CI->getArgOperand (0 ), MaskVec});
2841
2815
} else if (Name.starts_with (" avx512.mask.compress." ) ||
2842
2816
Name.starts_with (" avx512.mask.expand." )) {
2843
2817
auto *ResultTy = cast<FixedVectorType>(CI->getType ());
@@ -2963,9 +2937,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2963
2937
Type *EltTy = cast<VectorType>(CI->getType ())->getElementType ();
2964
2938
unsigned NumSrcElts = 128 / EltTy->getPrimitiveSizeInBits ();
2965
2939
auto *VT = FixedVectorType::get (EltTy, NumSrcElts);
2966
- Value *Op = Builder.CreatePointerCast (CI->getArgOperand (0 ),
2967
- PointerType::getUnqual (VT));
2968
- Value *Load = Builder.CreateAlignedLoad (VT, Op, Align (1 ));
2940
+ Value *Load = Builder.CreateAlignedLoad (VT, CI->getArgOperand (0 ), Align (1 ));
2969
2941
if (NumSrcElts == 2 )
2970
2942
Rep = Builder.CreateShuffleVector (Load, ArrayRef<int >{0 , 1 , 0 , 1 });
2971
2943
else
@@ -3687,13 +3659,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
3687
3659
MDNode *Node = MDNode::get (
3688
3660
C, ConstantAsMetadata::get (ConstantInt::get (Type::getInt32Ty (C), 1 )));
3689
3661
3690
- Value *Ptr = CI->getArgOperand (0 );
3691
-
3692
- // Convert the type of the pointer to a pointer to the stored type.
3693
- Value *BC = Builder.CreateBitCast (
3694
- Ptr , PointerType::getUnqual (CI->getType ()), " cast" );
3695
3662
LoadInst *LI = Builder.CreateAlignedLoad (
3696
- CI->getType (), BC ,
3663
+ CI->getType (), CI-> getArgOperand ( 0 ) ,
3697
3664
Align (CI->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 ));
3698
3665
LI->setMetadata (LLVMContext::MD_nontemporal, Node);
3699
3666
Rep = LI;
@@ -4045,10 +4012,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
4045
4012
4046
4013
// Extract the second result and store it.
4047
4014
Value *Data = Builder.CreateExtractValue (NewCall, 1 );
4048
- // Cast the pointer to the right type.
4049
- Value *Ptr = Builder.CreateBitCast (
4050
- CI->getArgOperand (3 ), llvm::PointerType::getUnqual (Data->getType ()));
4051
- Builder.CreateAlignedStore (Data, Ptr , Align (1 ));
4015
+ Builder.CreateAlignedStore (Data, CI->getArgOperand (3 ), Align (1 ));
4052
4016
// Replace the original call result with the first result of the new call.
4053
4017
Value *CF = Builder.CreateExtractValue (NewCall, 0 );
4054
4018
@@ -4756,10 +4720,7 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
4756
4720
NewCall = Builder.CreateCall (NewFn);
4757
4721
// Extract the second result and store it.
4758
4722
Value *Data = Builder.CreateExtractValue (NewCall, 1 );
4759
- // Cast the pointer to the right type.
4760
- Value *Ptr = Builder.CreateBitCast (CI->getArgOperand (0 ),
4761
- llvm::PointerType::getUnqual (Data->getType ()));
4762
- Builder.CreateAlignedStore (Data, Ptr , Align (1 ));
4723
+ Builder.CreateAlignedStore (Data, CI->getArgOperand (0 ), Align (1 ));
4763
4724
// Replace the original call result with the first result of the new call.
4764
4725
Value *TSC = Builder.CreateExtractValue (NewCall, 0 );
4765
4726
0 commit comments