Constant-qualify nodes in a consistent way
Rely on that constant qualification of binary and unary nodes comes
from promote().
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: Ie8d1d4df3c82ae5a2de8cc536e47016d13a4fd3d
Reviewed-on: https://chromium-review.googlesource.com/377960
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/IntermNode.cpp b/src/compiler/translator/IntermNode.cpp
index 7588fbe..195f807 100644
--- a/src/compiler/translator/IntermNode.cpp
+++ b/src/compiler/translator/IntermNode.cpp
@@ -722,7 +722,7 @@
case EOpGreaterThan:
case EOpLessThanEqual:
case EOpGreaterThanEqual:
- setType(TType(EbtBool, EbpUndefined));
+ setType(TType(EbtBool, EbpUndefined, resultQualifier));
break;
//
@@ -732,7 +732,7 @@
case EOpLogicalXor:
case EOpLogicalOr:
ASSERT(mLeft->getBasicType() == EbtBool && mRight->getBasicType() == EbtBool);
- setType(TType(EbtBool, EbpUndefined));
+ setType(TType(EbtBool, EbpUndefined, resultQualifier));
break;
default:
@@ -849,12 +849,7 @@
TConstantUnion *constArray = leftConstant->foldBinary(mOp, rightConstant, diagnostics);
// Nodes may be constant folded without being qualified as constant.
- TQualifier resultQualifier = EvqConst;
- if (mLeft->getQualifier() != EvqConst || mRight->getQualifier() != EvqConst)
- {
- resultQualifier = EvqTemporary;
- }
- return CreateFoldedNode(constArray, this, resultQualifier);
+ return CreateFoldedNode(constArray, this, mType.getQualifier());
}
TIntermTyped *TIntermUnary::fold(TDiagnostics *diagnostics)
@@ -888,8 +883,7 @@
}
// Nodes may be constant folded without being qualified as constant.
- TQualifier resultQualifier = mOperand->getQualifier() == EvqConst ? EvqConst : EvqTemporary;
- return CreateFoldedNode(constArray, this, resultQualifier);
+ return CreateFoldedNode(constArray, this, mType.getQualifier());
}
TIntermTyped *TIntermAggregate::fold(TDiagnostics *diagnostics)