Mesa (glsl2): glsl2: Fix the dereferences_variable check in ir_tree_grafting.

Eric Anholt anholt at kemper.freedesktop.org
Thu Aug 5 19:59:55 UTC 2010


Module: Mesa
Branch: glsl2
Commit: c314c8f2310fa0ac51b8953e139f9504e08eb48f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c314c8f2310fa0ac51b8953e139f9504e08eb48f

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Aug  5 12:52:29 2010 -0700

glsl2: Fix the dereferences_variable check in ir_tree_grafting.

The HV doesn't descend into ir_variable, which is generally a good
thing (allowing one to distinguish between variable declarations and
refs), but here we never saw tree grafting opportunities killed
because we were looking for the ir_variable child of a dereference to
get visited.

Fixes:
glsl1-function call with inout params

---

 src/glsl/ir_tree_grafting.cpp |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ir_tree_grafting.cpp b/src/glsl/ir_tree_grafting.cpp
index 1a742f4..e80db31 100644
--- a/src/glsl/ir_tree_grafting.cpp
+++ b/src/glsl/ir_tree_grafting.cpp
@@ -92,8 +92,9 @@ void
 dereferences_variable_callback(ir_instruction *ir, void *data)
 {
    struct find_deref_info *info = (struct find_deref_info *)data;
+   ir_dereference_variable *deref = ir->as_dereference_variable();
 
-   if (ir == info->var)
+   if (deref && deref->var == info->var)
       info->found = true;
 }
 
@@ -123,7 +124,7 @@ ir_tree_grafting_visitor::do_graft(ir_rvalue **rvalue)
 
    if (debug) {
       printf("GRAFTING:\n");
-      this->graft_assign->rhs->print();
+      this->graft_assign->print();
       printf("\n");
       printf("TO:\n");
       (*rvalue)->print();




More information about the mesa-commit mailing list