Disable optimizations for shaders with conditional discard in D3D9, and
only use expanded short-circuiting conditionals for expressions with
potential side-effects.

Conservatively assume aggreate and selection operators have side effects for now.

BUG=
ANGLEBUG=486
R=geofflang@chromium.org, kbr@chromium.org, nicolas@transgaming.com, shannonwoods@chromium.org

Review URL: https://codereview.appspot.com/14441075

Conflicts:
	src/common/version.h
	src/compiler/translator.vcxproj
	src/compiler/translator.vcxproj.filters
	src/compiler/translator/OutputHLSL.cpp
	src/libGLESv2/ProgramBinary.cpp
	src/libGLESv2/Shader.cpp
	src/libGLESv2/Shader.h

Change-Id: Iaf9f10b5de7b33c927ef032f3c4fe9d5095f64dd
diff --git a/src/compiler/translator/ValidateLimitations.cpp b/src/compiler/translator/ValidateLimitations.cpp
index 94d3994..f06a96f 100644
--- a/src/compiler/translator/ValidateLimitations.cpp
+++ b/src/compiler/translator/ValidateLimitations.cpp
@@ -461,7 +461,7 @@
 bool ValidateLimitations::validateOperation(TIntermOperator* node,
                                             TIntermNode* operand) {
     // Check if loop index is modified in the loop body.
-    if (!withinLoopBody() || !node->modifiesState())
+    if (!withinLoopBody() || !node->hasSideEffects())
         return true;
 
     const TIntermSymbol* symbol = operand->getAsSymbolNode();