Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 May 2015 19:43:39 +0000 (19:43 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 May 2015 19:43:39 +0000 (19:43 +0000)
commit9589ff8949271fe1f1e832040decbcd881b7ccf6
tree99c97bbad680133fc876b737b4507e2f9a178fb6
parent071c3df3781138b275677b5e1f7dfe07760c6ca2
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
42 files changed:
include/llvm/Analysis/CallGraph.h
include/llvm/Bitcode/BitstreamReader.h
include/llvm/Bitcode/BitstreamWriter.h
include/llvm/CodeGen/GCMetadata.h
include/llvm/CodeGen/ScheduleDAGInstrs.h
include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
lib/Analysis/AliasSetTracker.cpp
lib/Analysis/ScalarEvolutionExpander.cpp
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/CodeGen/MachineModuleInfo.cpp
lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/DebugInfo/DWARF/DWARFContext.cpp
lib/ExecutionEngine/ExecutionEngine.cpp
lib/ExecutionEngine/ExecutionEngineBindings.cpp
lib/ExecutionEngine/Interpreter/Execution.cpp
lib/MC/MCParser/AsmParser.cpp
lib/TableGen/TGParser.cpp
lib/Transforms/IPO/MergeFunctions.cpp
lib/Transforms/InstCombine/InstructionCombining.cpp
lib/Transforms/Scalar/IndVarSimplify.cpp
lib/Transforms/Scalar/LoopStrengthReduce.cpp
lib/Transforms/Scalar/Reassociate.cpp
lib/Transforms/Utils/PromoteMemoryToRegister.cpp
lib/Transforms/Utils/SimplifyIndVar.cpp
lib/Transforms/Vectorize/SLPVectorizer.cpp
tools/bugpoint/CrashDebugger.cpp
tools/bugpoint/Miscompilation.cpp
tools/lli/OrcLazyJIT.h
tools/llvm-cov/CodeCoverage.cpp
tools/llvm-pdbdump/LinePrinter.h
utils/FileCheck/FileCheck.cpp
utils/TableGen/AsmMatcherEmitter.cpp
utils/TableGen/AsmWriterEmitter.cpp
utils/TableGen/AsmWriterInst.cpp
utils/TableGen/CodeGenDAGPatterns.cpp
utils/TableGen/CodeGenInstruction.cpp
utils/TableGen/CodeGenRegisters.cpp
utils/TableGen/CodeGenSchedule.cpp
utils/TableGen/FixedLenDecoderEmitter.cpp
utils/TableGen/IntrinsicEmitter.cpp