broadcom/vc5: Re-do live variables after removing thrsws.
[mesa.git] / src / broadcom / compiler / vir_live_variables.c
index 217b716fd9fa8233fd98ec2f7cab5cc9796c0e46..20acace1faf93043474ee3923e77440075c2ec5b 100644 (file)
@@ -311,10 +311,20 @@ vir_calculate_live_intervals(struct v3d_compile *c)
 {
         int bitset_words = BITSET_WORDS(c->num_temps);
 
-        /* If we called this function more than once, then we should be
-         * freeing the previous arrays.
+        /* We may be called more than once if we've rearranged the program to
+         * try to get register allocation to succeed.
          */
-        assert(!c->temp_start);
+        if (c->temp_start) {
+                ralloc_free(c->temp_start);
+                ralloc_free(c->temp_end);
+
+                vir_for_each_block(block, c) {
+                        ralloc_free(block->def);
+                        ralloc_free(block->use);
+                        ralloc_free(block->live_in);
+                        ralloc_free(block->live_out);
+                }
+        }
 
         c->temp_start = rzalloc_array(c, int, c->num_temps);
         c->temp_end = rzalloc_array(c, int, c->num_temps);