i965/vec4: Make live_intervals part of the vec4_visitor class.
authorMatt Turner <mattst88@gmail.com>
Wed, 29 Oct 2014 20:27:37 +0000 (13:27 -0700)
committerMatt Turner <mattst88@gmail.com>
Tue, 2 Dec 2014 00:42:13 +0000 (16:42 -0800)
Like in fs_visitor.

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

index abdab993be9bb356f0452f8e305691b4a9e0045a..6924775314a871e86b3f04563de7170ea2dd5604 100644 (file)
@@ -87,6 +87,8 @@ namespace brw {
 
 class dst_reg;
 
+class vec4_live_variables;
+
 unsigned
 swizzle_for_size(int size);
 
@@ -301,6 +303,7 @@ public:
    unsigned int max_grf;
    int *virtual_grf_start;
    int *virtual_grf_end;
+   brw::vec4_live_variables *live_intervals;
    dst_reg userplane[MAX_CLIP_PLANES];
 
    /**
@@ -311,8 +314,6 @@ public:
    /** Per-virtual-grf indices into an array of size virtual_grf_reg_count */
    int *virtual_grf_reg_map;
 
-   bool live_intervals_valid;
-
    dst_reg *variable_storage(ir_variable *var);
 
    void reladdr_to_temp(ir_instruction *ir, src_reg *reg, int *num_reladdr);
index 80b912a343bcee530f073107936a8bbf77d57a67..44eed1ca6588326b9061586e2f841e0081d330f5 100644 (file)
@@ -195,7 +195,7 @@ vec4_live_variables::~vec4_live_variables()
 void
 vec4_visitor::calculate_live_intervals()
 {
-   if (this->live_intervals_valid)
+   if (this->live_intervals)
       return;
 
    int *start = ralloc_array(mem_ctx, int, this->virtual_grf_count * 4);
@@ -247,29 +247,28 @@ vec4_visitor::calculate_live_intervals()
     * The control flow-aware analysis was done at a channel level, while at
     * this point we're distilling it down to vgrfs.
     */
-   vec4_live_variables livevars(this, cfg);
+   this->live_intervals = new(mem_ctx) vec4_live_variables(this, cfg);
 
    foreach_block (block, cfg) {
-      for (int i = 0; i < livevars.num_vars; i++) {
-        if (BITSET_TEST(livevars.bd[block->num].livein, i)) {
+      for (int i = 0; i < live_intervals->num_vars; i++) {
+        if (BITSET_TEST(live_intervals->bd[block->num].livein, i)) {
            start[i] = MIN2(start[i], block->start_ip);
            end[i] = MAX2(end[i], block->start_ip);
         }
 
-        if (BITSET_TEST(livevars.bd[block->num].liveout, i)) {
+        if (BITSET_TEST(live_intervals->bd[block->num].liveout, i)) {
            start[i] = MIN2(start[i], block->end_ip);
            end[i] = MAX2(end[i], block->end_ip);
         }
       }
    }
-
-   this->live_intervals_valid = true;
 }
 
 void
 vec4_visitor::invalidate_live_intervals()
 {
-   live_intervals_valid = false;
+   ralloc_free(live_intervals);
+   live_intervals = NULL;
 }
 
 bool
index c1c24ac0b4926087e243bd5b5dc6b838fafdcc0b..417dcb15e29190420cf3a86fa8c279459886e6ff 100644 (file)
@@ -3571,7 +3571,7 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
    this->virtual_grf_reg_map = NULL;
    this->virtual_grf_reg_count = 0;
    this->virtual_grf_array_size = 0;
-   this->live_intervals_valid = false;
+   this->live_intervals = NULL;
 
    this->max_grf = brw->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;