i965/fs: When doing no work for live interval calculation, do no allocation.
authorEric Anholt <eric@anholt.net>
Tue, 8 May 2012 20:40:44 +0000 (13:40 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 14 May 2012 23:51:00 +0000 (16:51 -0700)
When I had a bug causing the backend to never finish optimizing, it
also sent me deep into swap.  This avoids extra memory allocation per
trip through optimization, and thus may reduce the peak memory
allocation of the driver even in the success case.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp

index c6f0fbc009f014e5ddfb42d36662a403897b88c3..c7ee582c283f92ffb128f59890291ecd31e64ec4 100644 (file)
@@ -163,12 +163,17 @@ void
 fs_visitor::calculate_live_intervals()
 {
    int num_vars = this->virtual_grf_next;
-   int *def = ralloc_array(mem_ctx, int, num_vars);
-   int *use = ralloc_array(mem_ctx, int, num_vars);
 
    if (this->live_intervals_valid)
       return;
 
+   int *def = ralloc_array(mem_ctx, int, num_vars);
+   int *use = ralloc_array(mem_ctx, int, num_vars);
+   ralloc_free(this->virtual_grf_def);
+   ralloc_free(this->virtual_grf_use);
+   this->virtual_grf_def = def;
+   this->virtual_grf_use = use;
+
    for (int i = 0; i < num_vars; i++) {
       def[i] = MAX_INSTRUCTION;
       use[i] = -1;
@@ -215,11 +220,6 @@ fs_visitor::calculate_live_intervals()
       }
    }
 
-   ralloc_free(this->virtual_grf_def);
-   ralloc_free(this->virtual_grf_use);
-   this->virtual_grf_def = def;
-   this->virtual_grf_use = use;
-
    this->live_intervals_valid = true;
 }