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)
commitf5e2fc474db076f35e8badb239661cbf283d5003
tree21e3a8e7fb1fd4be46a5f3b0f8796988ea04e3a2
parent3204b152b53e539304f9da2aff100876aeefa856
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
42 files changed:
llvm/include/llvm/Analysis/CallGraph.h
llvm/include/llvm/Bitcode/BitstreamReader.h
llvm/include/llvm/Bitcode/BitstreamWriter.h
llvm/include/llvm/CodeGen/GCMetadata.h
llvm/include/llvm/CodeGen/ScheduleDAGInstrs.h
llvm/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
llvm/lib/Analysis/AliasSetTracker.cpp
llvm/lib/Analysis/ScalarEvolutionExpander.cpp
llvm/lib/AsmParser/LLParser.cpp
llvm/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/lib/CodeGen/MachineModuleInfo.cpp
llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/DebugInfo/DWARF/DWARFContext.cpp
llvm/lib/ExecutionEngine/ExecutionEngine.cpp
llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp
llvm/lib/ExecutionEngine/Interpreter/Execution.cpp
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/lib/TableGen/TGParser.cpp
llvm/lib/Transforms/IPO/MergeFunctions.cpp
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
llvm/lib/Transforms/Scalar/Reassociate.cpp
llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
llvm/lib/Transforms/Utils/SimplifyIndVar.cpp
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/tools/bugpoint/CrashDebugger.cpp
llvm/tools/bugpoint/Miscompilation.cpp
llvm/tools/lli/OrcLazyJIT.h
llvm/tools/llvm-cov/CodeCoverage.cpp
llvm/tools/llvm-pdbdump/LinePrinter.h
llvm/utils/FileCheck/FileCheck.cpp
llvm/utils/TableGen/AsmMatcherEmitter.cpp
llvm/utils/TableGen/AsmWriterEmitter.cpp
llvm/utils/TableGen/AsmWriterInst.cpp
llvm/utils/TableGen/CodeGenDAGPatterns.cpp
llvm/utils/TableGen/CodeGenInstruction.cpp
llvm/utils/TableGen/CodeGenRegisters.cpp
llvm/utils/TableGen/CodeGenSchedule.cpp
llvm/utils/TableGen/FixedLenDecoderEmitter.cpp
llvm/utils/TableGen/IntrinsicEmitter.cpp