Add an ir_if simplification pass.
[mesa.git] / ir_function_inlining.cpp
index b6434b80544cad32aa599e5f9095279c275bda1e..e03673e632df4eca9d0a2661fd7d558e5d00a3b7 100644 (file)
@@ -200,8 +200,21 @@ ir_function_cloning_visitor::visit(ir_dereference *ir)
 
         this->result = new ir_dereference(this->result);
       }
+   } else if (ir->mode == ir_dereference::ir_reference_array) {
+      ir_instruction *variable;
+      ir_rvalue *index;
+
+      ir->var->accept(this);
+      variable = this->result;
+
+      ir->selector.array_index->accept(this);
+      index = this->result->as_rvalue();
+
+      this->result = new ir_dereference(variable, index);
    } else {
-      this->result = NULL;
+      assert(ir->mode == ir_dereference::ir_reference_record);
+      /* FINISHME: inlining of structure references */
+      assert(0);
    }
 }
 
@@ -294,7 +307,7 @@ can_inline(ir_call *call)
 bool
 do_function_inlining(exec_list *instructions)
 {
-   bool progress;
+   bool progress = false;
 
    foreach_iter(exec_list_iterator, iter, *instructions) {
       ir_instruction *ir = (ir_instruction *)iter.get();