i965/fs: Create a helper function for invalidating live intervals.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 6 Aug 2013 09:17:24 +0000 (02:17 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 10 Oct 2013 22:54:15 +0000 (15:54 -0700)
For now, this simply sets live_intervals_valid = false, but in the
future it will do something more sophisticated.

Based on a patch by Eric Anholt.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp

index 02383363d43cda5820de95b0ca7844bec999664b..d1aed42966af3007e2c8796ac7931b239207264c 100644 (file)
@@ -1443,7 +1443,7 @@ fs_visitor::split_virtual_grfs()
         }
       }
    }
-   this->live_intervals_valid = false;
+   invalidate_live_intervals();
 }
 
 /**
@@ -1868,7 +1868,7 @@ fs_visitor::dead_code_eliminate()
    }
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
@@ -2026,7 +2026,7 @@ fs_visitor::dead_code_eliminate_local()
    _mesa_hash_table_destroy(ht, NULL);
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
@@ -2085,9 +2085,8 @@ fs_visitor::register_coalesce_2()
       inst->remove();
 
       /* We don't need to recalculate live intervals inside the loop despite
-       * flagging live_intervals_valid because we only use live intervals for
-       * the interferes test, and we must have had a situation where the
-       * intervals were:
+       * invalidating them; we only use them for the interferes test, and we
+       * must have had a situation where the intervals were:
        *
        *  from  to
        *  ^
@@ -2103,7 +2102,7 @@ fs_visitor::register_coalesce_2()
        * otherwise it will conflict with "to" when we try to coalesce "to"
        * into Rw anyway.
        */
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
       progress = true;
       continue;
@@ -2244,7 +2243,7 @@ fs_visitor::register_coalesce()
    }
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
@@ -2407,7 +2406,7 @@ fs_visitor::compute_to_mrf()
    }
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
@@ -2478,7 +2477,7 @@ fs_visitor::remove_duplicate_mrf_writes()
    }
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
@@ -2745,7 +2744,7 @@ fs_visitor::lower_uniform_pull_constant_loads()
          inst->opcode = FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD_GEN7;
          inst->src[1] = payload;
 
-         this->live_intervals_valid = false;
+         invalidate_live_intervals();
       } else {
          /* Before register allocation, we didn't tell the scheduler about the
           * MRF we use.  We know it's safe to use this MRF because nothing
index 5c7089daff188ec2fc4e529c9af9764296add504..c8f10c39ea6d6b844a79aab94cc8ccf808b8447a 100644 (file)
@@ -290,6 +290,7 @@ public:
    void compact_virtual_grfs();
    void move_uniform_array_access_to_pull_constants();
    void setup_pull_constants();
+   void invalidate_live_intervals();
    void calculate_live_intervals();
    bool opt_algebraic();
    bool opt_cse();
index 5acef207af394388b6d2e68071d84a88966fe408..fb6fe184f330c57e9e004911b3230d6a2785979a 100644 (file)
@@ -562,7 +562,7 @@ fs_visitor::opt_copy_propagate()
    ralloc_free(mem_ctx);
 
    if (progress)
-      live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
index 61b3aeb5ac16622c8b5ec46bdecaf24e6177f147..d8ed4be7b0abb1cd8ac9d137505755755418da0b 100644 (file)
@@ -209,7 +209,7 @@ fs_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
    ralloc_free(mem_ctx);
 
    if (progress)
-      this->live_intervals_valid = false;
+      invalidate_live_intervals();
 
    return progress;
 }
index 4e9825f1e7c576e99f64930aad15158303059c2e..099eeaa0bbb18359f82afd998de9d9d887a7f5a0 100644 (file)
@@ -197,6 +197,12 @@ fs_live_variables::~fs_live_variables()
 
 #define MAX_INSTRUCTION (1 << 30)
 
+void
+fs_visitor::invalidate_live_intervals()
+{
+   this->live_intervals_valid = false;
+}
+
 /**
  * Compute the live intervals for each virtual GRF.
  *
index b9102d97e1fe4bef710cff82c431207ca2169740..68501021eed143709fbde5796cc38dd3c9d8205a 100644 (file)
@@ -658,5 +658,5 @@ fs_visitor::spill_reg(int spill_reg)
       }
    }
 
-   this->live_intervals_valid = false;
+   invalidate_live_intervals();
 }
index 5530683df84f1dd8cf79e34fa98bdfd984952eb0..735ad93561e4c0ed8329f0a5efff1966dac63be8 100644 (file)
@@ -1138,7 +1138,7 @@ fs_visitor::schedule_instructions(bool post_reg_alloc)
              dispatch_width, sched.time);
    }
 
-   this->live_intervals_valid = false;
+   invalidate_live_intervals();
 }
 
 void