summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir_variable_refcount.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/glsl/ir_variable_refcount.cpp')
-rw-r--r--src/glsl/ir_variable_refcount.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/glsl/ir_variable_refcount.cpp b/src/glsl/ir_variable_refcount.cpp
index 923eb1a8274..425ed812dc3 100644
--- a/src/glsl/ir_variable_refcount.cpp
+++ b/src/glsl/ir_variable_refcount.cpp
@@ -132,3 +132,24 @@ ir_variable_refcount_visitor::visit_leave(ir_assignment *ir)
return visit_continue;
}
+
+
+ir_visitor_status
+ir_variable_refcount_visitor::visit_leave(ir_loop *ir)
+{
+ /* If the loop has a counter variable, it is implicitly referenced and
+ * assigned to. Note that since the LHS of an assignment is counted as a
+ * reference, we actually have to increment referenced_count by 2 so that
+ * later code will know that the variable isn't just assigned to.
+ */
+ if (ir->counter != NULL) {
+ ir_variable_refcount_entry *entry =
+ this->get_variable_entry(ir->counter);
+ if (entry) {
+ entry->referenced_count += 2;
+ entry->assigned_count++;
+ }
+ }
+
+ return visit_continue;
+}