summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-02-28 13:13:16 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2014-02-28 13:14:15 +0100
commit846cc4c75cc06def67e831c8cb3c9edaef24f8f0 (patch)
treecf8cd76a5a610a6264583148b2c0549f7514dde3 /src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h
parent9e4a215a2569a04010292c8718d0f0569bc06c12 (diff)
parent0d0fb04d505d105fb4b2fc71d68f729ce670b12e (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: src/network/access/qhttpthreaddelegate.cpp Change-Id: Ia15372687c93cd585967b006c0baaac3a5f29e91
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h')
-rw-r--r--src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h b/src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h
new file mode 100644
index 0000000000..afd70d1fd2
--- /dev/null
+++ b/src/3rdparty/angle/src/compiler/translator/ForLoopUnroll.h
@@ -0,0 +1,52 @@
+//
+// Copyright (c) 2011 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_FORLOOPUNROLL_H_
+#define COMPILER_FORLOOPUNROLL_H_
+
+#include "compiler/translator/intermediate.h"
+
+struct TLoopIndexInfo {
+ int id;
+ int initValue;
+ int stopValue;
+ int incrementValue;
+ TOperator op;
+ int currentValue;
+};
+
+class ForLoopUnroll {
+public:
+ ForLoopUnroll() { }
+
+ void FillLoopIndexInfo(TIntermLoop* node, TLoopIndexInfo& info);
+
+ // Update the info.currentValue for the next loop iteration.
+ void Step();
+
+ // Return false if loop condition is no longer satisfied.
+ bool SatisfiesLoopCondition();
+
+ // Check if the symbol is the index of a loop that's unrolled.
+ bool NeedsToReplaceSymbolWithValue(TIntermSymbol* symbol);
+
+ // Return the current value of a given loop index symbol.
+ int GetLoopIndexValue(TIntermSymbol* symbol);
+
+ void Push(TLoopIndexInfo& info);
+ void Pop();
+
+ static void MarkForLoopsWithIntegerIndicesForUnrolling(TIntermNode* root);
+
+private:
+ int getLoopIncrement(TIntermLoop* node);
+
+ int evaluateIntConstant(TIntermConstantUnion* node);
+
+ TVector<TLoopIndexInfo> mLoopIndexStack;
+};
+
+#endif