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
// Remove the struct specifier declaration from the tree so it isn't parsed again.
TIntermSequence emptyReplacement;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
emptyReplacement);
std::move(emptyReplacement));
}
}
......@@ -141,7 +141,7 @@ class DeclareDefaultUniformsTraverser : public TIntermTraverser
// Remove the uniform declaration from the tree so it isn't parsed again.
TIntermSequence emptyReplacement;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
emptyReplacement);
std::move(emptyReplacement));
}
mInDefaultUniform = false;
......
......@@ -104,8 +104,8 @@ bool PruneEmptyCasesTraverser::visitSwitch(Visit visit, TIntermSwitch *node)
{
TIntermSequence emptyReplacement;
ASSERT(getParentNode()->getAsBlock());
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(),
node, emptyReplacement));
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptyReplacement));
}
return false;
}
......
......@@ -82,8 +82,8 @@ bool PruneNoOpsTraverser::visitDeclaration(Visit, TIntermDeclaration *node)
// float a;
// This applies also to struct declarations.
TIntermSequence emptyReplacement;
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(node, declaratorSymbol, emptyReplacement));
mMultiReplacements.emplace_back(node, declaratorSymbol,
std::move(emptyReplacement));
}
else if (declaratorSymbol->getBasicType() != EbtStruct)
{
......@@ -134,8 +134,7 @@ bool PruneNoOpsTraverser::visitBlock(Visit visit, TIntermBlock *node)
if (IsNoOp(statement))
{
TIntermSequence emptyReplacement;
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(node, statement, emptyReplacement));
mMultiReplacements.emplace_back(node, statement, std::move(emptyReplacement));
}
}
......
......@@ -28,8 +28,8 @@ class RemoveInvariantDeclarationTraverser : public TIntermTraverser
if (node->isInvariant())
{
TIntermSequence emptyReplacement;
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(),
node, emptyReplacement));
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptyReplacement));
}
return false;
}
......
......@@ -216,8 +216,8 @@ void RemoveUnreferencedVariablesTraverser::removeVariableDeclaration(TIntermDecl
if (getParentNode()->getAsBlock())
{
TIntermSequence emptyReplacement;
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), node, emptyReplacement));
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptyReplacement));
}
else
{
......
......@@ -62,8 +62,7 @@ bool SeparateDeclarationsTraverser::visitDeclaration(Visit, TIntermDeclaration *
replacementDeclarations.push_back(replacementDeclaration);
}
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(parentBlock, node, replacementDeclarations));
mMultiReplacements.emplace_back(parentBlock, node, std::move(replacementDeclarations));
}
return false;
}
......
......@@ -170,8 +170,7 @@ bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TInter
// f(s0);
TIntermSymbol *returnValueSymbol = CreateTempSymbolNode(returnValue);
replacements.push_back(createReplacementCall(node, returnValueSymbol));
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
}
return false;
}
......@@ -201,8 +200,8 @@ bool ArrayReturnValueToOutParameterTraverser::visitBranch(Visit visit, TIntermBr
replacementBranch->setLine(node->getLine());
replacements.push_back(replacementBranch);
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), node, replacements));
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(replacements));
}
return false;
}
......
......@@ -315,7 +315,7 @@ bool RewriteExpressionsWithShaderStorageBlockTraverser::visitAggregate(Visit vis
{
insertions.insert(insertions.end(), readBackToSSBOs.begin(), readBackToSSBOs.end());
}
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentBlock, node, insertions));
mMultiReplacements.emplace_back(parentBlock, node, std::move(insertions));
}
else
{
......
......@@ -66,8 +66,7 @@ bool SeparateArrayConstructorStatementsTraverser::visitAggregate(Visit visit,
TIntermSequence constructorArgs;
SplitConstructorArgs(*node->getSequence(), &constructorArgs);
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(parentAsBlock, node, constructorArgs));
mMultiReplacements.emplace_back(parentAsBlock, node, std::move(constructorArgs));
return false;
}
......
......@@ -73,8 +73,7 @@ bool SeparateArrayInitTraverser::visitDeclaration(Visit, TIntermDeclaration *nod
replacementAssignment->setLine(symbol->getLine());
replacements.push_back(replacementAssignment);
mMultiReplacements.push_back(
NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
}
}
return false;
......
......@@ -77,8 +77,8 @@ bool WrapSwitchStatementsInBlocksTraverser::visitSwitch(Visit, TIntermSwitch *no
// This is a simple declaration like: "float f;"
// Remove the declaration from inside the switch and put it in the wrapping block.
TIntermSequence emptyReplacement;
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(
node->getStatementList(), declaration, emptyReplacement));
mMultiReplacements.emplace_back(node->getStatementList(), declaration,
std::move(emptyReplacement));
declarationInBlock->appendDeclarator(declaratorAsSymbol->deepCopy());
// The declaration can't be the last statement inside the switch since unused variables
......
......@@ -80,7 +80,7 @@ bool RewriteAssignToSwizzledTraverser::visitBinary(Visit, TIntermBinary *node)
TIntermBinary *lastAssign =
new TIntermBinary(EOpAssign, node->getLeft(), rightAssignmentTargetCopy);
replacements.push_back(lastAssign);
mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
mMultiReplacements.emplace_back(parentBlock, node, std::move(replacements));
mDidRewrite = true;
return false;
}
......
......@@ -633,7 +633,8 @@ class RewriteRowMajorMatricesTraverser : public TIntermTraverser
// Replace the interface block definition with the new one, prepending any new struct
// definitions.
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, newDeclarations);
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(newDeclarations));
}
bool convertNamelessInterfaceBlockField(TIntermSymbol *symbol)
......
......@@ -432,7 +432,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser
replacement.push_back(new TIntermFunctionPrototype(
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
......@@ -461,7 +462,8 @@ class UpdateFunctionsDefinitionsTraverser final : public TIntermTraverser
{
replacement.push_back(monomorphizedDefinition);
}
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, replacement);
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(replacement));
return false;
}
......
......@@ -48,7 +48,8 @@ class RemoveAtomicCounterBuiltinsTraverser : public TIntermTraverser
// Vulkan does not support atomic counters, so if this builtin finds its way here,
// we need to remove it.
TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence);
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
return true;
}
......
......@@ -129,7 +129,8 @@ bool RemoveInactiveInterfaceVariablesTraverser::visitDeclaration(Visit visit,
if (removeDeclaration)
{
TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence);
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
}
return false;
......
......@@ -202,7 +202,8 @@ class RewriteAtomicCountersTraverser : public TIntermTraverser
{
ASSERT(type.getQualifier() == EvqUniform);
TIntermSequence emptySequence;
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node, emptySequence);
mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
std::move(emptySequence));
return false;
}
......
......@@ -167,7 +167,7 @@ class TIntermTraverser : angle::NonCopyable
{
NodeReplaceWithMultipleEntry(TIntermAggregateBase *parentIn,
TIntermNode *originalIn,
TIntermSequence replacementsIn)
TIntermSequence &&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