mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-06-10 15:29:52 +00:00
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:
parent
071c3df378
commit
9589ff8949
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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)),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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?");
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user