@@ -1875,9 +1875,6 @@ static Value *upgradeX86ConcatShift(IRBuilder<> &Builder, CallBase &CI,
18751875
18761876static Value *upgradeMaskedStore (IRBuilder<> &Builder, Value *Ptr, Value *Data,
18771877 Value *Mask, bool Aligned) {
1878- // Cast the pointer to the right type.
1879- Ptr = Builder.CreateBitCast (Ptr,
1880- llvm::PointerType::getUnqual (Data->getType ()));
18811878 const Align Alignment =
18821879 Aligned
18831880 ? Align (Data->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 )
@@ -1897,8 +1894,6 @@ static Value *upgradeMaskedStore(IRBuilder<> &Builder, Value *Ptr, Value *Data,
18971894static Value *upgradeMaskedLoad (IRBuilder<> &Builder, Value *Ptr,
18981895 Value *Passthru, Value *Mask, bool Aligned) {
18991896 Type *ValTy = Passthru->getType ();
1900- // Cast the pointer to the right type.
1901- Ptr = Builder.CreateBitCast (Ptr, llvm::PointerType::getUnqual (ValTy));
19021897 const Align Alignment =
19031898 Aligned
19041899 ? Align (
@@ -2421,13 +2416,10 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
24212416
24222417 // Nontemporal (unaligned) store of the 0'th element of the float/double
24232418 // vector.
2424- Type *SrcEltTy = cast<VectorType>(Arg1->getType ())->getElementType ();
2425- PointerType *EltPtrTy = PointerType::getUnqual (SrcEltTy);
2426- Value *Addr = Builder.CreateBitCast (Arg0, EltPtrTy, " cast" );
24272419 Value *Extract =
24282420 Builder.CreateExtractElement (Arg1, (uint64_t )0 , " extractelement" );
24292421
2430- StoreInst *SI = Builder.CreateAlignedStore (Extract, Addr , Align (1 ));
2422+ StoreInst *SI = Builder.CreateAlignedStore (Extract, Arg0 , Align (1 ));
24312423 SI->setMetadata (LLVMContext::MD_nontemporal, Node);
24322424 } else if (Name.starts_with (" avx.movnt." ) ||
24332425 Name.starts_with (" avx512.storent." )) {
@@ -2439,11 +2431,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
24392431 Value *Arg0 = CI->getArgOperand (0 );
24402432 Value *Arg1 = CI->getArgOperand (1 );
24412433
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" );
24452434 StoreInst *SI = Builder.CreateAlignedStore (
2446- Arg1, BC ,
2435+ Arg1, Arg0 ,
24472436 Align (Arg1->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 ));
24482437 SI->setMetadata (LLVMContext::MD_nontemporal, Node);
24492438 } else if (Name == " sse2.storel.dq" ) {
@@ -2453,17 +2442,12 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
24532442 auto *NewVecTy = FixedVectorType::get (Type::getInt64Ty (C), 2 );
24542443 Value *BC0 = Builder.CreateBitCast (Arg1, NewVecTy, " cast" );
24552444 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 ));
24592446 } else if (Name.starts_with (" sse.storeu." ) ||
24602447 Name.starts_with (" sse2.storeu." ) ||
24612448 Name.starts_with (" avx.storeu." )) {
24622449 Value *Arg0 = CI->getArgOperand (0 );
24632450 Value *Arg1 = CI->getArgOperand (1 );
2464-
2465- Arg0 = Builder.CreateBitCast (Arg0, PointerType::getUnqual (Arg1->getType ()),
2466- " cast" );
24672451 Builder.CreateAlignedStore (Arg1, Arg0, Align (1 ));
24682452 } else if (Name == " avx512.mask.store.ss" ) {
24692453 Value *Mask = Builder.CreateAnd (CI->getArgOperand (2 ), Builder.getInt8 (1 ));
@@ -2813,31 +2797,21 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
28132797 CI->getArgOperand (2 ), Aligned);
28142798 } else if (Name.starts_with (" avx512.mask.expand.load." )) {
28152799 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-
28222800 Value *MaskVec = getX86MaskVec (Builder, CI->getArgOperand (2 ),
28232801 ResultTy->getNumElements ());
28242802
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 )});
28272806 } else if (Name.starts_with (" avx512.mask.compress.store." )) {
28282807 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-
28352808 Value *MaskVec =
28362809 getX86MaskVec (Builder, CI->getArgOperand (2 ),
28372810 cast<FixedVectorType>(ResultTy)->getNumElements ());
28382811
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});
28412815 } else if (Name.starts_with (" avx512.mask.compress." ) ||
28422816 Name.starts_with (" avx512.mask.expand." )) {
28432817 auto *ResultTy = cast<FixedVectorType>(CI->getType ());
@@ -2963,9 +2937,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
29632937 Type *EltTy = cast<VectorType>(CI->getType ())->getElementType ();
29642938 unsigned NumSrcElts = 128 / EltTy->getPrimitiveSizeInBits ();
29652939 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 ));
29692941 if (NumSrcElts == 2 )
29702942 Rep = Builder.CreateShuffleVector (Load, ArrayRef<int >{0 , 1 , 0 , 1 });
29712943 else
@@ -3687,13 +3659,8 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
36873659 MDNode *Node = MDNode::get (
36883660 C, ConstantAsMetadata::get (ConstantInt::get (Type::getInt32Ty (C), 1 )));
36893661
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" );
36953662 LoadInst *LI = Builder.CreateAlignedLoad (
3696- CI->getType (), BC ,
3663+ CI->getType (), CI-> getArgOperand ( 0 ) ,
36973664 Align (CI->getType ()->getPrimitiveSizeInBits ().getFixedValue () / 8 ));
36983665 LI->setMetadata (LLVMContext::MD_nontemporal, Node);
36993666 Rep = LI;
@@ -4045,10 +4012,7 @@ static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
40454012
40464013 // Extract the second result and store it.
40474014 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 ));
40524016 // Replace the original call result with the first result of the new call.
40534017 Value *CF = Builder.CreateExtractValue (NewCall, 0 );
40544018
@@ -4756,10 +4720,7 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
47564720 NewCall = Builder.CreateCall (NewFn);
47574721 // Extract the second result and store it.
47584722 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 ));
47634724 // Replace the original call result with the first result of the new call.
47644725 Value *TSC = Builder.CreateExtractValue (NewCall, 0 );
47654726
0 commit comments