glsl: fix the type of ir_constant_data::u16
[mesa.git] / src / compiler / glsl / ir_hierarchical_visitor.cpp
index 1d23a776643dc12dbd60bb9c4cc3661a44c54657..9c126044eb37423babcf82d81e42734dcbf716df 100644 (file)
@@ -37,8 +37,7 @@ ir_hierarchical_visitor::ir_hierarchical_visitor()
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_rvalue *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -46,8 +45,7 @@ ir_hierarchical_visitor::visit(ir_rvalue *ir)
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_variable *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -55,8 +53,7 @@ ir_hierarchical_visitor::visit(ir_variable *ir)
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_constant *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -64,8 +61,7 @@ ir_hierarchical_visitor::visit(ir_constant *ir)
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_loop_jump *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -73,8 +69,7 @@ ir_hierarchical_visitor::visit(ir_loop_jump *ir)
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_dereference_variable *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -82,8 +77,7 @@ ir_hierarchical_visitor::visit(ir_dereference_variable *ir)
 ir_visitor_status
 ir_hierarchical_visitor::visit(ir_barrier *ir)
 {
-   if (this->callback_enter != NULL)
-      this->callback_enter(ir, this->data_enter);
+   call_enter_leave_callbacks(ir);
 
    return visit_continue;
 }
@@ -304,6 +298,24 @@ ir_hierarchical_visitor::visit_leave(ir_discard *ir)
    return visit_continue;
 }
 
+ir_visitor_status
+ir_hierarchical_visitor::visit_enter(ir_demote *ir)
+{
+   if (this->callback_enter != NULL)
+      this->callback_enter(ir, this->data_enter);
+
+   return visit_continue;
+}
+
+ir_visitor_status
+ir_hierarchical_visitor::visit_leave(ir_demote *ir)
+{
+   if (this->callback_leave != NULL)
+      this->callback_leave(ir, this->data_leave);
+
+   return visit_continue;
+}
+
 ir_visitor_status
 ir_hierarchical_visitor::visit_enter(ir_if *ir)
 {
@@ -364,6 +376,14 @@ ir_hierarchical_visitor::run(exec_list *instructions)
    visit_list_elements(this, instructions);
 }
 
+void
+ir_hierarchical_visitor::call_enter_leave_callbacks(class ir_instruction *ir)
+{
+   if (this->callback_enter != NULL)
+      this->callback_enter(ir, this->data_enter);
+   if (this->callback_leave != NULL)
+      this->callback_leave(ir, this->data_leave);
+}
 
 void
 visit_tree(ir_instruction *ir,