@@ -489,7 +489,7 @@ namespace
489489 SmallVector<std::pair<Type*, uint32_t >, 8 >& SplitInfo);
490490 // If predicated loads are split, we also need to split merge values
491491 void createSplitMergeValues (
492- BasicBlock* BB ,
492+ Instruction* Inst ,
493493 Value* OrigMergeVal,
494494 const SmallVector<std::pair<Type*, uint32_t >, 8 >& SplitInfo,
495495 ValVector& NewMergeVals) const ;
@@ -695,7 +695,7 @@ void VectorPreProcess::createSplitVectorTypes(
695695 }
696696}
697697
698- void VectorPreProcess::createSplitMergeValues (BasicBlock* BB ,
698+ void VectorPreProcess::createSplitMergeValues (Instruction* Inst ,
699699 Value* OrigMergeVal,
700700 const SmallVector<std::pair<Type*, uint32_t >, 8 >& SplitInfo,
701701 ValVector& NewMergeVals) const
@@ -731,10 +731,7 @@ void VectorPreProcess::createSplitMergeValues(BasicBlock* BB,
731731 return ;
732732 }
733733
734- // Init IRBuilder with Basic block, if OrigMergeVal is not an instruction.
735- std::unique_ptr<IRBuilder<>> Builder = isa<Instruction>(OrigMergeVal) ?
736- std::make_unique<IRBuilder<>>(cast<Instruction>(OrigMergeVal)) :
737- std::make_unique<IRBuilder<>>(BB);
734+ IRBuilder<> Builder (Inst);
738735
739736 // Case when we split vector merge value into subvectors. Element type is the same.
740737 // Just one big vector is being split into subvectors.
@@ -756,14 +753,14 @@ void VectorPreProcess::createSplitMergeValues(BasicBlock* BB,
756753 {
757754 for (uint32_t j = 0 , e = int_cast<uint32_t >(VTy->getNumElements ()); j < e; ++j)
758755 {
759- Value *Elt = (idx < OrigVTyNEl) ? Builder-> CreateExtractElement (OrigMergeVal, Builder-> getInt32 (idx++)) :
756+ Value *Elt = (idx < OrigVTyNEl) ? Builder. CreateExtractElement (OrigMergeVal, Builder. getInt32 (idx++)) :
760757 Constant::getNullValue (VTy->getElementType ());
761- NewMergeVal = Builder-> CreateInsertElement (NewMergeVal, Elt, Builder-> getInt32 (j));
758+ NewMergeVal = Builder. CreateInsertElement (NewMergeVal, Elt, Builder. getInt32 (j));
762759 }
763760 }
764761 else
765762 {
766- NewMergeVal = Builder-> CreateExtractValue (OrigMergeVal, idx++);
763+ NewMergeVal = Builder. CreateExtractElement (OrigMergeVal, Builder. getInt32 ( idx++) );
767764 }
768765 NewMergeVals.push_back (NewMergeVal);
769766 }
@@ -775,7 +772,7 @@ void VectorPreProcess::createSplitMergeValues(BasicBlock* BB,
775772 // Case when we change scalar value into vector with smaller element type.
776773 IGC_ASSERT_MESSAGE (SplitInfo.size () == 1 , " Unexpected split info!" );
777774 IGC_ASSERT_MESSAGE (SplitInfo[0 ].second == 1 , " Unexpected split info!" );
778- Value *NewMergeVal = Builder-> CreateBitCast (OrigMergeVal, SplitInfo[0 ].first );
775+ Value *NewMergeVal = Builder. CreateBitCast (OrigMergeVal, SplitInfo[0 ].first );
779776 NewMergeVals.push_back (NewMergeVal);
780777}
781778
@@ -1116,7 +1113,7 @@ bool VectorPreProcess::splitLoad(
11161113
11171114 ValVector splitMergeValues;
11181115 if (isPredLd)
1119- createSplitMergeValues (LI-> getParent () , cast<PredicatedLoadIntrinsic>(LI)->getMergeValue (), splitInfo, splitMergeValues);
1116+ createSplitMergeValues (LI, cast<PredicatedLoadIntrinsic>(LI)->getMergeValue (), splitInfo, splitMergeValues);
11201117
11211118 Value* Addr = ALI.getPointerOperand ();
11221119 auto Align = ALI.getAlignment ();
@@ -1306,7 +1303,7 @@ bool VectorPreProcess::splitVector3LoadStore(Instruction* Inst)
13061303
13071304 ValVector splitMergeValues;
13081305 if (isPredLoad)
1309- createSplitMergeValues (Inst-> getParent () , cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
1306+ createSplitMergeValues (Inst, cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
13101307 { {newVTy, 1 } }, splitMergeValues);
13111308
13121309 Value* V = ALI->Create (newVTy, isPredLoad ? splitMergeValues[0 ] : nullptr );
@@ -1323,7 +1320,7 @@ bool VectorPreProcess::splitVector3LoadStore(Instruction* Inst)
13231320
13241321 ValVector splitMergeValues;
13251322 if (isPredLoad)
1326- createSplitMergeValues (Inst-> getParent () , cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
1323+ createSplitMergeValues (Inst, cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
13271324 { {newVTy, 1 }, {eTy, 1 } }, splitMergeValues);
13281325
13291326 Value* V2 = ALI->Create (newVTy, isPredLoad ? splitMergeValues[0 ] : nullptr );
@@ -1778,7 +1775,7 @@ Instruction* VectorPreProcess::simplifyLoadStore(Instruction* Inst)
17781775 bool isPredLoad = isa<PredicatedLoadIntrinsic>(Inst);
17791776 ValVector splitMergeValues;
17801777 if (isPredLoad)
1781- createSplitMergeValues (Inst-> getParent () , cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
1778+ createSplitMergeValues (Inst, cast<PredicatedLoadIntrinsic>(Inst)->getMergeValue (),
17821779 { {NewVecTy, 1 } }, splitMergeValues);
17831780
17841781 NewLI = ALI.Create (NewVecTy, isPredLoad ? splitMergeValues[0 ] : nullptr );
@@ -1997,7 +1994,7 @@ bool VectorPreProcess::processScalarLoadStore(Function& F)
19971994 bool isPredLd = isa<PredicatedLoadIntrinsic>(inst);
19981995 ValVector splitMergeValues;
19991996 if (isPredLd)
2000- createSplitMergeValues (inst-> getParent () , cast<PredicatedLoadIntrinsic>(inst)->getMergeValue (),
1997+ createSplitMergeValues (inst, cast<PredicatedLoadIntrinsic>(inst)->getMergeValue (),
20011998 { {newVecTy, 1 } }, splitMergeValues);
20021999 Value *MergeVal = isPredLd ? splitMergeValues[0 ] : nullptr ;
20032000
0 commit comments