glsl: Optimize -(-expr) into expr.
[mesa.git] / src / glsl / loop_analysis.cpp
index 6a0e4da51004cd1c67547f631f3e770c7204bbc5..b08241af52706be9bffd9d2181147416ef74c7eb 100644 (file)
@@ -102,10 +102,11 @@ loop_variable_state::insert(ir_if *if_stmt)
    return t;
 }
 
+namespace {
 
 class loop_analysis : public ir_hierarchical_visitor {
 public:
-   loop_analysis();
+   loop_analysis(loop_state *loops);
 
    virtual ir_visitor_status visit(ir_loop_jump *);
    virtual ir_visitor_status visit(ir_dereference_variable *);
@@ -128,13 +129,12 @@ public:
    exec_list state;
 };
 
+} /* anonymous namespace */
 
-loop_analysis::loop_analysis()
+loop_analysis::loop_analysis(loop_state *loops)
+   : loops(loops), if_statement_depth(0), current_assignment(NULL)
 {
-   this->loops = new loop_state;
-
-   this->if_statement_depth = 0;
-   this->current_assignment = NULL;
+   /* empty */
 }
 
 
@@ -505,7 +505,8 @@ is_loop_terminator(ir_if *ir)
 
    ir_instruction *const inst =
       (ir_instruction *) ir->then_instructions.get_head();
-   assert(inst != NULL);
+   if (inst == NULL)
+      return false;
 
    if (inst->ir_type != ir_type_loop_jump)
       return false;
@@ -521,7 +522,8 @@ is_loop_terminator(ir_if *ir)
 loop_state *
 analyze_loop_variables(exec_list *instructions)
 {
-   loop_analysis v;
+   loop_state *loops = new loop_state;
+   loop_analysis v(loops);
 
    v.run(instructions);
    return v.loops;