glsl2: Refactor testing for whether a deref is of a matrix or array
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 16 Sep 2010 10:12:22 +0000 (12:12 +0200)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 17 Sep 2010 09:00:24 +0000 (11:00 +0200)
src/glsl/lower_variable_index_to_cond_assign.cpp

index d9e6379c3907af8955ebfc62328f0f1bf2ed40e8..095592b9f7f085206f073ccf20d58394e05ad3a2 100644 (file)
@@ -217,16 +217,19 @@ public:
 
    bool progress;
 
+   bool is_array_or_matrix(const ir_instruction *ir) const
+   {
+      return (ir->type->is_array() || ir->type->is_matrix());
+   }
+
    ir_variable *convert_dereference_array(ir_dereference_array *orig_deref,
                                          ir_rvalue* value)
    {
-      unsigned length;
-      if (orig_deref->array->type->is_array())
-         length = orig_deref->array->type->length;
-      else if (orig_deref->array->type->is_matrix())
-         length = orig_deref->array->type->matrix_columns;
-      else
-         assert(0);
+      assert(is_array_or_matrix(orig_deref->array));
+
+      const unsigned length = (orig_deref->array->type->is_array())
+         ? orig_deref->array->type->length
+         : orig_deref->array->type->matrix_columns;
 
       void *const mem_ctx = talloc_parent(base_ir);
       ir_variable *var =
@@ -274,8 +277,7 @@ public:
 
       ir_dereference_array* orig_deref = (*pir)->as_dereference_array();
       if (orig_deref && !orig_deref->array_index->as_constant()
-            && (orig_deref->array->type->is_array()
-               || orig_deref->array->type->is_matrix())) {
+         && is_array_or_matrix(orig_deref->array)) {
          ir_variable* var = convert_dereference_array(orig_deref, 0);
          assert(var);
          *pir = new(talloc_parent(base_ir)) ir_dereference_variable(var);
@@ -291,8 +293,7 @@ public:
       ir_dereference_array *orig_deref = ir->lhs->as_dereference_array();
 
       if (orig_deref && !orig_deref->array_index->as_constant()
-            && (orig_deref->array->type->is_array()
-               || orig_deref->array->type->is_matrix())) {
+         && is_array_or_matrix(orig_deref->array)) {
          convert_dereference_array(orig_deref, ir->rhs);
          ir->remove();
          this->progress = true;