Commit 9f4b159b by Shahbaz Youssefi Committed by Commit Bot

Translator: Avoid vector copies with multi-replacement

Turns push_backs into emplace_backs and changes the TIntermSequence constructor argument to &&. Bug: angleproject:5535 Change-Id: I640ce879b6ade48a28dea6385ebb7a95cb8304ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2636680 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent bb766000
...@@ -84,7 +84,7 @@ class DeclareStructTypesTraverser : public TIntermTraverser ...@@ -84,7 +84,7 @@ class DeclareStructTypesTraverser : public TIntermTraverser
// Remove the struct specifier declaration from the tree so it isn't parsed again. // Remove the struct specifier declaration from the tree so it isn't parsed again.
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
emptyReplacement); std::move(emptyReplacement));
} }
} }
...@@ -141,7 +141,7 @@ class DeclareDefaultUniformsTraverser : public TIntermTraverser ...@@ -141,7 +141,7 @@ class DeclareDefaultUniformsTraverser : public TIntermTraverser
// Remove the uniform declaration from the tree so it isn't parsed again. // Remove the uniform declaration from the tree so it isn't parsed again.
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
emptyReplacement); std::move(emptyReplacement));
} }
mInDefaultUniform = false; mInDefaultUniform = false;
......
...@@ -104,8 +104,8 @@ bool PruneEmptyCasesTraverser::visitSwitch(Visit visit, TIntermSwitch *node) ...@@ -104,8 +104,8 @@ bool PruneEmptyCasesTraverser::visitSwitch(Visit visit, TIntermSwitch *node)
{ {
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
ASSERT(getParentNode()->getAsBlock()); ASSERT(getParentNode()->getAsBlock());
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
node, emptyReplacement)); std::move(emptyReplacement));
} }
return false; return false;
} }
......
...@@ -82,8 +82,8 @@ bool PruneNoOpsTraverser::visitDeclaration(Visit, TIntermDeclaration *node) ...@@ -82,8 +82,8 @@ bool PruneNoOpsTraverser::visitDeclaration(Visit, TIntermDeclaration *node)
// float a; // float a;
// This applies also to struct declarations. // This applies also to struct declarations.
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.push_back( mMultiReplacements.emplace_back(node, declaratorSymbol,
NodeReplaceWithMultipleEntry(node, declaratorSymbol, emptyReplacement)); std::move(emptyReplacement));
} }
else if (declaratorSymbol->getBasicType() != EbtStruct) else if (declaratorSymbol->getBasicType() != EbtStruct)
{ {
...@@ -134,8 +134,7 @@ bool PruneNoOpsTraverser::visitBlock(Visit visit, TIntermBlock *node) ...@@ -134,8 +134,7 @@ bool PruneNoOpsTraverser::visitBlock(Visit visit, TIntermBlock *node)
if (IsNoOp(statement)) if (IsNoOp(statement))
{ {
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.push_back( mMultiReplacements.emplace_back(node, statement, std::move(emptyReplacement));
NodeReplaceWithMultipleEntry(node, statement, emptyReplacement));
} }
} }
......
...@@ -28,8 +28,8 @@ class RemoveInvariantDeclarationTraverser : public TIntermTraverser ...@@ -28,8 +28,8 @@ class RemoveInvariantDeclarationTraverser : public TIntermTraverser
if (node->isInvariant()) if (node->isInvariant())
{ {
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
node, emptyReplacement)); std::move(emptyReplacement));
} }
return false; return false;
} }
......
...@@ -216,8 +216,8 @@ void RemoveUnreferencedVariablesTraverser::removeVariableDeclaration(TIntermDecl ...@@ -216,8 +216,8 @@ void RemoveUnreferencedVariablesTraverser::removeVariableDeclaration(TIntermDecl
if (getParentNode()->getAsBlock()) if (getParentNode()->getAsBlock())
{ {
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.push_back( mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), node, emptyReplacement)); std::move(emptyReplacement));
} }
else else
{ {
......
...@@ -62,8 +62,7 @@ bool SeparateDeclarationsTraverser::visitDeclaration(Visit, TIntermDeclaration * ...@@ -62,8 +62,7 @@ bool SeparateDeclarationsTraverser::visitDeclaration(Visit, TIntermDeclaration *
replacementDeclarations.push_back(replacementDeclaration); replacementDeclarations.push_back(replacementDeclaration);
} }
mMultiReplacements.push_back( mMultiReplacements.emplace_back(parentBlock, node, std::move(replacementDeclarations));
NodeReplaceWithMultipleEntry(parentBlock, node, replacementDeclarations));
} }
return false; return false;
} }
......
...@@ -170,8 +170,7 @@ bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TInter ...@@ -170,8 +170,7 @@ bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TInter
// f(s0); // f(s0);
TIntermSymbol *returnValueSymbol = CreateTempSymbolNode(returnValue); TIntermSymbol *returnValueSymbol = CreateTempSymbolNode(returnValue);
replacements.push_back(createReplacementCall(node, returnValueSymbol)); replacements.push_back(createReplacementCall(node, returnValueSymbol));
mMultiReplacements.push_back( mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
} }
return false; return false;
} }
...@@ -201,8 +200,8 @@ bool ArrayReturnValueToOutParameterTraverser::visitBranch(Visit visit, TIntermBr ...@@ -201,8 +200,8 @@ bool ArrayReturnValueToOutParameterTraverser::visitBranch(Visit visit, TIntermBr
replacementBranch->setLine(node->getLine()); replacementBranch->setLine(node->getLine());
replacements.push_back(replacementBranch); replacements.push_back(replacementBranch);
mMultiReplacements.push_back( mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), node, replacements)); std::move(replacements));
} }
return false; return false;
} }
......
...@@ -315,7 +315,7 @@ bool RewriteExpressionsWithShaderStorageBlockTraverser::visitAggregate(Visit vis ...@@ -315,7 +315,7 @@ bool RewriteExpressionsWithShaderStorageBlockTraverser::visitAggregate(Visit vis
{ {
insertions.insert(insertions.end(), readBackToSSBOs.begin(), readBackToSSBOs.end()); insertions.insert(insertions.end(), readBackToSSBOs.begin(), readBackToSSBOs.end());
} }
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentBlock, node, insertions)); mMultiReplacements.emplace_back(parentBlock, node, std::move(insertions));
} }
else else
{ {
......
...@@ -66,8 +66,7 @@ bool SeparateArrayConstructorStatementsTraverser::visitAggregate(Visit visit, ...@@ -66,8 +66,7 @@ bool SeparateArrayConstructorStatementsTraverser::visitAggregate(Visit visit,
TIntermSequence constructorArgs; TIntermSequence constructorArgs;
SplitConstructorArgs(*node->getSequence(), &constructorArgs); SplitConstructorArgs(*node->getSequence(), &constructorArgs);
mMultiReplacements.push_back( mMultiReplacements.emplace_back(parentAsBlock, node, std::move(constructorArgs));
NodeReplaceWithMultipleEntry(parentAsBlock, node, constructorArgs));
return false; return false;
} }
......
...@@ -73,8 +73,7 @@ bool SeparateArrayInitTraverser::visitDeclaration(Visit, TIntermDeclaration *nod ...@@ -73,8 +73,7 @@ bool SeparateArrayInitTraverser::visitDeclaration(Visit, TIntermDeclaration *nod
replacementAssignment->setLine(symbol->getLine()); replacementAssignment->setLine(symbol->getLine());
replacements.push_back(replacementAssignment); replacements.push_back(replacementAssignment);
mMultiReplacements.push_back( mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
} }
} }
return false; return false;
......
...@@ -77,8 +77,8 @@ bool WrapSwitchStatementsInBlocksTraverser::visitSwitch(Visit, TIntermSwitch *no ...@@ -77,8 +77,8 @@ bool WrapSwitchStatementsInBlocksTraverser::visitSwitch(Visit, TIntermSwitch *no
// This is a simple declaration like: "float f;" // This is a simple declaration like: "float f;"
// Remove the declaration from inside the switch and put it in the wrapping block. // Remove the declaration from inside the switch and put it in the wrapping block.
TIntermSequence emptyReplacement; TIntermSequence emptyReplacement;
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry( mMultiReplacements.emplace_back(node->getStatementList(), declaration,
node->getStatementList(), declaration, emptyReplacement)); std::move(emptyReplacement));
declarationInBlock->appendDeclarator(declaratorAsSymbol->deepCopy()); declarationInBlock->appendDeclarator(declaratorAsSymbol->deepCopy());
// The declaration can't be the last statement inside the switch since unused variables // The declaration can't be the last statement inside the switch since unused variables
......
...@@ -80,7 +80,7 @@ bool RewriteAssignToSwizzledTraverser::visitBinary(Visit, TIntermBinary *node) ...@@ -80,7 +80,7 @@ bool RewriteAssignToSwizzledTraverser::visitBinary(Visit, TIntermBinary *node)
TIntermBinary *lastAssign = TIntermBinary *lastAssign =
new TIntermBinary(EOpAssign, node->getLeft(), rightAssignmentTargetCopy); new TIntermBinary(EOpAssign, node->getLeft(), rightAssignmentTargetCopy);
replacements.push_back(lastAssign); replacements.push_back(lastAssign);
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentBlock, node, replacements)); mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
mDidRewrite = true; mDidRewrite = true;
return false; return false;
} }
......
...@@ -633,7 +633,8 @@ class RewriteRowMajorMatricesTraverser : public TIntermTraverser ...@@ -633,7 +633,8 @@ class RewriteRowMajorMatricesTraverser : public TIntermTraverser
// Replace the interface block definition with the new one, prepending any new struct // Replace the interface block definition with the new one, prepending any new struct
// definitions. // definitions.
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, newDeclarations); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(newDeclarations));
} }
bool convertNamelessInterfaceBlockField(TIntermSymbol *symbol) bool convertNamelessInterfaceBlockField(TIntermSymbol *symbol)
......
...@@ -432,7 +432,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser ...@@ -432,7 +432,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser
replacement.push_back(new TIntermFunctionPrototype( replacement.push_back(new TIntermFunctionPrototype(
monomorphizedDefinition->getFunctionPrototype()->getFunction())); monomorphizedDefinition->getFunctionPrototype()->getFunction()));
} }
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, replacement); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(replacement));
} }
bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override
...@@ -461,7 +462,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser ...@@ -461,7 +462,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser
{ {
replacement.push_back(monomorphizedDefinition); replacement.push_back(monomorphizedDefinition);
} }
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, replacement); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(replacement));
return false; return false;
} }
......
...@@ -48,7 +48,8 @@ class RemoveAtomicCounterBuiltinsTraverser : public TIntermTraverser ...@@ -48,7 +48,8 @@ class RemoveAtomicCounterBuiltinsTraverser : public TIntermTraverser
// Vulkan does not support atomic counters, so if this builtin finds its way here, // Vulkan does not support atomic counters, so if this builtin finds its way here,
// we need to remove it. // we need to remove it.
TIntermSequence emptySequence; TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
return true; return true;
} }
......
...@@ -129,7 +129,8 @@ bool RemoveInactiveInterfaceVariablesTraverser::visitDeclaration(Visit visit, ...@@ -129,7 +129,8 @@ bool RemoveInactiveInterfaceVariablesTraverser::visitDeclaration(Visit visit,
if (removeDeclaration) if (removeDeclaration)
{ {
TIntermSequence emptySequence; TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
} }
return false; return false;
......
...@@ -202,7 +202,8 @@ class RewriteAtomicCountersTraverser : public TIntermTraverser ...@@ -202,7 +202,8 @@ class RewriteAtomicCountersTraverser : public TIntermTraverser
{ {
ASSERT(type.getQualifier() == EvqUniform); ASSERT(type.getQualifier() == EvqUniform);
TIntermSequence emptySequence; TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence); mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
return false; return false;
} }
......
...@@ -167,7 +167,7 @@ class TIntermTraverser : angle::NonCopyable ...@@ -167,7 +167,7 @@ class TIntermTraverser : angle::NonCopyable
{ {
NodeReplaceWithMultipleEntry(TIntermAggregateBase *parentIn, NodeReplaceWithMultipleEntry(TIntermAggregateBase *parentIn,
TIntermNode *originalIn, TIntermNode *originalIn,
TIntermSequence replacementsIn) TIntermSequence &&replacementsIn)
: parent(parentIn), original(originalIn), replacements(std::move(replacementsIn)) : parent(parentIn), original(originalIn), replacements(std::move(replacementsIn))
{} {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment