glsl/build: Build libglcpp and libglslcore in builtin_compiler
[mesa.git] / src / glsl / opt_tree_grafting.cpp
index e2aff5f8071e721f1be9352161364cac36d963ae..25b18ea940c98246a15f84e9037f5561b940c71f 100644 (file)
@@ -54,6 +54,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 static bool debug = false;
 
 class ir_tree_grafting_visitor : public ir_hierarchical_visitor {
@@ -202,7 +204,7 @@ ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir)
 ir_visitor_status
 ir_tree_grafting_visitor::visit_enter(ir_call *ir)
 {
-   exec_list_iterator sig_iter = ir->get_callee()->parameters.iterator();
+   exec_list_iterator sig_iter = ir->callee->parameters.iterator();
    /* Reminder: iterating ir_call iterates its parameters. */
    foreach_iter(exec_list_iterator, iter, *ir) {
       ir_variable *sig_param = (ir_variable *)sig_iter.get();
@@ -222,6 +224,9 @@ ir_tree_grafting_visitor::visit_enter(ir_call *ir)
       sig_iter.next();
    }
 
+   if (ir->return_deref && check_graft(ir, ir->return_deref->var) == visit_stop)
+      return visit_stop;
+
    return visit_continue;
 }
 
@@ -366,6 +371,8 @@ tree_grafting_basic_block(ir_instruction *bb_first,
    }
 }
 
+} /* unnamed namespace */
+
 /**
  * Does a copy propagation pass on the code present in the instruction stream.
  */