forked from OSchip/llvm-project
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. llvm-svn: 238602
This commit is contained in:
parent
3204b152b5
commit
f5e2fc474d
|
@ -230,7 +230,7 @@ public:
|
|||
void addCalledFunction(CallSite CS, CallGraphNode *M) {
|
||||
assert(!CS.getInstruction() || !CS.getCalledFunction() ||
|
||||
!CS.getCalledFunction()->isIntrinsic());
|
||||
CalledFunctions.push_back(std::make_pair(CS.getInstruction(), M));
|
||||
CalledFunctions.emplace_back(CS.getInstruction(), M);
|
||||
M->AddRef();
|
||||
}
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ public:
|
|||
return *const_cast<BlockInfo*>(BI);
|
||||
|
||||
// Otherwise, add a new record.
|
||||
BlockInfoRecords.push_back(BlockInfo());
|
||||
BlockInfoRecords.emplace_back();
|
||||
BlockInfoRecords.back().BlockID = BlockID;
|
||||
return BlockInfoRecords.back();
|
||||
}
|
||||
|
|
|
@ -215,7 +215,7 @@ public:
|
|||
|
||||
// Push the outer block's abbrev set onto the stack, start out with an
|
||||
// empty abbrev set.
|
||||
BlockScope.push_back(Block(OldCodeSize, BlockSizeWordIndex));
|
||||
BlockScope.emplace_back(OldCodeSize, BlockSizeWordIndex);
|
||||
BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
|
||||
|
||||
// If there is a blockinfo for this BlockID, add all the predefined abbrevs
|
||||
|
@ -503,7 +503,7 @@ private:
|
|||
return *BI;
|
||||
|
||||
// Otherwise, add a new record.
|
||||
BlockInfoRecords.push_back(BlockInfo());
|
||||
BlockInfoRecords.emplace_back();
|
||||
BlockInfoRecords.back().BlockID = BlockID;
|
||||
return BlockInfoRecords.back();
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ public:
|
|||
/// label just prior to the safe point (if the code generator is using
|
||||
/// MachineModuleInfo).
|
||||
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.
|
||||
|
|
|
@ -260,7 +260,7 @@ namespace llvm {
|
|||
#ifndef NDEBUG
|
||||
const SUnit *Addr = SUnits.empty() ? nullptr : &SUnits[0];
|
||||
#endif
|
||||
SUnits.push_back(SUnit(MI, (unsigned)SUnits.size()));
|
||||
SUnits.emplace_back(MI, (unsigned)SUnits.size());
|
||||
assert((Addr == nullptr || Addr == &SUnits[0]) &&
|
||||
"SUnits std::vector reallocated on the fly!");
|
||||
SUnits.back().OrigNode = &SUnits.back();
|
||||
|
|
|
@ -390,8 +390,7 @@ public:
|
|||
for (auto &F : *M) {
|
||||
if (F.isDeclaration())
|
||||
continue;
|
||||
Partitioning.push_back(std::vector<Function*>());
|
||||
Partitioning.back().push_back(&F);
|
||||
Partitioning.emplace_back(1, &F);
|
||||
}
|
||||
addLogicalModule(*LogicalDylibs.back(),
|
||||
std::shared_ptr<Module>(std::move(M)),
|
||||
|
|
|
@ -130,7 +130,7 @@ void AliasSet::addPointer(AliasSetTracker &AST, PointerRec &Entry,
|
|||
void AliasSet::addUnknownInst(Instruction *I, AliasAnalysis &AA) {
|
||||
if (UnknownInsts.empty())
|
||||
addRef();
|
||||
UnknownInsts.push_back(I);
|
||||
UnknownInsts.emplace_back(I);
|
||||
|
||||
if (!I->mayWriteToMemory()) {
|
||||
AliasTy = MayAlias;
|
||||
|
|
|
@ -1712,7 +1712,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
|
|||
// would confuse the logic below that expects proper IVs.
|
||||
if (Value *V = SimplifyInstruction(Phi, DL, SE.TLI, SE.DT, SE.AC)) {
|
||||
Phi->replaceAllUsesWith(V);
|
||||
DeadInsts.push_back(Phi);
|
||||
DeadInsts.emplace_back(Phi);
|
||||
++NumElim;
|
||||
DEBUG_WITH_TYPE(DebugType, dbgs()
|
||||
<< "INDVARS: Eliminated constant iv: " << *Phi << '\n');
|
||||
|
@ -1787,7 +1787,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
|
|||
CreateTruncOrBitCast(OrigInc, IsomorphicInc->getType(), IVName);
|
||||
}
|
||||
IsomorphicInc->replaceAllUsesWith(NewInc);
|
||||
DeadInsts.push_back(IsomorphicInc);
|
||||
DeadInsts.emplace_back(IsomorphicInc);
|
||||
}
|
||||
}
|
||||
DEBUG_WITH_TYPE(DebugType, dbgs()
|
||||
|
@ -1800,7 +1800,7 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
|
|||
NewIV = Builder.CreateTruncOrBitCast(OrigPhiRef, Phi->getType(), IVName);
|
||||
}
|
||||
Phi->replaceAllUsesWith(NewIV);
|
||||
DeadInsts.push_back(Phi);
|
||||
DeadInsts.emplace_back(Phi);
|
||||
}
|
||||
return NumElim;
|
||||
}
|
||||
|
|
|
@ -1902,9 +1902,9 @@ bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
|
|||
return Error(TypeLoc, "invalid type for function argument");
|
||||
|
||||
unsigned AttrIndex = 1;
|
||||
ArgList.push_back(ArgInfo(TypeLoc, ArgTy,
|
||||
AttributeSet::get(ArgTy->getContext(),
|
||||
AttrIndex++, Attrs), Name));
|
||||
ArgList.emplace_back(TypeLoc, ArgTy, AttributeSet::get(ArgTy->getContext(),
|
||||
AttrIndex++, Attrs),
|
||||
std::move(Name));
|
||||
|
||||
while (EatIfPresent(lltok::comma)) {
|
||||
// Handle ... at end of arg list.
|
||||
|
@ -1930,10 +1930,10 @@ bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
|
|||
if (!ArgTy->isFirstClassType())
|
||||
return Error(TypeLoc, "invalid type for function argument");
|
||||
|
||||
ArgList.push_back(ArgInfo(TypeLoc, ArgTy,
|
||||
AttributeSet::get(ArgTy->getContext(),
|
||||
AttrIndex++, Attrs),
|
||||
Name));
|
||||
ArgList.emplace_back(
|
||||
TypeLoc, ArgTy,
|
||||
AttributeSet::get(ArgTy->getContext(), AttrIndex++, Attrs),
|
||||
std::move(Name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,9 +63,7 @@ public:
|
|||
// vector compatibility methods
|
||||
unsigned size() const { return ValuePtrs.size(); }
|
||||
void resize(unsigned N) { ValuePtrs.resize(N); }
|
||||
void push_back(Value *V) {
|
||||
ValuePtrs.push_back(V);
|
||||
}
|
||||
void push_back(Value *V) { ValuePtrs.emplace_back(V); }
|
||||
|
||||
void clear() {
|
||||
assert(ResolveConstants.empty() && "Constants not resolved?");
|
||||
|
|
|
@ -114,7 +114,7 @@ MCSymbol *MMIAddrLabelMap::getAddrLabelSymbol(BasicBlock *BB) {
|
|||
|
||||
// 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.
|
||||
BBCallbacks.push_back(BB);
|
||||
BBCallbacks.emplace_back(BB);
|
||||
BBCallbacks.back().setMap(this);
|
||||
Entry.Index = BBCallbacks.size()-1;
|
||||
Entry.Fn = BB->getParent();
|
||||
|
|
|
@ -71,7 +71,7 @@ SUnit *ScheduleDAGSDNodes::newSUnit(SDNode *N) {
|
|||
if (!SUnits.empty())
|
||||
Addr = &SUnits[0];
|
||||
#endif
|
||||
SUnits.push_back(SUnit(N, (unsigned)SUnits.size()));
|
||||
SUnits.emplace_back(N, (unsigned)SUnits.size());
|
||||
assert((Addr == nullptr || Addr == &SUnits[0]) &&
|
||||
"SUnits std::vector reallocated on the fly!");
|
||||
SUnits.back().OrigNode = &SUnits.back();
|
||||
|
|
|
@ -7437,7 +7437,7 @@ bool SelectionDAGBuilder::buildJumpTable(CaseClusterVector &Clusters,
|
|||
JumpTableHeader JTH(Clusters[First].Low->getValue(),
|
||||
Clusters[Last].High->getValue(), SI->getCondition(),
|
||||
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,
|
||||
JTCases.size() - 1, Weight);
|
||||
|
@ -7650,9 +7650,9 @@ bool SelectionDAGBuilder::buildBitTests(CaseClusterVector &Clusters,
|
|||
FuncInfo.MF->CreateMachineBasicBlock(SI->getParent());
|
||||
BTI.push_back(BitTestCase(CB.Mask, BitTestBB, CB.BB, CB.ExtraWeight));
|
||||
}
|
||||
BitTestCases.push_back(BitTestBlock(LowBound, CmpRange, SI->getCondition(),
|
||||
-1U, MVT::Other, false, nullptr,
|
||||
nullptr, std::move(BTI)));
|
||||
BitTestCases.emplace_back(std::move(LowBound), std::move(CmpRange),
|
||||
SI->getCondition(), -1U, MVT::Other, false, nullptr,
|
||||
nullptr, std::move(BTI));
|
||||
|
||||
BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High,
|
||||
BitTestCases.size() - 1, TotalWeight);
|
||||
|
|
|
@ -352,7 +352,7 @@ void DWARFContext::parseTypeUnits() {
|
|||
if (!TUs.empty())
|
||||
return;
|
||||
for (const auto &I : getTypesSections()) {
|
||||
TUs.push_back(DWARFUnitSection<DWARFTypeUnit>());
|
||||
TUs.emplace_back();
|
||||
TUs.back().parse(*this, I.second);
|
||||
}
|
||||
}
|
||||
|
@ -365,7 +365,7 @@ void DWARFContext::parseDWOTypeUnits() {
|
|||
if (!DWOTUs.empty())
|
||||
return;
|
||||
for (const auto &I : getTypesDWOSections()) {
|
||||
DWOTUs.push_back(DWARFUnitSection<DWARFTypeUnit>());
|
||||
DWOTUs.emplace_back();
|
||||
DWOTUs.back().parseDWO(*this, I.second);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -438,7 +438,7 @@ int ExecutionEngine::runFunctionAsMain(Function *Fn,
|
|||
if (NumArgs > 2) {
|
||||
std::vector<std::string> EnvVars;
|
||||
for (unsigned i = 0; envp[i]; ++i)
|
||||
EnvVars.push_back(envp[i]);
|
||||
EnvVars.emplace_back(envp[i]);
|
||||
// Arg #2 = envp.
|
||||
GVArgs.push_back(PTOGV(CEnv.reset(Fn->getContext(), this, EnvVars)));
|
||||
}
|
||||
|
|
|
@ -255,10 +255,7 @@ int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
|
|||
const char * const *EnvP) {
|
||||
unwrap(EE)->finalizeObject();
|
||||
|
||||
std::vector<std::string> ArgVec;
|
||||
for (unsigned I = 0; I != ArgC; ++I)
|
||||
ArgVec.push_back(ArgV[I]);
|
||||
|
||||
std::vector<std::string> ArgVec(ArgV, ArgV + ArgC);
|
||||
return unwrap(EE)->runFunctionAsMain(unwrap<Function>(F), ArgVec, EnvP);
|
||||
}
|
||||
|
||||
|
|
|
@ -2079,7 +2079,7 @@ void Interpreter::callFunction(Function *F,
|
|||
ECStack.back().Caller.arg_size() == ArgVals.size()) &&
|
||||
"Incorrect number of arguments passed into function call!");
|
||||
// Make a new stack frame... and fill it in.
|
||||
ECStack.push_back(ExecutionContext());
|
||||
ECStack.emplace_back();
|
||||
ExecutionContext &StackFrame = ECStack.back();
|
||||
StackFrame.CurFunction = F;
|
||||
|
||||
|
|
|
@ -1949,7 +1949,7 @@ bool AsmParser::parseMacroArgument(MCAsmMacroArgument &MA, bool Vararg) {
|
|||
if (Vararg) {
|
||||
if (Lexer.isNot(AsmToken::EndOfStatement)) {
|
||||
StringRef Str = parseStringToEndOfStatement();
|
||||
MA.push_back(AsmToken(AsmToken::String, Str));
|
||||
MA.emplace_back(AsmToken::String, Str);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -4346,8 +4346,7 @@ MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
|
|||
StringRef Body = StringRef(BodyStart, BodyEnd - BodyStart);
|
||||
|
||||
// We Are Anonymous.
|
||||
MacroLikeBodies.push_back(
|
||||
MCAsmMacro(StringRef(), Body, MCAsmMacroParameters()));
|
||||
MacroLikeBodies.emplace_back(StringRef(), Body, MCAsmMacroParameters());
|
||||
return &MacroLikeBodies.back();
|
||||
}
|
||||
|
||||
|
@ -4490,7 +4489,7 @@ bool AsmParser::parseDirectiveIrpc(SMLoc DirectiveLoc) {
|
|||
StringRef Values = A.front().front().getString();
|
||||
for (std::size_t I = 0, End = Values.size(); I != End; ++I) {
|
||||
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.
|
||||
// This is undocumented, but GAS seems to support it.
|
||||
|
|
|
@ -1601,7 +1601,7 @@ TGParser::ParseDagArgList(Record *CurRec) {
|
|||
// DagArg ::= VARNAME
|
||||
if (Lex.getCode() == tgtok::VarName) {
|
||||
// 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();
|
||||
} else {
|
||||
// DagArg ::= Value (':' VARNAME)?
|
||||
|
@ -2174,7 +2174,7 @@ std::vector<LetRecord> TGParser::ParseLetList() {
|
|||
if (!Val) return std::vector<LetRecord>();
|
||||
|
||||
// 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)
|
||||
return Result;
|
||||
|
|
|
@ -1465,7 +1465,7 @@ void MergeFunctions::remove(Function *F) {
|
|||
if (Erased) {
|
||||
DEBUG(dbgs() << "Removed " << F->getName()
|
||||
<< " from set and deferred it.\n");
|
||||
Deferred.push_back(F);
|
||||
Deferred.emplace_back(F);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1843,7 +1843,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
|
|||
|
||||
case Instruction::BitCast:
|
||||
case Instruction::GetElementPtr:
|
||||
Users.push_back(I);
|
||||
Users.emplace_back(I);
|
||||
Worklist.push_back(I);
|
||||
continue;
|
||||
|
||||
|
@ -1852,7 +1852,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
|
|||
// We can fold eq/ne comparisons with null to false/true, respectively.
|
||||
if (!ICI->isEquality() || !isa<ConstantPointerNull>(ICI->getOperand(1)))
|
||||
return false;
|
||||
Users.push_back(I);
|
||||
Users.emplace_back(I);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1878,13 +1878,13 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
|
|||
case Intrinsic::lifetime_start:
|
||||
case Intrinsic::lifetime_end:
|
||||
case Intrinsic::objectsize:
|
||||
Users.push_back(I);
|
||||
Users.emplace_back(I);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (isFreeCall(I, TLI)) {
|
||||
Users.push_back(I);
|
||||
Users.emplace_back(I);
|
||||
continue;
|
||||
}
|
||||
return false;
|
||||
|
@ -1893,7 +1893,7 @@ isAllocSiteRemovable(Instruction *AI, SmallVectorImpl<WeakVH> &Users,
|
|||
StoreInst *SI = cast<StoreInst>(I);
|
||||
if (SI->isVolatile() || SI->getPointerOperand() != PI)
|
||||
return false;
|
||||
Users.push_back(I);
|
||||
Users.emplace_back(I);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1102,7 +1102,7 @@ Instruction *WidenIV::WidenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
|
|||
IRBuilder<> Builder(WidePhi->getParent()->getFirstInsertionPt());
|
||||
Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType());
|
||||
UsePhi->replaceAllUsesWith(Trunc);
|
||||
DeadInsts.push_back(UsePhi);
|
||||
DeadInsts.emplace_back(UsePhi);
|
||||
DEBUG(dbgs() << "INDVARS: Widen lcssa phi " << *UsePhi
|
||||
<< " to " << *WidePhi << "\n");
|
||||
}
|
||||
|
@ -1135,7 +1135,7 @@ Instruction *WidenIV::WidenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
|
|||
<< " replaced by " << *DU.WideDef << "\n");
|
||||
++NumElimExt;
|
||||
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
|
||||
// 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)) {
|
||||
DEBUG(dbgs() << "Wide use expression mismatch: " << *WideUse
|
||||
<< ": " << *SE->getSCEV(WideUse) << " != " << *WideAddRec << "\n");
|
||||
DeadInsts.push_back(WideUse);
|
||||
DeadInsts.emplace_back(WideUse);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -1285,7 +1285,7 @@ PHINode *WidenIV::CreateWideIV(SCEVExpander &Rewriter) {
|
|||
|
||||
// WidenIVUse may have removed the def-use edge.
|
||||
if (DU.NarrowDef->use_empty())
|
||||
DeadInsts.push_back(DU.NarrowDef);
|
||||
DeadInsts.emplace_back(DU.NarrowDef);
|
||||
}
|
||||
return WidePhi;
|
||||
}
|
||||
|
|
|
@ -811,7 +811,7 @@ DeleteTriviallyDeadInstructions(SmallVectorImpl<WeakVH> &DeadInsts) {
|
|||
if (Instruction *U = dyn_cast<Instruction>(O)) {
|
||||
O = nullptr;
|
||||
if (U->use_empty())
|
||||
DeadInsts.push_back(U);
|
||||
DeadInsts.emplace_back(U);
|
||||
}
|
||||
|
||||
I->eraseFromParent();
|
||||
|
@ -2917,7 +2917,7 @@ void LSRInstance::GenerateIVChain(const IVChain &Chain, SCEVExpander &Rewriter,
|
|||
IVOper = Builder.CreateTruncOrBitCast(IVOper, OperTy, "lsr.chain");
|
||||
}
|
||||
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
|
||||
// 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");
|
||||
}
|
||||
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.
|
||||
if (LU.Kind == LSRUse::ICmpZero) {
|
||||
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 "
|
||||
"a scale at the same time!");
|
||||
if (F.Scale == -1) {
|
||||
|
@ -4737,7 +4737,7 @@ void LSRInstance::Rewrite(const LSRFixup &LF,
|
|||
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,
|
||||
|
|
|
@ -733,7 +733,7 @@ static bool LinearizeExprTree(BinaryOperator *I,
|
|||
if (Ops.empty()) {
|
||||
Constant *Identity = ConstantExpr::getBinOpIdentity(Opcode, I->getType());
|
||||
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;
|
||||
|
|
|
@ -636,7 +636,7 @@ void PromoteMem2Reg::run() {
|
|||
// and inserting the phi nodes we marked as necessary
|
||||
//
|
||||
std::vector<RenamePassData> RenamePassWorkList;
|
||||
RenamePassWorkList.push_back(RenamePassData(F.begin(), nullptr, Values));
|
||||
RenamePassWorkList.emplace_back(F.begin(), nullptr, std::move(Values));
|
||||
do {
|
||||
RenamePassData RPD;
|
||||
RPD.swap(RenamePassWorkList.back());
|
||||
|
@ -973,7 +973,7 @@ NextIteration:
|
|||
|
||||
for (; I != E; ++I)
|
||||
if (VisitedSuccs.insert(*I).second)
|
||||
Worklist.push_back(RenamePassData(*I, Pred, IncomingVals));
|
||||
Worklist.emplace_back(*I, Pred, IncomingVals);
|
||||
|
||||
goto NextIteration;
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ Value *SimplifyIndvar::foldIVUser(Instruction *UseInst, Instruction *IVOperand)
|
|||
++NumElimOperand;
|
||||
Changed = true;
|
||||
if (IVOperand->use_empty())
|
||||
DeadInsts.push_back(IVOperand);
|
||||
DeadInsts.emplace_back(IVOperand);
|
||||
return IVSrc;
|
||||
}
|
||||
|
||||
|
@ -178,7 +178,7 @@ void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand) {
|
|||
DEBUG(dbgs() << "INDVARS: Eliminated comparison: " << *ICmp << '\n');
|
||||
++NumElimCmp;
|
||||
Changed = true;
|
||||
DeadInsts.push_back(ICmp);
|
||||
DeadInsts.emplace_back(ICmp);
|
||||
}
|
||||
|
||||
/// SimplifyIVUsers helper for eliminating useless
|
||||
|
@ -229,7 +229,7 @@ void SimplifyIndvar::eliminateIVRemainder(BinaryOperator *Rem,
|
|||
DEBUG(dbgs() << "INDVARS: Simplified rem: " << *Rem << '\n');
|
||||
++NumElimRem;
|
||||
Changed = true;
|
||||
DeadInsts.push_back(Rem);
|
||||
DeadInsts.emplace_back(Rem);
|
||||
}
|
||||
|
||||
/// Eliminate an operation that consumes a simple IV and has
|
||||
|
@ -260,7 +260,7 @@ bool SimplifyIndvar::eliminateIVUser(Instruction *UseInst,
|
|||
UseInst->replaceAllUsesWith(IVOperand);
|
||||
++NumElimIdentity;
|
||||
Changed = true;
|
||||
DeadInsts.push_back(UseInst);
|
||||
DeadInsts.emplace_back(UseInst);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -386,7 +386,7 @@ Instruction *SimplifyIndvar::splitOverflowIntrinsic(Instruction *IVUser,
|
|||
"Bad add instruction created from overflow intrinsic.");
|
||||
|
||||
AddVal->replaceAllUsesWith(AddInst);
|
||||
DeadInsts.push_back(AddVal);
|
||||
DeadInsts.emplace_back(AddVal);
|
||||
return AddInst;
|
||||
}
|
||||
|
||||
|
|
|
@ -472,7 +472,7 @@ private:
|
|||
|
||||
/// Create a new VectorizableTree entry.
|
||||
TreeEntry *newTreeEntry(ArrayRef<Value *> VL, bool Vectorized) {
|
||||
VectorizableTree.push_back(TreeEntry());
|
||||
VectorizableTree.emplace_back();
|
||||
int idx = VectorizableTree.size() - 1;
|
||||
TreeEntry *Last = &VectorizableTree[idx];
|
||||
Last->Scalars.insert(Last->Scalars.begin(), VL.begin(), VL.end());
|
||||
|
|
|
@ -385,8 +385,7 @@ bool ReduceCrashingBlocks::TestBlocks(std::vector<const BasicBlock*> &BBs) {
|
|||
std::vector<std::pair<std::string, std::string> > BlockInfo;
|
||||
|
||||
for (BasicBlock *BB : Blocks)
|
||||
BlockInfo.push_back(std::make_pair(BB->getParent()->getName(),
|
||||
BB->getName()));
|
||||
BlockInfo.emplace_back(BB->getParent()->getName(), BB->getName());
|
||||
|
||||
// Now run the CFG simplify pass on the function...
|
||||
std::vector<std::string> Passes;
|
||||
|
|
|
@ -386,10 +386,8 @@ static bool ExtractLoops(BugDriver &BD,
|
|||
// that masked the error. Stop loop extraction now.
|
||||
|
||||
std::vector<std::pair<std::string, FunctionType*> > MisCompFunctions;
|
||||
for (unsigned i = 0, e = MiscompiledFunctions.size(); i != e; ++i) {
|
||||
Function *F = MiscompiledFunctions[i];
|
||||
MisCompFunctions.push_back(std::make_pair(F->getName(),
|
||||
F->getFunctionType()));
|
||||
for (Function *F : MiscompiledFunctions) {
|
||||
MisCompFunctions.emplace_back(F->getName(), F->getFunctionType());
|
||||
}
|
||||
|
||||
if (Linker::LinkModules(ToNotOptimize, ToOptimizeLoopExtracted))
|
||||
|
@ -414,8 +412,7 @@ static bool ExtractLoops(BugDriver &BD,
|
|||
for (Module::iterator I = ToOptimizeLoopExtracted->begin(),
|
||||
E = ToOptimizeLoopExtracted->end(); I != E; ++I)
|
||||
if (!I->isDeclaration())
|
||||
MisCompFunctions.push_back(std::make_pair(I->getName(),
|
||||
I->getFunctionType()));
|
||||
MisCompFunctions.emplace_back(I->getName(), I->getFunctionType());
|
||||
|
||||
// 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.
|
||||
|
@ -596,8 +593,7 @@ static bool ExtractBlocks(BugDriver &BD,
|
|||
for (Module::iterator I = Extracted->begin(), E = Extracted->end();
|
||||
I != E; ++I)
|
||||
if (!I->isDeclaration())
|
||||
MisCompFunctions.push_back(std::make_pair(I->getName(),
|
||||
I->getFunctionType()));
|
||||
MisCompFunctions.emplace_back(I->getName(), I->getFunctionType());
|
||||
|
||||
if (Linker::LinkModules(ProgClone, Extracted.get()))
|
||||
exit(1);
|
||||
|
|
|
@ -116,8 +116,7 @@ public:
|
|||
orc::CtorDtorRunner<CODLayerT> CtorRunner(std::move(CtorNames), H);
|
||||
CtorRunner.runViaLayer(CODLayer);
|
||||
|
||||
IRStaticDestructorRunners.push_back(
|
||||
orc::CtorDtorRunner<CODLayerT>(std::move(DtorNames), H));
|
||||
IRStaticDestructorRunners.emplace_back(std::move(DtorNames), H);
|
||||
|
||||
return H;
|
||||
}
|
||||
|
|
|
@ -116,8 +116,7 @@ CodeCoverageTool::getSourceFile(StringRef SourceFile) {
|
|||
error(EC.message(), SourceFile);
|
||||
return EC;
|
||||
}
|
||||
LoadedSourceFiles.push_back(
|
||||
std::make_pair(SourceFile, std::move(Buffer.get())));
|
||||
LoadedSourceFiles.emplace_back(SourceFile, std::move(Buffer.get()));
|
||||
return *LoadedSourceFiles.back().second;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) {
|
||||
List.clear();
|
||||
for (; Begin != End; ++Begin)
|
||||
List.push_back(StringRef(*Begin));
|
||||
List.emplace_back(StringRef(*Begin));
|
||||
}
|
||||
|
||||
raw_ostream &OS;
|
||||
|
|
|
@ -946,10 +946,7 @@ static bool ReadCheckFile(SourceMgr &SM,
|
|||
}
|
||||
|
||||
// Okay, add the string we captured to the output vector and move on.
|
||||
CheckStrings.push_back(CheckString(P,
|
||||
UsedPrefix,
|
||||
PatternLoc,
|
||||
CheckTy));
|
||||
CheckStrings.emplace_back(P, UsedPrefix, PatternLoc, CheckTy);
|
||||
std::swap(DagNotMatches, CheckStrings.back().DagNotStrings);
|
||||
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
|
||||
// prefix as a filler for the error message.
|
||||
if (!DagNotMatches.empty()) {
|
||||
CheckStrings.push_back(CheckString(Pattern(Check::CheckEOF),
|
||||
*CheckPrefixes.begin(),
|
||||
CheckStrings.emplace_back(Pattern(Check::CheckEOF), *CheckPrefixes.begin(),
|
||||
SMLoc::getFromPointer(Buffer.data()),
|
||||
Check::CheckEOF));
|
||||
Check::CheckEOF);
|
||||
std::swap(DagNotMatches, CheckStrings.back().DagNotStrings);
|
||||
}
|
||||
|
||||
|
|
|
@ -1797,7 +1797,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
|||
getEnumNameForToken(AsmMatchConverter));
|
||||
|
||||
// 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(CVT_Done);
|
||||
|
||||
|
@ -2161,8 +2161,7 @@ static void emitMatchTokenString(CodeGenTarget &Target,
|
|||
std::vector<StringMatcher::StringPair> Matches;
|
||||
for (const auto &CI : Infos) {
|
||||
if (CI.Kind == ClassInfo::Token)
|
||||
Matches.push_back(
|
||||
StringMatcher::StringPair(CI.ValueName, "return " + CI.Name + ";"));
|
||||
Matches.emplace_back(CI.ValueName, "return " + CI.Name + ";");
|
||||
}
|
||||
|
||||
OS << "static MatchClassKind matchTokenString(StringRef Name) {\n";
|
||||
|
@ -2184,9 +2183,8 @@ static void emitMatchRegisterName(CodeGenTarget &Target, Record *AsmParser,
|
|||
if (Reg.TheDef->getValueAsString("AsmName").empty())
|
||||
continue;
|
||||
|
||||
Matches.push_back(
|
||||
StringMatcher::StringPair(Reg.TheDef->getValueAsString("AsmName"),
|
||||
"return " + utostr(Reg.EnumValue) + ";"));
|
||||
Matches.emplace_back(Reg.TheDef->getValueAsString("AsmName"),
|
||||
"return " + utostr(Reg.EnumValue) + ";");
|
||||
}
|
||||
|
||||
OS << "static unsigned MatchRegisterName(StringRef Name) {\n";
|
||||
|
|
|
@ -1105,9 +1105,8 @@ AsmWriterEmitter::AsmWriterEmitter(RecordKeeper &R) : Records(R), Target(R) {
|
|||
Record *AsmWriter = Target.getAsmWriter();
|
||||
for (const CodeGenInstruction *I : Target.instructions())
|
||||
if (!I->AsmString.empty() && I->TheDef->getName() != "PHI")
|
||||
Instructions.push_back(
|
||||
AsmWriterInst(*I, AsmWriter->getValueAsInt("Variant"),
|
||||
AsmWriter->getValueAsInt("PassSubtarget")));
|
||||
Instructions.emplace_back(*I, AsmWriter->getValueAsInt("Variant"),
|
||||
AsmWriter->getValueAsInt("PassSubtarget"));
|
||||
|
||||
// Get the instruction numbering.
|
||||
NumberedInstructions = &Target.getInstructionsByEnumValue();
|
||||
|
|
|
@ -163,27 +163,22 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant,
|
|||
|
||||
if (VarName.empty()) {
|
||||
// Just a modifier, pass this into PrintSpecial.
|
||||
Operands.push_back(AsmWriterOperand("PrintSpecial",
|
||||
~0U,
|
||||
~0U,
|
||||
Modifier,
|
||||
PassSubtarget));
|
||||
Operands.emplace_back("PrintSpecial", ~0U, ~0U, Modifier,
|
||||
PassSubtarget);
|
||||
} else {
|
||||
// Otherwise, normal operand.
|
||||
unsigned OpNo = CGI.Operands.getOperandNamed(VarName);
|
||||
CGIOperandList::OperandInfo OpInfo = CGI.Operands[OpNo];
|
||||
|
||||
unsigned MIOp = OpInfo.MIOperandNo;
|
||||
Operands.push_back(AsmWriterOperand(OpInfo.PrinterMethodName,
|
||||
OpNo, MIOp, Modifier,
|
||||
PassSubtarget));
|
||||
Operands.emplace_back(OpInfo.PrinterMethodName, OpNo, MIOp, Modifier,
|
||||
PassSubtarget);
|
||||
}
|
||||
LastEmitted = VarEnd;
|
||||
}
|
||||
}
|
||||
|
||||
Operands.push_back(AsmWriterOperand("return;",
|
||||
AsmWriterOperand::isLiteralStatementOperand));
|
||||
Operands.emplace_back("return;", AsmWriterOperand::isLiteralStatementOperand);
|
||||
}
|
||||
|
||||
/// MatchesAllButOneOp - If this instruction is exactly identical to the
|
||||
|
|
|
@ -3798,13 +3798,11 @@ void CodeGenDAGPatterns::GenerateVariants() {
|
|||
if (AlreadyExists) continue;
|
||||
|
||||
// Otherwise, add it to the list of patterns we have.
|
||||
PatternsToMatch.
|
||||
push_back(PatternToMatch(PatternsToMatch[i].getSrcRecord(),
|
||||
PatternsToMatch[i].getPredicates(),
|
||||
PatternsToMatch.emplace_back(
|
||||
PatternsToMatch[i].getSrcRecord(), PatternsToMatch[i].getPredicates(),
|
||||
Variant, PatternsToMatch[i].getDstPattern(),
|
||||
PatternsToMatch[i].getDstRegs(),
|
||||
PatternsToMatch[i].getAddedComplexity(),
|
||||
Record::getNewUID()));
|
||||
PatternsToMatch[i].getAddedComplexity(), Record::getNewUID());
|
||||
}
|
||||
|
||||
DEBUG(errs() << "\n");
|
||||
|
|
|
@ -115,9 +115,9 @@ CGIOperandList::CGIOperandList(Record *R) : TheDef(R) {
|
|||
PrintFatalError("In instruction '" + R->getName() + "', operand #" +
|
||||
Twine(i) + " has the same name as a previous operand!");
|
||||
|
||||
OperandList.push_back(OperandInfo(Rec, ArgName, PrintMethod, EncoderMethod,
|
||||
OperandNamespace + "::" + OperandType,
|
||||
MIOperandNo, NumOps, MIOpInfo));
|
||||
OperandList.emplace_back(Rec, ArgName, PrintMethod, EncoderMethod,
|
||||
OperandNamespace + "::" + OperandType, MIOperandNo,
|
||||
NumOps, MIOpInfo);
|
||||
MIOperandNo += NumOps;
|
||||
}
|
||||
|
||||
|
@ -642,9 +642,9 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, unsigned Variant,
|
|||
|
||||
// Take care to instantiate each of the suboperands with the correct
|
||||
// nomenclature: $foo.bar
|
||||
ResultOperands.push_back(
|
||||
ResultOperand(Result->getArgName(AliasOpNo) + "." +
|
||||
MIOI->getArgName(SubOp), SubRec));
|
||||
ResultOperands.emplace_back(Result->getArgName(AliasOpNo) + "." +
|
||||
MIOI->getArgName(SubOp),
|
||||
SubRec);
|
||||
ResultInstOperandIndex.push_back(std::make_pair(i, SubOp));
|
||||
}
|
||||
++AliasOpNo;
|
||||
|
|
|
@ -994,7 +994,7 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records) {
|
|||
|
||||
// Allocate user-defined register classes.
|
||||
for (auto *RC : RCs) {
|
||||
RegClasses.push_back(CodeGenRegisterClass(*this, RC));
|
||||
RegClasses.emplace_back(*this, RC);
|
||||
addToMaps(&RegClasses.back());
|
||||
}
|
||||
|
||||
|
@ -1056,7 +1056,7 @@ CodeGenRegBank::getOrCreateSubClass(const CodeGenRegisterClass *RC,
|
|||
return FoundI->second;
|
||||
|
||||
// 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());
|
||||
return &RegClasses.back();
|
||||
}
|
||||
|
|
|
@ -145,8 +145,7 @@ void CodeGenSchedModels::collectProcModels() {
|
|||
// Use idx=0 for NoModel/NoItineraries.
|
||||
Record *NoModelDef = Records.getDef("NoSchedModel");
|
||||
Record *NoItinsDef = Records.getDef("NoItineraries");
|
||||
ProcModels.push_back(CodeGenProcModel(0, "NoSchedModel",
|
||||
NoModelDef, NoItinsDef));
|
||||
ProcModels.emplace_back(0, "NoSchedModel", NoModelDef, NoItinsDef);
|
||||
ProcModelMap[NoModelDef] = 0;
|
||||
|
||||
// For each processor, find a unique machine model.
|
||||
|
@ -164,16 +163,14 @@ void CodeGenSchedModels::addProcModel(Record *ProcDef) {
|
|||
std::string Name = ModelKey->getName();
|
||||
if (ModelKey->isSubClassOf("SchedMachineModel")) {
|
||||
Record *ItinsDef = ModelKey->getValueAsDef("Itineraries");
|
||||
ProcModels.push_back(
|
||||
CodeGenProcModel(ProcModels.size(), Name, ModelKey, ItinsDef));
|
||||
ProcModels.emplace_back(ProcModels.size(), Name, ModelKey, ItinsDef);
|
||||
}
|
||||
else {
|
||||
// An itinerary is defined without a machine model. Infer a new model.
|
||||
if (!ModelKey->getValueAsListOfDefs("IID").empty())
|
||||
Name = Name + "Model";
|
||||
ProcModels.push_back(
|
||||
CodeGenProcModel(ProcModels.size(), Name,
|
||||
ProcDef->getValueAsDef("SchedModel"), ModelKey));
|
||||
ProcModels.emplace_back(ProcModels.size(), Name,
|
||||
ProcDef->getValueAsDef("SchedModel"), ModelKey);
|
||||
}
|
||||
DEBUG(ProcModels.back().dump());
|
||||
}
|
||||
|
@ -281,12 +278,12 @@ void CodeGenSchedModels::collectSchedRW() {
|
|||
std::sort(SWDefs.begin(), SWDefs.end(), LessRecord());
|
||||
for (RecIter SWI = SWDefs.begin(), SWE = SWDefs.end(); SWI != SWE; ++SWI) {
|
||||
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());
|
||||
for (RecIter SRI = SRDefs.begin(), SRE = SRDefs.end(); SRI != SRE; ++SRI) {
|
||||
assert(!getSchedRWIdx(*SRI, /*IsRead-*/true) && "duplicate SchedWrite");
|
||||
SchedReads.push_back(CodeGenSchedRW(SchedReads.size(), *SRI));
|
||||
SchedReads.emplace_back(SchedReads.size(), *SRI);
|
||||
}
|
||||
// Initialize WriteSequence vectors.
|
||||
for (std::vector<CodeGenSchedRW>::iterator WI = SchedWrites.begin(),
|
||||
|
|
|
@ -610,7 +610,7 @@ void Filter::emitTableEntry(DecoderTableInfo &TableInfo) const {
|
|||
TableInfo.Table.push_back(NumBits);
|
||||
|
||||
// A new filter entry begins a new scope for fixup resolution.
|
||||
TableInfo.FixupStack.push_back(FixupList());
|
||||
TableInfo.FixupStack.emplace_back();
|
||||
|
||||
DecoderTable &Table = TableInfo.Table;
|
||||
|
||||
|
@ -1333,7 +1333,7 @@ void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
|
|||
|
||||
// complex singletons need predicate checks from the first singleton
|
||||
// to refer forward to the variable filterchooser that follows.
|
||||
TableInfo.FixupStack.push_back(FixupList());
|
||||
TableInfo.FixupStack.emplace_back();
|
||||
|
||||
emitSingletonTableEntry(TableInfo, Opc);
|
||||
|
||||
|
@ -1350,7 +1350,7 @@ void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
|
|||
void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit,
|
||||
bool mixed) {
|
||||
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.
|
||||
bestFilter().recurse();
|
||||
}
|
||||
|
@ -1360,9 +1360,9 @@ void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit,
|
|||
void FilterChooser::reportRegion(bitAttr_t RA, unsigned StartBit,
|
||||
unsigned BitIndex, bool 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)
|
||||
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
|
||||
|
@ -2179,7 +2179,7 @@ void FixedLenDecoderEmitter::run(raw_ostream &o) {
|
|||
TableInfo.Table.clear();
|
||||
TableInfo.FixupStack.clear();
|
||||
TableInfo.Table.reserve(16384);
|
||||
TableInfo.FixupStack.push_back(FixupList());
|
||||
TableInfo.FixupStack.emplace_back();
|
||||
FC.emitTableEntries(TableInfo);
|
||||
// Any NumToSkip fixups in the top level scope can resolve to the
|
||||
// OPC_Fail at the end of the table.
|
||||
|
|
|
@ -760,7 +760,7 @@ static void EmitTargetBuiltins(const std::map<std::string, std::string> &BIM,
|
|||
E = BIM.end(); I != E; ++I) {
|
||||
std::string ResultCode =
|
||||
"return " + TargetPrefix + "Intrinsic::" + I->second + ";";
|
||||
Results.push_back(StringMatcher::StringPair(I->first, ResultCode));
|
||||
Results.emplace_back(I->first, ResultCode);
|
||||
}
|
||||
|
||||
StringMatcher("BuiltinName", Results, OS).Emit();
|
||||
|
|
Loading…
Reference in New Issue