]> de.git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
Actually generate the vector member ir_values in ir_function_finalize, since ir_build...
authorWolfgang Bumiller <blub@speed.at>
Tue, 25 Dec 2012 22:51:29 +0000 (23:51 +0100)
committerWolfgang Bumiller <blub@speed.at>
Tue, 25 Dec 2012 22:51:29 +0000 (23:51 +0100)
ir.c

diff --git a/ir.c b/ir.c
index 0189c2e50ad259ec737086a41d1454faa0300a68..6f9e488152da330a23ad83e3408ae51247c5369f 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -736,6 +736,8 @@ bool ir_function_pass_tailrecursion(ir_function *self)
 
 bool ir_function_finalize(ir_function *self)
 {
+    size_t i;
+
     if (self->builtin)
         return true;
 
@@ -756,6 +758,27 @@ bool ir_function_finalize(ir_function *self)
     if (!ir_function_naive_phi(self))
         return false;
 
+    for (i = 0; i < vec_size(self->locals); ++i) {
+        ir_value *v = self->locals[i];
+        if (v->vtype == TYPE_VECTOR ||
+            (v->vtype == TYPE_FIELD && v->outtype == TYPE_VECTOR))
+        {
+            ir_value_vector_member(v, 0);
+            ir_value_vector_member(v, 1);
+            ir_value_vector_member(v, 2);
+        }
+    }
+    for (i = 0; i < vec_size(self->values); ++i) {
+        ir_value *v = self->values[i];
+        if (v->vtype == TYPE_VECTOR ||
+            (v->vtype == TYPE_FIELD && v->outtype == TYPE_VECTOR))
+        {
+            ir_value_vector_member(v, 0);
+            ir_value_vector_member(v, 1);
+            ir_value_vector_member(v, 2);
+        }
+    }
+
     ir_function_enumerate(self);
 
     if (!ir_function_calculate_liferanges(self))
@@ -3301,12 +3324,8 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
     case TYPE_FIELD:
         if (pushdef) {
             vec_push(code_defs, def);
-            if (global->fieldtype == TYPE_VECTOR) {
+            if (global->fieldtype == TYPE_VECTOR)
                 gen_vector_defs(def, global->name);
-                ir_value_vector_member(global, 0);
-                ir_value_vector_member(global, 1);
-                ir_value_vector_member(global, 2);
-            }
         }
         return gen_global_field(global);
     case TYPE_ENTITY:
@@ -3342,9 +3361,6 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
     case TYPE_VECTOR:
     {
         size_t d;
-        ir_value_vector_member(global, 0);
-        ir_value_vector_member(global, 1);
-        ir_value_vector_member(global, 2);
         ir_value_code_setaddr(global, vec_size(code_globals));
         if (global->hasvalue) {
             iptr = (int32_t*)&global->constval.ivec[0];