mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +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:
@@ -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
|
||||
|
Reference in New Issue
Block a user