{
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);