@@ -157,6 +157,8 @@ using EqClassKey =
157157struct ChainElem {
158158 Instruction *Inst;
159159 APInt OffsetFromLeader;
160+ ChainElem (Instruction *Inst, APInt OffsetFromLeader)
161+ : Inst(std::move(Inst)), OffsetFromLeader(std::move(OffsetFromLeader)) {}
160162};
161163using Chain = SmallVector<ChainElem, 1 >;
162164
@@ -187,7 +189,7 @@ constexpr unsigned StackAdjustedAlignment = 4;
187189Instruction *propagateMetadata (Instruction *I, const Chain &C) {
188190 SmallVector<Value *, 8 > Values;
189191 for (const ChainElem &E : C)
190- Values.push_back (E.Inst );
192+ Values.emplace_back (E.Inst );
191193 return propagateMetadata (I, Values);
192194}
193195
@@ -202,12 +204,12 @@ void reorder(Instruction *I) {
202204 SmallPtrSet<Instruction *, 16 > InstructionsToMove;
203205 SmallVector<Instruction *, 16 > Worklist;
204206
205- Worklist.push_back (I);
207+ Worklist.emplace_back (I);
206208 while (!Worklist.empty ()) {
207209 Instruction *IW = Worklist.pop_back_val ();
208210 int NumOperands = IW->getNumOperands ();
209- for (int i = 0 ; i < NumOperands; i ++) {
210- Instruction *IM = dyn_cast<Instruction>(IW->getOperand (i ));
211+ for (int Idx = 0 ; Idx < NumOperands; Idx ++) {
212+ Instruction *IM = dyn_cast<Instruction>(IW->getOperand (Idx ));
211213 if (!IM || IM->getOpcode () == Instruction::PHI)
212214 continue ;
213215
@@ -220,15 +222,15 @@ void reorder(Instruction *I) {
220222
221223 if (!IM->comesBefore (I)) {
222224 InstructionsToMove.insert (IM);
223- Worklist.push_back (IM);
225+ Worklist.emplace_back (IM);
224226 }
225227 }
226228 }
227229
228230 // All instructions to move should follow I. Start from I, not from begin().
229231 for (auto BBI = I->getIterator (), E = I->getParent ()->end (); BBI != E;) {
230232 Instruction *IM = &*(BBI++);
231- if (!InstructionsToMove.count (IM))
233+ if (!InstructionsToMove.contains (IM))
232234 continue ;
233235 IM->moveBefore (I);
234236 }
@@ -438,11 +440,11 @@ bool Vectorizer::run() {
438440 assert (!BB->empty ());
439441
440442 SmallVector<BasicBlock::iterator, 8 > Barriers;
441- Barriers.push_back (BB->begin ());
443+ Barriers.emplace_back (BB->begin ());
442444 for (Instruction &I : *BB)
443445 if (!isGuaranteedToTransferExecutionToSuccessor (&I))
444- Barriers.push_back (I.getIterator ());
445- Barriers.push_back (BB->end ());
446+ Barriers.emplace_back (I.getIterator ());
447+ Barriers.emplace_back (BB->end ());
446448
447449 for (auto It = Barriers.begin (), End = std::prev (Barriers.end ()); It != End;
448450 ++It)
@@ -559,14 +561,14 @@ std::vector<Chain> Vectorizer::splitChainByMayAliasInstrs(Chain &C) {
559561
560562 std::vector<Chain> Chains;
561563 SmallVector<ChainElem, 1 > NewChain;
562- NewChain.push_back (*ChainBegin);
564+ NewChain.emplace_back (*ChainBegin);
563565 for (auto ChainIt = std::next (ChainBegin); ChainIt != ChainEnd; ++ChainIt) {
564566 if (isSafeToMove<IsLoad>(ChainIt->Inst , NewChain.front ().Inst ,
565567 ChainOffsets)) {
566568 LLVM_DEBUG (dbgs () << " LSV: No intervening may-alias instrs; can merge "
567569 << *ChainIt->Inst << " into " << *ChainBegin->Inst
568570 << " \n " );
569- NewChain.push_back (*ChainIt);
571+ NewChain.emplace_back (*ChainIt);
570572 } else {
571573 LLVM_DEBUG (
572574 dbgs () << " LSV: Found intervening may-alias instrs; cannot merge "
@@ -576,7 +578,7 @@ std::vector<Chain> Vectorizer::splitChainByMayAliasInstrs(Chain &C) {
576578 dbgs () << " LSV: got nontrivial chain without aliasing instrs:\n " ;
577579 dumpChain (NewChain);
578580 });
579- Chains.push_back (std::move (NewChain));
581+ Chains.emplace_back (std::move (NewChain));
580582 }
581583
582584 // Start a new chain.
@@ -588,7 +590,7 @@ std::vector<Chain> Vectorizer::splitChainByMayAliasInstrs(Chain &C) {
588590 dbgs () << " LSV: got nontrivial chain without aliasing instrs:\n " ;
589591 dumpChain (NewChain);
590592 });
591- Chains.push_back (std::move (NewChain));
593+ Chains.emplace_back (std::move (NewChain));
592594 }
593595 return Chains;
594596 };
@@ -689,7 +691,7 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
689691 });
690692
691693 bool IsLoadChain = isa<LoadInst>(C[0 ].Inst );
692- auto getVectorFactor = [&](unsigned VF, unsigned LoadStoreSize,
694+ auto GetVectorFactor = [&](unsigned VF, unsigned LoadStoreSize,
693695 unsigned ChainSizeBytes, VectorType *VecTy) {
694696 return IsLoadChain ? TTI.getLoadVectorFactor (VF, LoadStoreSize,
695697 ChainSizeBytes, VecTy)
@@ -721,8 +723,8 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
721723 C[CBegin].OffsetFromLeader ;
722724 if (Sz.sgt (VecRegBytes))
723725 break ;
724- CandidateChains.push_back (
725- {CEnd, static_cast <unsigned >(Sz.getLimitedValue ())} );
726+ CandidateChains.emplace_back (CEnd,
727+ static_cast <unsigned >(Sz.getLimitedValue ()));
726728 }
727729
728730 // Consider the longest chain first.
@@ -746,7 +748,7 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
746748 unsigned VF = 8 * VecRegBytes / VecElemBits;
747749
748750 // Check that TTI is happy with this vectorization factor.
749- unsigned TargetVF = getVectorFactor (VF, VecElemBits,
751+ unsigned TargetVF = GetVectorFactor (VF, VecElemBits,
750752 VecElemBits * NumVecElems / 8 , VecTy);
751753 if (TargetVF != VF && TargetVF < NumVecElems) {
752754 LLVM_DEBUG (
@@ -840,7 +842,7 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
840842 // Hooray, we can vectorize this chain!
841843 Chain &NewChain = Ret.emplace_back ();
842844 for (unsigned I = CBegin; I <= CEnd; ++I)
843- NewChain.push_back (C[I]);
845+ NewChain.emplace_back (C[I]);
844846 CBegin = CEnd; // Skip over the instructions we've added to the chain.
845847 break ;
846848 }
@@ -959,7 +961,7 @@ bool Vectorizer::vectorizeChain(Chain &C) {
959961 Vec = Builder.CreateInsertElement (Vec, V, Builder.getInt32 (VecIdx++));
960962 };
961963 for (const ChainElem &E : C) {
962- auto I = cast<StoreInst>(E.Inst );
964+ auto * I = cast<StoreInst>(E.Inst );
963965 if (FixedVectorType *VT =
964966 dyn_cast<FixedVectorType>(getLoadStoreType (I))) {
965967 for (int J = 0 , JE = VT->getNumElements (); J < JE; ++J) {
@@ -982,7 +984,7 @@ bool Vectorizer::vectorizeChain(Chain &C) {
982984 propagateMetadata (VecInst, C);
983985
984986 for (const ChainElem &E : C)
985- ToErase.push_back (E.Inst );
987+ ToErase.emplace_back (E.Inst );
986988
987989 ++NumVectorInstructions;
988990 NumScalarsVectorized += C.size ();
@@ -1291,7 +1293,7 @@ std::optional<APInt> Vectorizer::getConstantOffsetSelects(
12911293 << *ContextInst << " , Depth=" << Depth << " \n " );
12921294 std::optional<APInt> TrueDiff = getConstantOffset (
12931295 SelectA->getTrueValue (), SelectB->getTrueValue (), ContextInst, Depth);
1294- if (!TrueDiff. has_value () )
1296+ if (!TrueDiff)
12951297 return std::nullopt ;
12961298 std::optional<APInt> FalseDiff =
12971299 getConstantOffset (SelectA->getFalseValue (), SelectB->getFalseValue (),
@@ -1308,7 +1310,7 @@ Vectorizer::collectEquivalenceClasses(BasicBlock::iterator Begin,
13081310 BasicBlock::iterator End) {
13091311 EquivalenceClassMap Ret;
13101312
1311- auto getUnderlyingObject = [](const Value *Ptr) -> const Value * {
1313+ auto GetUnderlyingObject = [](const Value *Ptr) -> const Value * {
13121314 const Value *ObjPtr = llvm::getUnderlyingObject (Ptr);
13131315 if (const auto *Sel = dyn_cast<SelectInst>(ObjPtr)) {
13141316 // The select's themselves are distinct instructions even if they share
@@ -1369,10 +1371,10 @@ Vectorizer::collectEquivalenceClasses(BasicBlock::iterator Begin,
13691371 (VecTy && TTI.getLoadVectorFactor (VF, TySize, TySize / 8 , VecTy) == 0 ))
13701372 continue ;
13711373
1372- Ret[{getUnderlyingObject (Ptr), AS,
1374+ Ret[{GetUnderlyingObject (Ptr), AS,
13731375 DL.getTypeSizeInBits (getLoadStoreType (&I)->getScalarType ()),
13741376 /* IsLoad=*/ LI != nullptr }]
1375- .push_back (&I);
1377+ .emplace_back (&I);
13761378 }
13771379
13781380 return Ret;
@@ -1434,15 +1436,14 @@ std::vector<Chain> Vectorizer::gatherChains(ArrayRef<Instruction *> Instrs) {
14341436 auto ChainIter = MRU.begin ();
14351437 for (size_t J = 0 ; J < MaxChainsToTry && ChainIter != MRU.end ();
14361438 ++J, ++ChainIter) {
1437- std::optional<APInt> Offset = getConstantOffset (
1438- getLoadStorePointerOperand (ChainIter->first ),
1439- getLoadStorePointerOperand (I),
1440- /* ContextInst=*/
1441- (ChainIter->first ->comesBefore (I) ? I : ChainIter->first ));
1442- if (Offset.has_value ()) {
1439+ if (std::optional<APInt> Offset = getConstantOffset (
1440+ getLoadStorePointerOperand (ChainIter->first ),
1441+ getLoadStorePointerOperand (I),
1442+ /* ContextInst=*/
1443+ (ChainIter->first ->comesBefore (I) ? I : ChainIter->first ))) {
14431444 // `Offset` might not have the expected number of bits, if e.g. AS has a
14441445 // different number of bits than opaque pointers.
1445- ChainIter->second .push_back (ChainElem{ I, Offset.value ()} );
1446+ ChainIter->second .emplace_back ( I, Offset.value ());
14461447 // Move ChainIter to the front of the MRU list.
14471448 MRU.remove (*ChainIter);
14481449 MRU.push_front (*ChainIter);
@@ -1454,7 +1455,7 @@ std::vector<Chain> Vectorizer::gatherChains(ArrayRef<Instruction *> Instrs) {
14541455 if (!MatchFound) {
14551456 APInt ZeroOffset (ASPtrBits, 0 );
14561457 InstrListElem *E = new (Allocator.Allocate ()) InstrListElem (I);
1457- E->second .push_back (ChainElem{ I, ZeroOffset} );
1458+ E->second .emplace_back ( I, ZeroOffset);
14581459 MRU.push_front (*E);
14591460 Chains.insert (E);
14601461 }
@@ -1465,7 +1466,7 @@ std::vector<Chain> Vectorizer::gatherChains(ArrayRef<Instruction *> Instrs) {
14651466 // Iterate over MRU rather than Chains so the order is deterministic.
14661467 for (auto &E : MRU)
14671468 if (E.second .size () > 1 )
1468- Ret.push_back (std::move (E.second ));
1469+ Ret.emplace_back (std::move (E.second ));
14691470 return Ret;
14701471}
14711472
@@ -1509,9 +1510,8 @@ std::optional<APInt> Vectorizer::getConstantOffset(Value *PtrA, Value *PtrB,
15091510 return (OffsetB - OffsetA + Dist).sextOrTrunc (OrigBitWidth);
15101511 }
15111512 }
1512- std::optional<APInt> Diff =
1513- getConstantOffsetComplexAddrs (PtrA, PtrB, ContextInst, Depth);
1514- if (Diff.has_value ())
1513+ if (std::optional<APInt> Diff =
1514+ getConstantOffsetComplexAddrs (PtrA, PtrB, ContextInst, Depth))
15151515 return (OffsetB - OffsetA + Diff->sext (OffsetB.getBitWidth ()))
15161516 .sextOrTrunc (OrigBitWidth);
15171517 return std::nullopt ;
0 commit comments