Commit fa41aa08 by Nicolas Capens

Perform short-circuit unfolding on separate declarations.

BUG=415694 Change-Id: I812abb21d2ab4af0b63631a23026d5860df61672 Reviewed-on: https://chromium-review.googlesource.com/221945Tested-by: 's avatarNicolas Capens <capn@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent d974db43
...@@ -1862,6 +1862,11 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node) ...@@ -1862,6 +1862,11 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
{ {
for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); sit++) for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); sit++)
{ {
if (isSingleStatement(*sit))
{
mUnfoldShortCircuit->traverse(*sit);
}
if (!mInsideFunction) if (!mInsideFunction)
{ {
out << "static "; out << "static ";
...@@ -2503,6 +2508,12 @@ bool OutputHLSL::isSingleStatement(TIntermNode *node) ...@@ -2503,6 +2508,12 @@ bool OutputHLSL::isSingleStatement(TIntermNode *node)
{ {
return false; return false;
} }
else if (aggregate->getOp() == EOpDeclaration)
{
// Declaring multiple comma-separated variables must be considered multiple statements
// because each individual declaration has side effects which are visible in the next.
return false;
}
else else
{ {
for (TIntermSequence::iterator sit = aggregate->getSequence()->begin(); sit != aggregate->getSequence()->end(); sit++) for (TIntermSequence::iterator sit = aggregate->getSequence()->begin(); sit != aggregate->getSequence()->end(); sit++)
......
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