Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types

If the type isn't trivially moveable emplace can skip a potentially
expensive move. It also saves a couple of characters.


Call sites were found with the ASTMatcher + some semi-automated cleanup.

memberCallExpr(
    argumentCountIs(1), callee(methodDecl(hasName("push_back"))),
    on(hasType(recordDecl(has(namedDecl(hasName("emplace_back")))))),
    hasArgument(0, bindTemporaryExpr(
                       hasType(recordDecl(hasNonTrivialDestructor())),
                       has(constructExpr()))),
    unless(isInTemplateInstantiation()))

No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238602 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2015-05-29 19:43:39 +00:00
parent 071c3df378
commit 9589ff8949
42 changed files with 109 additions and 140 deletions

View File

@ -230,7 +230,7 @@ public:
void addCalledFunction(CallSite CS, CallGraphNode *M) { void addCalledFunction(CallSite CS, CallGraphNode *M) {
assert(!CS.getInstruction() || !CS.getCalledFunction() || assert(!CS.getInstruction() || !CS.getCalledFunction() ||
!CS.getCalledFunction()->isIntrinsic()); !CS.getCalledFunction()->isIntrinsic());
CalledFunctions.push_back(std::make_pair(CS.getInstruction(), M)); CalledFunctions.emplace_back(CS.getInstruction(), M);
M->AddRef(); M->AddRef();
} }

View File

@ -113,7 +113,7 @@ public:
return *const_cast<BlockInfo*>(BI); return *const_cast<BlockInfo*>(BI);
// Otherwise, add a new record. // Otherwise, add a new record.
BlockInfoRecords.push_back(BlockInfo()); BlockInfoRecords.emplace_back();
BlockInfoRecords.back().BlockID = BlockID; BlockInfoRecords.back().BlockID = BlockID;
return BlockInfoRecords.back(); return BlockInfoRecords.back();
} }

View File

@ -215,7 +215,7 @@ public:
// Push the outer block's abbrev set onto the stack, start out with an // Push the outer block's abbrev set onto the stack, start out with an
// empty abbrev set. // empty abbrev set.
BlockScope.push_back(Block(OldCodeSize, BlockSizeWordIndex)); BlockScope.emplace_back(OldCodeSize, BlockSizeWordIndex);
BlockScope.back().PrevAbbrevs.swap(CurAbbrevs); BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
// If there is a blockinfo for this BlockID, add all the predefined abbrevs // If there is a blockinfo for this BlockID, add all the predefined abbrevs
@ -503,7 +503,7 @@ private:
return *BI; return *BI;
// Otherwise, add a new record. // Otherwise, add a new record.
BlockInfoRecords.push_back(BlockInfo()); BlockInfoRecords.emplace_back();
BlockInfoRecords.back().BlockID = BlockID; BlockInfoRecords.back().BlockID = BlockID;
return BlockInfoRecords.back(); return BlockInfoRecords.back();
} }

View File

@ -121,7 +121,7 @@ public:
/// label just prior to the safe point (if the code generator is using /// label just prior to the safe point (if the code generator is using
/// MachineModuleInfo). /// MachineModuleInfo).
void addSafePoint(GC::PointKind Kind, MCSymbol *Label, DebugLoc DL) { void addSafePoint(GC::PointKind Kind, MCSymbol *Label, DebugLoc DL) {
SafePoints.push_back(GCPoint(Kind, Label, DL)); SafePoints.emplace_back(Kind, Label, DL);
} }
/// getFrameSize/setFrameSize - Records the function's frame size. /// getFrameSize/setFrameSize - Records the function's frame size.

View File

@ -260,7 +260,7 @@ namespace llvm {
#ifndef NDEBUG #ifndef NDEBUG
const SUnit *Addr = SUnits.empty() ? nullptr : &SUnits[0]; const SUnit *Addr = SUnits.empty() ? nullptr : &SUnits[0];
#endif #endif
SUnits.push_back(SUnit(MI, (unsigned)SUnits.size())); SUnits.emplace_back(MI, (unsigned)SUnits.size());
assert((Addr == nullptr || Addr == &SUnits[0]) && assert((Addr == nullptr || Addr == &SUnits[0]) &&
"SUnits std::vector reallocated on the fly!"); "SUnits std::vector reallocated on the fly!");
SUnits.back().OrigNode = &SUnits.back(); SUnits.back().OrigNode = &SUnits.back();

View File

@ -390,8 +390,7 @@ public:
for (auto &F : *M) { for (auto &F : *M) {
if (F.isDeclaration()) if (F.isDeclaration())
continue; continue;
Partitioning.push_back(std::vector<Function*>()); Partitioning.emplace_back(1, &F);
Partitioning.back().push_back(&F);
} }
addLogicalModule(*LogicalDylibs.back(), addLogicalModule(*LogicalDylibs.back(),
std::shared_ptr<Module>(std::move(M)), std::shared_ptr<Module>(std::move(M)),

View File

@ -130,7 +130,7 @@ void AliasSet::addPointer(AliasSetTracker &AST, PointerRec &Entry,
void AliasSet::addUnknownInst(Instruction *I, AliasAnalysis &AA) { void AliasSet::addUnknownInst(Instruction *I, AliasAnalysis &AA) {
if (UnknownInsts.empty()) if (UnknownInsts.empty())
addRef(); addRef();
UnknownInsts.push_back(I); UnknownInsts.emplace_back(I);
if (!I->mayWriteToMemory()) { if (!I->mayWriteToMemory()) {
AliasTy = MayAlias; AliasTy = MayAlias;

View File

@ -1712,7 +1712,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
// would confuse the logic below that expects proper IVs. // would confuse the logic below that expects proper IVs.
if (Value *V = SimplifyInstruction(Phi, DL, SE.TLI, SE.DT, SE.AC)) { if (Value *V = SimplifyInstruction(Phi, DL, SE.TLI, SE.DT, SE.AC)) {
Phi->replaceAllUsesWith(V); Phi->replaceAllUsesWith(V);
DeadInsts.push_back(Phi); DeadInsts.emplace_back(Phi);
++NumElim; ++NumElim;
DEBUG_WITH_TYPE(DebugType, dbgs() DEBUG_WITH_TYPE(DebugType, dbgs()
<< "INDVARS: Eliminated constant iv: " << *Phi << '\n'); << "INDVARS: Eliminated constant iv: " << *Phi << '\n');
@ -1787,7 +1787,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
CreateTruncOrBitCast(OrigInc, IsomorphicInc->getType(), IVName); CreateTruncOrBitCast(OrigInc, IsomorphicInc->getType(), IVName);
} }
IsomorphicInc->replaceAllUsesWith(NewInc); IsomorphicInc->replaceAllUsesWith(NewInc);
DeadInsts.push_back(IsomorphicInc); DeadInsts.emplace_back(IsomorphicInc);
} }
} }
DEBUG_WITH_TYPE(DebugType, dbgs() DEBUG_WITH_TYPE(DebugType, dbgs()
@ -1800,7 +1800,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
NewIV = Builder.CreateTruncOrBitCast(OrigPhiRef, Phi->getType(), IVName); NewIV = Builder.CreateTruncOrBitCast(OrigPhiRef, Phi->getType(), IVName);
} }
Phi->replaceAllUsesWith(NewIV); Phi->replaceAllUsesWith(NewIV);
DeadInsts.push_back(Phi); DeadInsts.emplace_back(Phi);
} }
return NumElim; return NumElim;
} }

View File

@ -1902,9 +1902,9 @@ bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
return Error(TypeLoc, "invalid type for function argument"); return Error(TypeLoc, "invalid type for function argument");
unsigned AttrIndex = 1; unsigned AttrIndex = 1;
ArgList.push_back(ArgInfo(TypeLoc, ArgTy, ArgList.emplace_back(TypeLoc, ArgTy, AttributeSet::get(ArgTy->getContext(),
AttributeSet::get(ArgTy->getContext(), AttrIndex++, Attrs),
AttrIndex++, Attrs), Name)); std::move(Name));
while (EatIfPresent(lltok::comma)) { while (EatIfPresent(lltok::comma)) {
// Handle ... at end of arg list. // Handle ... at end of arg list.
@ -1930,10 +1930,10 @@ bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
if (!ArgTy->isFirstClassType()) if (!ArgTy->isFirstClassType())
return Error(TypeLoc, "invalid type for function argument"); return Error(TypeLoc, "invalid type for function argument");
ArgList.push_back(ArgInfo(TypeLoc, ArgTy, ArgList.emplace_back(
AttributeSet::get(ArgTy->getContext(), TypeLoc, ArgTy,
AttrIndex++, Attrs), AttributeSet::get(ArgTy->getContext(), AttrIndex++, Attrs),
Name)); std::move(Name));
} }
} }

View File

@ -63,9 +63,7 @@ public:
// vector compatibility methods // vector compatibility methods
unsigned size() const { return ValuePtrs.size(); } unsigned size() const { return ValuePtrs.size(); }
void resize(unsigned N) { ValuePtrs.resize(N); } void resize(unsigned N) { ValuePtrs.resize(N); }
void push_back(Value *V) { void push_back(Value *V) { ValuePtrs.emplace_back(V); }
ValuePtrs.push_back(V);
}
void clear() { void clear() {
assert(ResolveConstants.empty() && "Constants not resolved?"); assert(ResolveConstants.empty() && "Constants not resolved?");

View File

@ -114,7 +114,7 @@ MCSymbol *MMIAddrLabelMap::getAddrLabelSymbol(BasicBlock *BB) {
// Otherwise, this is a new entry, create a new symbol for it and add an // Otherwise, this is a new entry, create a new symbol for it and add an
// entry to BBCallbacks so we can be notified if the BB is deleted or RAUWd. // entry to BBCallbacks so we can be notified if the BB is deleted or RAUWd.
BBCallbacks.push_back(BB); BBCallbacks.emplace_back(BB);
BBCallbacks.back().setMap(this); BBCallbacks.back().setMap(this);
Entry.Index = BBCallbacks.size()-1; Entry.Index = BBCallbacks.size()-1;
Entry.Fn = BB->getParent(); Entry.Fn = BB->getParent();

View File

@ -71,7 +71,7 @@ SUnit *ScheduleDAGSDNodes::newSUnit(SDNode *N) {
if (!SUnits.empty()) if (!SUnits.empty())
Addr = &SUnits[0]; Addr = &SUnits[0];
#endif #endif
SUnits.push_back(SUnit(N, (unsigned)SUnits.size())); SUnits.emplace_back(N, (unsigned)SUnits.size());
assert((Addr == nullptr || Addr == &SUnits[0]) && assert((Addr == nullptr || Addr == &SUnits[0]) &&
"SUnits std::vector reallocated on the fly!"); "SUnits std::vector reallocated on the fly!");
SUnits.back().OrigNode = &SUnits.back(); SUnits.back().OrigNode = &SUnits.back();

View File

@ -7437,7 +7437,7 @@ bool SelectionDAGBuilder::buildJumpTable(CaseClusterVector &Clusters,
JumpTableHeader JTH(Clusters[First].Low->getValue(), JumpTableHeader JTH(Clusters[First].Low->getValue(),
Clusters[Last].High->getValue(), SI->getCondition(), Clusters[Last].High->getValue(), SI->getCondition(),
nullptr, false); nullptr, false);
JTCases.push_back(JumpTableBlock(JTH, JT)); JTCases.emplace_back(std::move(JTH), std::move(JT));
JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High, JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High,
JTCases.size() - 1, Weight); JTCases.size() - 1, Weight);
@ -7650,9 +7650,9 @@ bool SelectionDAGBuilder::buildBitTests(CaseClusterVector &Clusters,
FuncInfo.MF->CreateMachineBasicBlock(SI->getParent()); FuncInfo.MF->CreateMachineBasicBlock(SI->getParent());
BTI.push_back(BitTestCase(CB.Mask, BitTestBB, CB.BB, CB.ExtraWeight)); BTI.push_back(BitTestCase(CB.Mask, BitTestBB, CB.BB, CB.ExtraWeight));
} }
BitTestCases.push_back(BitTestBlock(LowBound, CmpRange, SI->getCondition(), BitTestCases.emplace_back(std::move(LowBound), std::move(CmpRange),
-1U, MVT::Other, false, nullptr, SI->getCondition(), -1U, MVT::Other, false, nullptr,
nullptr, std::move(BTI))); nullptr, std::move(BTI));
BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High, BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High,
BitTestCases.size() - 1, TotalWeight); BitTestCases.size() - 1, TotalWeight);

View File

@ -352,7 +352,7 @@ void DWARFContext::parseTypeUnits() {
if (!TUs.empty()) if (!TUs.empty())
return; return;
for (const auto &I : getTypesSections()) { for (const auto &I : getTypesSections()) {
TUs.push_back(DWARFUnitSection<DWARFTypeUnit>()); TUs.emplace_back();
TUs.back().parse(*this, I.second); TUs.back().parse(*this, I.second);
} }
} }
@ -365,7 +365,7 @@ void DWARFContext::parseDWOTypeUnits() {
if (!DWOTUs.empty()) if (!DWOTUs.empty())
return; return;
for (const auto &I : getTypesDWOSections()) { for (const auto &I : getTypesDWOSections()) {
DWOTUs.push_back(DWARFUnitSection<DWARFTypeUnit>()); DWOTUs.emplace_back();
DWOTUs.back().parseDWO(*this, I.second); DWOTUs.back().parseDWO(*this, I.second);
} }
} }

View File

@ -438,7 +438,7 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,
if (NumArgs > 2) { if (NumArgs > 2) {
std::vector<std::string> EnvVars; std::vector<std::string> EnvVars;
for (unsigned i = 0; envp[i]; ++i) for (unsigned i = 0; envp[i]; ++i)
EnvVars.push_back(envp[i]); EnvVars.emplace_back(envp[i]);
// Arg #2 = envp. // Arg #2 = envp.
GVArgs.push_back(PTOGV(CEnv.reset(Fn->getContext(), this, EnvVars))); GVArgs.push_back(PTOGV(CEnv.reset(Fn->getContext(), this, EnvVars)));
} }

View File

@ -254,11 +254,8 @@ int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
unsigned ArgC, const char * const *ArgV, unsigned ArgC, const char * const *ArgV,
const char * const *EnvP) { const char * const *EnvP) {
unwrap(EE)->finalizeObject(); unwrap(EE)->finalizeObject();
std::vector<std::string> ArgVec; std::vector<std::string> ArgVec(ArgV, ArgV + ArgC);
for (unsigned I = 0; I != ArgC; ++I)
ArgVec.push_back(ArgV[I]);
return unwrap(EE)->runFunctionAsMain(unwrap<Function>(F), ArgVec, EnvP); return unwrap(EE)->runFunctionAsMain(unwrap<Function>(F), ArgVec, EnvP);
} }

View File

@ -2079,7 +2079,7 @@ void Interpreter::callFunction(Function *F,
ECStack.back().Caller.arg_size() == ArgVals.size()) && ECStack.back().Caller.arg_size() == ArgVals.size()) &&
"Incorrect number of arguments passed into function call!"); "Incorrect number of arguments passed into function call!");
// Make a new stack frame... and fill it in. // Make a new stack frame... and fill it in.
ECStack.push_back(ExecutionContext()); ECStack.emplace_back();
ExecutionContext &StackFrame = ECStack.back(); ExecutionContext &StackFrame = ECStack.back();
StackFrame.CurFunction = F; StackFrame.CurFunction = F;

View File

@ -1949,7 +1949,7 @@ bool AsmParser::parseMacroArgument(MCAsmMacroArgument &MA, bool Vararg) {
if (Vararg) { if (Vararg) {
if (Lexer.isNot(AsmToken::EndOfStatement)) { if (Lexer.isNot(AsmToken::EndOfStatement)) {
StringRef Str = parseStringToEndOfStatement(); StringRef Str = parseStringToEndOfStatement();
MA.push_back(AsmToken(AsmToken::String, Str)); MA.emplace_back(AsmToken::String, Str);
} }
return false; return false;
} }
@ -4346,8 +4346,7 @@ MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
StringRef Body = StringRef(BodyStart, BodyEnd - BodyStart); StringRef Body = StringRef(BodyStart, BodyEnd - BodyStart);
// We Are Anonymous. // We Are Anonymous.
MacroLikeBodies.push_back( MacroLikeBodies.emplace_back(StringRef(), Body, MCAsmMacroParameters());
MCAsmMacro(StringRef(), Body, MCAsmMacroParameters()));
return &MacroLikeBodies.back(); return &MacroLikeBodies.back();
} }
@ -4490,7 +4489,7 @@ bool AsmParser::parseDirectiveIrpc(SMLoc DirectiveLoc) {
StringRef Values = A.front().front().getString(); StringRef Values = A.front().front().getString();
for (std::size_t I = 0, End = Values.size(); I != End; ++I) { for (std::size_t I = 0, End = Values.size(); I != End; ++I) {
MCAsmMacroArgument Arg; MCAsmMacroArgument Arg;
Arg.push_back(AsmToken(AsmToken::Identifier, Values.slice(I, I + 1))); Arg.emplace_back(AsmToken::Identifier, Values.slice(I, I + 1));
// Note that the AtPseudoVariable is enabled for instantiations of .irpc. // Note that the AtPseudoVariable is enabled for instantiations of .irpc.
// This is undocumented, but GAS seems to support it. // This is undocumented, but GAS seems to support it.

View File

@ -1601,7 +1601,7 @@ TGParser::ParseDagArgList(Record *CurRec) {
// DagArg ::= VARNAME // DagArg ::= VARNAME
if (Lex.getCode() == tgtok::VarName) { if (Lex.getCode() == tgtok::VarName) {
// A missing value is treated like '?'. // A missing value is treated like '?'.
Result.push_back(std::make_pair(UnsetInit::get(), Lex.getCurStrVal())); Result.emplace_back(UnsetInit::get(), Lex.getCurStrVal());
Lex.Lex(); Lex.Lex();
} else { } else {
// DagArg ::= Value (':' VARNAME)? // DagArg ::= Value (':' VARNAME)?
@ -2174,7 +2174,7 @@ std::vector<LetRecord> TGParser::ParseLetList() {
if (!Val) return std::vector<LetRecord>(); if (!Val) return std::vector<LetRecord>();
// Now that we have everything, add the record. // Now that we have everything, add the record.
Result.push_back(LetRecord(Name, Bits, Val, NameLoc)); Result.emplace_back(std::move(Name), std::move(Bits), Val, NameLoc);
if (Lex.getCode() != tgtok::comma) if (Lex.getCode() != tgtok::comma)
return Result; return Result;

View File

@ -1465,7 +1465,7 @@ void MergeFunctions::remove(Function *F) {
if (Erased) { if (Erased) {
DEBUG(dbgs() << "Removed " << F->getName() DEBUG(dbgs() << "Removed " << F->getName()
<< " from set and deferred it.\n"); << " from set and deferred it.\n");
Deferred.push_back(F); Deferred.emplace_back(F);
} }
} }

View File

@ -1843,7 +1843,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
case Instruction::BitCast: case Instruction::BitCast:
case Instruction::GetElementPtr: case Instruction::GetElementPtr:
Users.push_back(I); Users.emplace_back(I);
Worklist.push_back(I); Worklist.push_back(I);
continue; continue;
@ -1852,7 +1852,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
// We can fold eq/ne comparisons with null to false/true, respectively. // We can fold eq/ne comparisons with null to false/true, respectively.
if (!ICI->isEquality() || !isa<ConstantPointerNull>(ICI->getOperand(1))) if (!ICI->isEquality() || !isa<ConstantPointerNull>(ICI->getOperand(1)))
return false; return false;
Users.push_back(I); Users.emplace_back(I);
continue; continue;
} }
@ -1878,13 +1878,13 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
case Intrinsic::lifetime_start: case Intrinsic::lifetime_start:
case Intrinsic::lifetime_end: case Intrinsic::lifetime_end:
case Intrinsic::objectsize: case Intrinsic::objectsize:
Users.push_back(I); Users.emplace_back(I);
continue; continue;
} }
} }
if (isFreeCall(I, TLI)) { if (isFreeCall(I, TLI)) {
Users.push_back(I); Users.emplace_back(I);
continue; continue;
} }
return false; return false;
@ -1893,7 +1893,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
StoreInst *SI = cast<StoreInst>(I); StoreInst *SI = cast<StoreInst>(I);
if (SI->isVolatile() || SI->getPointerOperand() != PI) if (SI->isVolatile() || SI->getPointerOperand() != PI)
return false; return false;
Users.push_back(I); Users.emplace_back(I);
continue; continue;
} }
} }

View File

@ -1102,7 +1102,7 @@ Instruction *WidenIV::WidenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
IRBuilder<> Builder(WidePhi->getParent()->getFirstInsertionPt()); IRBuilder<> Builder(WidePhi->getParent()->getFirstInsertionPt());
Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType()); Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType());
UsePhi->replaceAllUsesWith(Trunc); UsePhi->replaceAllUsesWith(Trunc);
DeadInsts.push_back(UsePhi); DeadInsts.emplace_back(UsePhi);
DEBUG(dbgs() << "INDVARS: Widen lcssa phi " << *UsePhi DEBUG(dbgs() << "INDVARS: Widen lcssa phi " << *UsePhi
<< " to " << *WidePhi << "\n"); << " to " << *WidePhi << "\n");
} }
@ -1135,7 +1135,7 @@ Instruction *WidenIV::WidenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
<< " replaced by " << *DU.WideDef << "\n"); << " replaced by " << *DU.WideDef << "\n");
++NumElimExt; ++NumElimExt;
DU.NarrowUse->replaceAllUsesWith(NewDef); DU.NarrowUse->replaceAllUsesWith(NewDef);
DeadInsts.push_back(DU.NarrowUse); DeadInsts.emplace_back(DU.NarrowUse);
} }
// Now that the extend is gone, we want to expose it's uses for potential // Now that the extend is gone, we want to expose it's uses for potential
// further simplification. We don't need to directly inform SimplifyIVUsers // further simplification. We don't need to directly inform SimplifyIVUsers
@ -1188,7 +1188,7 @@ Instruction *WidenIV::WidenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
if (WideAddRec != SE->getSCEV(WideUse)) { if (WideAddRec != SE->getSCEV(WideUse)) {
DEBUG(dbgs() << "Wide use expression mismatch: " << *WideUse DEBUG(dbgs() << "Wide use expression mismatch: " << *WideUse
<< ": " << *SE->getSCEV(WideUse) << " != " << *WideAddRec << "\n"); << ": " << *SE->getSCEV(WideUse) << " != " << *WideAddRec << "\n");
DeadInsts.push_back(WideUse); DeadInsts.emplace_back(WideUse);
return nullptr; return nullptr;
} }
@ -1285,7 +1285,7 @@ PHINode *WidenIV::CreateWideIV(SCEVExpander &Rewriter) {
// WidenIVUse may have removed the def-use edge. // WidenIVUse may have removed the def-use edge.
if (DU.NarrowDef->use_empty()) if (DU.NarrowDef->use_empty())
DeadInsts.push_back(DU.NarrowDef); DeadInsts.emplace_back(DU.NarrowDef);
} }
return WidePhi; return WidePhi;
} }

View File

@ -811,7 +811,7 @@ DeleteTriviallyDeadInstructions(SmallVectorImpl<WeakVH> &DeadInsts) {
if (Instruction *U = dyn_cast<Instruction>(O)) { if (Instruction *U = dyn_cast<Instruction>(O)) {
O = nullptr; O = nullptr;
if (U->use_empty()) if (U->use_empty())
DeadInsts.push_back(U); DeadInsts.emplace_back(U);
} }
I->eraseFromParent(); I->eraseFromParent();
@ -2917,7 +2917,7 @@ void LSRInstance::GenerateIVChain(const IVChain &Chain, SCEVExpander &Rewriter,
IVOper = Builder.CreateTruncOrBitCast(IVOper, OperTy, "lsr.chain"); IVOper = Builder.CreateTruncOrBitCast(IVOper, OperTy, "lsr.chain");
} }
Inc.UserInst->replaceUsesOfWith(Inc.IVOperand, IVOper); Inc.UserInst->replaceUsesOfWith(Inc.IVOperand, IVOper);
DeadInsts.push_back(Inc.IVOperand); DeadInsts.emplace_back(Inc.IVOperand);
} }
// If LSR created a new, wider phi, we may also replace its postinc. We only // If LSR created a new, wider phi, we may also replace its postinc. We only
// do this if we also found a wide value for the head of the chain. // do this if we also found a wide value for the head of the chain.
@ -2939,7 +2939,7 @@ void LSRInstance::GenerateIVChain(const IVChain &Chain, SCEVExpander &Rewriter,
IVOper = Builder.CreatePointerCast(IVSrc, PostIncTy, "lsr.chain"); IVOper = Builder.CreatePointerCast(IVSrc, PostIncTy, "lsr.chain");
} }
Phi->replaceUsesOfWith(PostIncV, IVOper); Phi->replaceUsesOfWith(PostIncV, IVOper);
DeadInsts.push_back(PostIncV); DeadInsts.emplace_back(PostIncV);
} }
} }
} }
@ -4594,7 +4594,7 @@ Value *LSRInstance::Expand(const LSRFixup &LF,
// form, update the ICmp's other operand. // form, update the ICmp's other operand.
if (LU.Kind == LSRUse::ICmpZero) { if (LU.Kind == LSRUse::ICmpZero) {
ICmpInst *CI = cast<ICmpInst>(LF.UserInst); ICmpInst *CI = cast<ICmpInst>(LF.UserInst);
DeadInsts.push_back(CI->getOperand(1)); DeadInsts.emplace_back(CI->getOperand(1));
assert(!F.BaseGV && "ICmp does not support folding a global value and " assert(!F.BaseGV && "ICmp does not support folding a global value and "
"a scale at the same time!"); "a scale at the same time!");
if (F.Scale == -1) { if (F.Scale == -1) {
@ -4737,7 +4737,7 @@ void LSRInstance::Rewrite(const LSRFixup &LF,
LF.UserInst->replaceUsesOfWith(LF.OperandValToReplace, FullV); LF.UserInst->replaceUsesOfWith(LF.OperandValToReplace, FullV);
} }
DeadInsts.push_back(LF.OperandValToReplace); DeadInsts.emplace_back(LF.OperandValToReplace);
} }
/// ImplementSolution - Rewrite all the fixup locations with new values, /// ImplementSolution - Rewrite all the fixup locations with new values,

View File

@ -733,7 +733,7 @@ static bool LinearizeExprTree(BinaryOperator *I,
if (Ops.empty()) { if (Ops.empty()) {
Constant *Identity = ConstantExpr::getBinOpIdentity(Opcode, I->getType()); Constant *Identity = ConstantExpr::getBinOpIdentity(Opcode, I->getType());
assert(Identity && "Associative operation without identity!"); assert(Identity && "Associative operation without identity!");
Ops.push_back(std::make_pair(Identity, APInt(Bitwidth, 1))); Ops.emplace_back(Identity, APInt(Bitwidth, 1));
} }
return Changed; return Changed;

View File

@ -636,7 +636,7 @@ void PromoteMem2Reg::run() {
// and inserting the phi nodes we marked as necessary // and inserting the phi nodes we marked as necessary
// //
std::vector<RenamePassData> RenamePassWorkList; std::vector<RenamePassData> RenamePassWorkList;
RenamePassWorkList.push_back(RenamePassData(F.begin(), nullptr, Values)); RenamePassWorkList.emplace_back(F.begin(), nullptr, std::move(Values));
do { do {
RenamePassData RPD; RenamePassData RPD;
RPD.swap(RenamePassWorkList.back()); RPD.swap(RenamePassWorkList.back());
@ -973,7 +973,7 @@ NextIteration:
for (; I != E; ++I) for (; I != E; ++I)
if (VisitedSuccs.insert(*I).second) if (VisitedSuccs.insert(*I).second)
Worklist.push_back(RenamePassData(*I, Pred, IncomingVals)); Worklist.emplace_back(*I, Pred, IncomingVals);
goto NextIteration; goto NextIteration;
} }

View File

@ -141,7 +141,7 @@ Value *SimplifyIndvar::foldIVUser(Instruction *UseInst, Instruction *IVOperand)
++NumElimOperand; ++NumElimOperand;
Changed = true; Changed = true;
if (IVOperand->use_empty()) if (IVOperand->use_empty())
DeadInsts.push_back(IVOperand); DeadInsts.emplace_back(IVOperand);
return IVSrc; return IVSrc;
} }
@ -178,7 +178,7 @@ void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand) {
DEBUG(dbgs() << "INDVARS: Eliminated comparison: " << *ICmp << '\n'); DEBUG(dbgs() << "INDVARS: Eliminated comparison: " << *ICmp << '\n');
++NumElimCmp; ++NumElimCmp;
Changed = true; Changed = true;
DeadInsts.push_back(ICmp); DeadInsts.emplace_back(ICmp);
} }
/// SimplifyIVUsers helper for eliminating useless /// SimplifyIVUsers helper for eliminating useless
@ -229,7 +229,7 @@ void SimplifyIndvar::eliminateIVRemainder(BinaryOperator *Rem,
DEBUG(dbgs() << "INDVARS: Simplified rem: " << *Rem << '\n'); DEBUG(dbgs() << "INDVARS: Simplified rem: " << *Rem << '\n');
++NumElimRem; ++NumElimRem;
Changed = true; Changed = true;
DeadInsts.push_back(Rem); DeadInsts.emplace_back(Rem);
} }
/// Eliminate an operation that consumes a simple IV and has /// Eliminate an operation that consumes a simple IV and has
@ -260,7 +260,7 @@ bool SimplifyIndvar::eliminateIVUser(Instruction *UseInst,
UseInst->replaceAllUsesWith(IVOperand); UseInst->replaceAllUsesWith(IVOperand);
++NumElimIdentity; ++NumElimIdentity;
Changed = true; Changed = true;
DeadInsts.push_back(UseInst); DeadInsts.emplace_back(UseInst);
return true; return true;
} }
@ -386,7 +386,7 @@ Instruction *SimplifyIndvar::splitOverflowIntrinsic(Instruction *IVUser,
"Bad add instruction created from overflow intrinsic."); "Bad add instruction created from overflow intrinsic.");
AddVal->replaceAllUsesWith(AddInst); AddVal->replaceAllUsesWith(AddInst);
DeadInsts.push_back(AddVal); DeadInsts.emplace_back(AddVal);
return AddInst; return AddInst;
} }

View File

@ -472,7 +472,7 @@ private:
/// Create a new VectorizableTree entry. /// Create a new VectorizableTree entry.
TreeEntry *newTreeEntry(ArrayRef<Value *> VL, bool Vectorized) { TreeEntry *newTreeEntry(ArrayRef<Value *> VL, bool Vectorized) {
VectorizableTree.push_back(TreeEntry()); VectorizableTree.emplace_back();
int idx = VectorizableTree.size() - 1; int idx = VectorizableTree.size() - 1;
TreeEntry *Last = &VectorizableTree[idx]; TreeEntry *Last = &VectorizableTree[idx];
Last->Scalars.insert(Last->Scalars.begin(), VL.begin(), VL.end()); Last->Scalars.insert(Last->Scalars.begin(), VL.begin(), VL.end());

View File

@ -385,8 +385,7 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector<const BasicBlock*> &BBs) {
std::vector<std::pair<std::string, std::string> > BlockInfo; std::vector<std::pair<std::string, std::string> > BlockInfo;
for (BasicBlock *BB : Blocks) for (BasicBlock *BB : Blocks)
BlockInfo.push_back(std::make_pair(BB->getParent()->getName(), BlockInfo.emplace_back(BB->getParent()->getName(), BB->getName());
BB->getName()));
// Now run the CFG simplify pass on the function... // Now run the CFG simplify pass on the function...
std::vector<std::string> Passes; std::vector<std::string> Passes;

View File

@ -386,10 +386,8 @@ static bool ExtractLoops(BugDriver &BD,
// that masked the error. Stop loop extraction now. // that masked the error. Stop loop extraction now.
std::vector<std::pair<std::string, FunctionType*> > MisCompFunctions; std::vector<std::pair<std::string, FunctionType*> > MisCompFunctions;
for (unsigned i = 0, e = MiscompiledFunctions.size(); i != e; ++i) { for (Function *F : MiscompiledFunctions) {
Function *F = MiscompiledFunctions[i]; MisCompFunctions.emplace_back(F->getName(), F->getFunctionType());
MisCompFunctions.push_back(std::make_pair(F->getName(),
F->getFunctionType()));
} }
if (Linker::LinkModules(ToNotOptimize, ToOptimizeLoopExtracted)) if (Linker::LinkModules(ToNotOptimize, ToOptimizeLoopExtracted))
@ -414,8 +412,7 @@ static bool ExtractLoops(BugDriver &BD,
for (Module::iterator I = ToOptimizeLoopExtracted->begin(), for (Module::iterator I = ToOptimizeLoopExtracted->begin(),
E = ToOptimizeLoopExtracted->end(); I != E; ++I) E = ToOptimizeLoopExtracted->end(); I != E; ++I)
if (!I->isDeclaration()) if (!I->isDeclaration())
MisCompFunctions.push_back(std::make_pair(I->getName(), MisCompFunctions.emplace_back(I->getName(), I->getFunctionType());
I->getFunctionType()));
// Okay, great! Now we know that we extracted a loop and that loop // Okay, great! Now we know that we extracted a loop and that loop
// extraction both didn't break the program, and didn't mask the problem. // extraction both didn't break the program, and didn't mask the problem.
@ -596,8 +593,7 @@ static bool ExtractBlocks(BugDriver &BD,
for (Module::iterator I = Extracted->begin(), E = Extracted->end(); for (Module::iterator I = Extracted->begin(), E = Extracted->end();
I != E; ++I) I != E; ++I)
if (!I->isDeclaration()) if (!I->isDeclaration())
MisCompFunctions.push_back(std::make_pair(I->getName(), MisCompFunctions.emplace_back(I->getName(), I->getFunctionType());
I->getFunctionType()));
if (Linker::LinkModules(ProgClone, Extracted.get())) if (Linker::LinkModules(ProgClone, Extracted.get()))
exit(1); exit(1);

View File

@ -116,8 +116,7 @@ public:
orc::CtorDtorRunner<CODLayerT> CtorRunner(std::move(CtorNames), H); orc::CtorDtorRunner<CODLayerT> CtorRunner(std::move(CtorNames), H);
CtorRunner.runViaLayer(CODLayer); CtorRunner.runViaLayer(CODLayer);
IRStaticDestructorRunners.push_back( IRStaticDestructorRunners.emplace_back(std::move(DtorNames), H);
orc::CtorDtorRunner<CODLayerT>(std::move(DtorNames), H));
return H; return H;
} }

View File

@ -116,8 +116,7 @@ CodeCoverageTool::getSourceFile(StringRef SourceFile) {
error(EC.message(), SourceFile); error(EC.message(), SourceFile);
return EC; return EC;
} }
LoadedSourceFiles.push_back( LoadedSourceFiles.emplace_back(SourceFile, std::move(Buffer.get()));
std::make_pair(SourceFile, std::move(Buffer.get())));
return *LoadedSourceFiles.back().second; return *LoadedSourceFiles.back().second;
} }

View File

@ -41,7 +41,7 @@ private:
void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) { void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) {
List.clear(); List.clear();
for (; Begin != End; ++Begin) for (; Begin != End; ++Begin)
List.push_back(StringRef(*Begin)); List.emplace_back(StringRef(*Begin));
} }
raw_ostream &OS; raw_ostream &OS;

View File

@ -946,10 +946,7 @@ static bool ReadCheckFile(SourceMgr &SM,
} }
// Okay, add the string we captured to the output vector and move on. // Okay, add the string we captured to the output vector and move on.
CheckStrings.push_back(CheckString(P, CheckStrings.emplace_back(P, UsedPrefix, PatternLoc, CheckTy);
UsedPrefix,
PatternLoc,
CheckTy));
std::swap(DagNotMatches, CheckStrings.back().DagNotStrings); std::swap(DagNotMatches, CheckStrings.back().DagNotStrings);
DagNotMatches = ImplicitNegativeChecks; DagNotMatches = ImplicitNegativeChecks;
} }
@ -957,10 +954,9 @@ static bool ReadCheckFile(SourceMgr &SM,
// Add an EOF pattern for any trailing CHECK-DAG/-NOTs, and use the first // Add an EOF pattern for any trailing CHECK-DAG/-NOTs, and use the first
// prefix as a filler for the error message. // prefix as a filler for the error message.
if (!DagNotMatches.empty()) { if (!DagNotMatches.empty()) {
CheckStrings.push_back(CheckString(Pattern(Check::CheckEOF), CheckStrings.emplace_back(Pattern(Check::CheckEOF), *CheckPrefixes.begin(),
*CheckPrefixes.begin(), SMLoc::getFromPointer(Buffer.data()),
SMLoc::getFromPointer(Buffer.data()), Check::CheckEOF);
Check::CheckEOF));
std::swap(DagNotMatches, CheckStrings.back().DagNotStrings); std::swap(DagNotMatches, CheckStrings.back().DagNotStrings);
} }

View File

@ -1797,7 +1797,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
getEnumNameForToken(AsmMatchConverter)); getEnumNameForToken(AsmMatchConverter));
// Add the converter row for this instruction. // Add the converter row for this instruction.
ConversionTable.push_back(std::vector<uint8_t>()); ConversionTable.emplace_back();
ConversionTable.back().push_back(KindID); ConversionTable.back().push_back(KindID);
ConversionTable.back().push_back(CVT_Done); ConversionTable.back().push_back(CVT_Done);
@ -2161,8 +2161,7 @@ static void emitMatchTokenString(CodeGenTarget &Target,
std::vector<StringMatcher::StringPair> Matches; std::vector<StringMatcher::StringPair> Matches;
for (const auto &CI : Infos) { for (const auto &CI : Infos) {
if (CI.Kind == ClassInfo::Token) if (CI.Kind == ClassInfo::Token)
Matches.push_back( Matches.emplace_back(CI.ValueName, "return " + CI.Name + ";");
StringMatcher::StringPair(CI.ValueName, "return " + CI.Name + ";"));
} }
OS << "static MatchClassKind matchTokenString(StringRef Name) {\n"; OS << "static MatchClassKind matchTokenString(StringRef Name) {\n";
@ -2184,9 +2183,8 @@ static void emitMatchRegisterName(CodeGenTarget &Target, Record *AsmParser,
if (Reg.TheDef->getValueAsString("AsmName").empty()) if (Reg.TheDef->getValueAsString("AsmName").empty())
continue; continue;
Matches.push_back( Matches.emplace_back(Reg.TheDef->getValueAsString("AsmName"),
StringMatcher::StringPair(Reg.TheDef->getValueAsString("AsmName"), "return " + utostr(Reg.EnumValue) + ";");
"return " + utostr(Reg.EnumValue) + ";"));
} }
OS << "static unsigned MatchRegisterName(StringRef Name) {\n"; OS << "static unsigned MatchRegisterName(StringRef Name) {\n";

View File

@ -1105,9 +1105,8 @@ AsmWriterEmitter::AsmWriterEmitter(RecordKeeper &R) : Records(R), Target(R) {
Record *AsmWriter = Target.getAsmWriter(); Record *AsmWriter = Target.getAsmWriter();
for (const CodeGenInstruction *I : Target.instructions()) for (const CodeGenInstruction *I : Target.instructions())
if (!I->AsmString.empty() && I->TheDef->getName() != "PHI") if (!I->AsmString.empty() && I->TheDef->getName() != "PHI")
Instructions.push_back( Instructions.emplace_back(*I, AsmWriter->getValueAsInt("Variant"),
AsmWriterInst(*I, AsmWriter->getValueAsInt("Variant"), AsmWriter->getValueAsInt("PassSubtarget"));
AsmWriter->getValueAsInt("PassSubtarget")));
// Get the instruction numbering. // Get the instruction numbering.
NumberedInstructions = &Target.getInstructionsByEnumValue(); NumberedInstructions = &Target.getInstructionsByEnumValue();

View File

@ -163,27 +163,22 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant,
if (VarName.empty()) { if (VarName.empty()) {
// Just a modifier, pass this into PrintSpecial. // Just a modifier, pass this into PrintSpecial.
Operands.push_back(AsmWriterOperand("PrintSpecial", Operands.emplace_back("PrintSpecial", ~0U, ~0U, Modifier,
~0U, PassSubtarget);
~0U,
Modifier,
PassSubtarget));
} else { } else {
// Otherwise, normal operand. // Otherwise, normal operand.
unsigned OpNo = CGI.Operands.getOperandNamed(VarName); unsigned OpNo = CGI.Operands.getOperandNamed(VarName);
CGIOperandList::OperandInfo OpInfo = CGI.Operands[OpNo]; CGIOperandList::OperandInfo OpInfo = CGI.Operands[OpNo];
unsigned MIOp = OpInfo.MIOperandNo; unsigned MIOp = OpInfo.MIOperandNo;
Operands.push_back(AsmWriterOperand(OpInfo.PrinterMethodName, Operands.emplace_back(OpInfo.PrinterMethodName, OpNo, MIOp, Modifier,
OpNo, MIOp, Modifier, PassSubtarget);
PassSubtarget));
} }
LastEmitted = VarEnd; LastEmitted = VarEnd;
} }
} }
Operands.push_back(AsmWriterOperand("return;", Operands.emplace_back("return;", AsmWriterOperand::isLiteralStatementOperand);
AsmWriterOperand::isLiteralStatementOperand));
} }
/// MatchesAllButOneOp - If this instruction is exactly identical to the /// MatchesAllButOneOp - If this instruction is exactly identical to the

View File

@ -3798,13 +3798,11 @@ void CodeGenDAGPatterns::GenerateVariants() {
if (AlreadyExists) continue; if (AlreadyExists) continue;
// Otherwise, add it to the list of patterns we have. // Otherwise, add it to the list of patterns we have.
PatternsToMatch. PatternsToMatch.emplace_back(
push_back(PatternToMatch(PatternsToMatch[i].getSrcRecord(), PatternsToMatch[i].getSrcRecord(), PatternsToMatch[i].getPredicates(),
PatternsToMatch[i].getPredicates(), Variant, PatternsToMatch[i].getDstPattern(),
Variant, PatternsToMatch[i].getDstPattern(), PatternsToMatch[i].getDstRegs(),
PatternsToMatch[i].getDstRegs(), PatternsToMatch[i].getAddedComplexity(), Record::getNewUID());
PatternsToMatch[i].getAddedComplexity(),
Record::getNewUID()));
} }
DEBUG(errs() << "\n"); DEBUG(errs() << "\n");

View File

@ -115,9 +115,9 @@ CGIOperandList::CGIOperandList(Record *R) : TheDef(R) {
PrintFatalError("In instruction '" + R->getName() + "', operand #" + PrintFatalError("In instruction '" + R->getName() + "', operand #" +
Twine(i) + " has the same name as a previous operand!"); Twine(i) + " has the same name as a previous operand!");
OperandList.push_back(OperandInfo(Rec, ArgName, PrintMethod, EncoderMethod, OperandList.emplace_back(Rec, ArgName, PrintMethod, EncoderMethod,
OperandNamespace + "::" + OperandType, OperandNamespace + "::" + OperandType, MIOperandNo,
MIOperandNo, NumOps, MIOpInfo)); NumOps, MIOpInfo);
MIOperandNo += NumOps; MIOperandNo += NumOps;
} }
@ -642,9 +642,9 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, unsigned Variant,
// Take care to instantiate each of the suboperands with the correct // Take care to instantiate each of the suboperands with the correct
// nomenclature: $foo.bar // nomenclature: $foo.bar
ResultOperands.push_back( ResultOperands.emplace_back(Result->getArgName(AliasOpNo) + "." +
ResultOperand(Result->getArgName(AliasOpNo) + "." + MIOI->getArgName(SubOp),
MIOI->getArgName(SubOp), SubRec)); SubRec);
ResultInstOperandIndex.push_back(std::make_pair(i, SubOp)); ResultInstOperandIndex.push_back(std::make_pair(i, SubOp));
} }
++AliasOpNo; ++AliasOpNo;

View File

@ -994,7 +994,7 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records) {
// Allocate user-defined register classes. // Allocate user-defined register classes.
for (auto *RC : RCs) { for (auto *RC : RCs) {
RegClasses.push_back(CodeGenRegisterClass(*this, RC)); RegClasses.emplace_back(*this, RC);
addToMaps(&RegClasses.back()); addToMaps(&RegClasses.back());
} }
@ -1056,7 +1056,7 @@ CodeGenRegBank::getOrCreateSubClass(const CodeGenRegisterClass *RC,
return FoundI->second; return FoundI->second;
// Sub-class doesn't exist, create a new one. // Sub-class doesn't exist, create a new one.
RegClasses.push_back(CodeGenRegisterClass(*this, Name, K)); RegClasses.emplace_back(*this, Name, K);
addToMaps(&RegClasses.back()); addToMaps(&RegClasses.back());
return &RegClasses.back(); return &RegClasses.back();
} }

View File

@ -145,8 +145,7 @@ void CodeGenSchedModels::collectProcModels() {
// Use idx=0 for NoModel/NoItineraries. // Use idx=0 for NoModel/NoItineraries.
Record *NoModelDef = Records.getDef("NoSchedModel"); Record *NoModelDef = Records.getDef("NoSchedModel");
Record *NoItinsDef = Records.getDef("NoItineraries"); Record *NoItinsDef = Records.getDef("NoItineraries");
ProcModels.push_back(CodeGenProcModel(0, "NoSchedModel", ProcModels.emplace_back(0, "NoSchedModel", NoModelDef, NoItinsDef);
NoModelDef, NoItinsDef));
ProcModelMap[NoModelDef] = 0; ProcModelMap[NoModelDef] = 0;
// For each processor, find a unique machine model. // For each processor, find a unique machine model.
@ -164,16 +163,14 @@ void CodeGenSchedModels::addProcModel(Record *ProcDef) {
std::string Name = ModelKey->getName(); std::string Name = ModelKey->getName();
if (ModelKey->isSubClassOf("SchedMachineModel")) { if (ModelKey->isSubClassOf("SchedMachineModel")) {
Record *ItinsDef = ModelKey->getValueAsDef("Itineraries"); Record *ItinsDef = ModelKey->getValueAsDef("Itineraries");
ProcModels.push_back( ProcModels.emplace_back(ProcModels.size(), Name, ModelKey, ItinsDef);
CodeGenProcModel(ProcModels.size(), Name, ModelKey, ItinsDef));
} }
else { else {
// An itinerary is defined without a machine model. Infer a new model. // An itinerary is defined without a machine model. Infer a new model.
if (!ModelKey->getValueAsListOfDefs("IID").empty()) if (!ModelKey->getValueAsListOfDefs("IID").empty())
Name = Name + "Model"; Name = Name + "Model";
ProcModels.push_back( ProcModels.emplace_back(ProcModels.size(), Name,
CodeGenProcModel(ProcModels.size(), Name, ProcDef->getValueAsDef("SchedModel"), ModelKey);
ProcDef->getValueAsDef("SchedModel"), ModelKey));
} }
DEBUG(ProcModels.back().dump()); DEBUG(ProcModels.back().dump());
} }
@ -281,12 +278,12 @@ void CodeGenSchedModels::collectSchedRW() {
std::sort(SWDefs.begin(), SWDefs.end(), LessRecord()); std::sort(SWDefs.begin(), SWDefs.end(), LessRecord());
for (RecIter SWI = SWDefs.begin(), SWE = SWDefs.end(); SWI != SWE; ++SWI) { for (RecIter SWI = SWDefs.begin(), SWE = SWDefs.end(); SWI != SWE; ++SWI) {
assert(!getSchedRWIdx(*SWI, /*IsRead=*/false) && "duplicate SchedWrite"); assert(!getSchedRWIdx(*SWI, /*IsRead=*/false) && "duplicate SchedWrite");
SchedWrites.push_back(CodeGenSchedRW(SchedWrites.size(), *SWI)); SchedWrites.emplace_back(SchedWrites.size(), *SWI);
} }
std::sort(SRDefs.begin(), SRDefs.end(), LessRecord()); std::sort(SRDefs.begin(), SRDefs.end(), LessRecord());
for (RecIter SRI = SRDefs.begin(), SRE = SRDefs.end(); SRI != SRE; ++SRI) { for (RecIter SRI = SRDefs.begin(), SRE = SRDefs.end(); SRI != SRE; ++SRI) {
assert(!getSchedRWIdx(*SRI, /*IsRead-*/true) && "duplicate SchedWrite"); assert(!getSchedRWIdx(*SRI, /*IsRead-*/true) && "duplicate SchedWrite");
SchedReads.push_back(CodeGenSchedRW(SchedReads.size(), *SRI)); SchedReads.emplace_back(SchedReads.size(), *SRI);
} }
// Initialize WriteSequence vectors. // Initialize WriteSequence vectors.
for (std::vector<CodeGenSchedRW>::iterator WI = SchedWrites.begin(), for (std::vector<CodeGenSchedRW>::iterator WI = SchedWrites.begin(),

View File

@ -610,7 +610,7 @@ void Filter::emitTableEntry(DecoderTableInfo &TableInfo) const {
TableInfo.Table.push_back(NumBits); TableInfo.Table.push_back(NumBits);
// A new filter entry begins a new scope for fixup resolution. // A new filter entry begins a new scope for fixup resolution.
TableInfo.FixupStack.push_back(FixupList()); TableInfo.FixupStack.emplace_back();
DecoderTable &Table = TableInfo.Table; DecoderTable &Table = TableInfo.Table;
@ -1333,7 +1333,7 @@ void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
// complex singletons need predicate checks from the first singleton // complex singletons need predicate checks from the first singleton
// to refer forward to the variable filterchooser that follows. // to refer forward to the variable filterchooser that follows.
TableInfo.FixupStack.push_back(FixupList()); TableInfo.FixupStack.emplace_back();
emitSingletonTableEntry(TableInfo, Opc); emitSingletonTableEntry(TableInfo, Opc);
@ -1350,7 +1350,7 @@ void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit, void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit,
bool mixed) { bool mixed) {
Filters.clear(); Filters.clear();
Filters.push_back(Filter(*this, startBit, numBit, true)); Filters.emplace_back(*this, startBit, numBit, true);
BestIndex = 0; // Sole Filter instance to choose from. BestIndex = 0; // Sole Filter instance to choose from.
bestFilter().recurse(); bestFilter().recurse();
} }
@ -1360,9 +1360,9 @@ void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit,
void FilterChooser::reportRegion(bitAttr_t RA, unsigned StartBit, void FilterChooser::reportRegion(bitAttr_t RA, unsigned StartBit,
unsigned BitIndex, bool AllowMixed) { unsigned BitIndex, bool AllowMixed) {
if (RA == ATTR_MIXED && AllowMixed) if (RA == ATTR_MIXED && AllowMixed)
Filters.push_back(Filter(*this, StartBit, BitIndex - StartBit, true)); Filters.emplace_back(*this, StartBit, BitIndex - StartBit, true);
else if (RA == ATTR_ALL_SET && !AllowMixed) else if (RA == ATTR_ALL_SET && !AllowMixed)
Filters.push_back(Filter(*this, StartBit, BitIndex - StartBit, false)); Filters.emplace_back(*this, StartBit, BitIndex - StartBit, false);
} }
// FilterProcessor scans the well-known encoding bits of the instructions and // FilterProcessor scans the well-known encoding bits of the instructions and
@ -2179,7 +2179,7 @@ void FixedLenDecoderEmitter::run(raw_ostream &o) {
TableInfo.Table.clear(); TableInfo.Table.clear();
TableInfo.FixupStack.clear(); TableInfo.FixupStack.clear();
TableInfo.Table.reserve(16384); TableInfo.Table.reserve(16384);
TableInfo.FixupStack.push_back(FixupList()); TableInfo.FixupStack.emplace_back();
FC.emitTableEntries(TableInfo); FC.emitTableEntries(TableInfo);
// Any NumToSkip fixups in the top level scope can resolve to the // Any NumToSkip fixups in the top level scope can resolve to the
// OPC_Fail at the end of the table. // OPC_Fail at the end of the table.

View File

@ -760,7 +760,7 @@ static void EmitTargetBuiltins(const std::map<std::string, std::string> &BIM,
E = BIM.end(); I != E; ++I) { E = BIM.end(); I != E; ++I) {
std::string ResultCode = std::string ResultCode =
"return " + TargetPrefix + "Intrinsic::" + I->second + ";"; "return " + TargetPrefix + "Intrinsic::" + I->second + ";";
Results.push_back(StringMatcher::StringPair(I->first, ResultCode)); Results.emplace_back(I->first, ResultCode);
} }
StringMatcher("BuiltinName", Results, OS).Emit(); StringMatcher("BuiltinName", Results, OS).Emit();