i965/fs: Pass cfg to calculate_live_intervals().
authorMatt Turner <mattst88@gmail.com>
Sun, 29 Jun 2014 03:02:51 +0000 (20:02 -0700)
committerMatt Turner <mattst88@gmail.com>
Tue, 1 Jul 2014 15:55:52 +0000 (08:55 -0700)
We've often created the CFG immediately before, so use it when
available.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.h
src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp

index 58e71756b16010033e8276575ed88bd7482bfc71..961c56cdab886ce2755bfddb50f104a546bfd887 100644 (file)
@@ -373,7 +373,7 @@ public:
    void assign_constant_locations();
    void demote_pull_constants();
    void invalidate_live_intervals();
-   void calculate_live_intervals();
+   void calculate_live_intervals(const cfg_t *cfg = NULL);
    void calculate_register_pressure();
    bool opt_algebraic();
    bool opt_cse();
index 381c5697f1056a60880e88a9214b61e4d83333f7..572780115805efa18779a6081361e39585d7c983 100644 (file)
@@ -317,9 +317,8 @@ fs_visitor::opt_cse()
 {
    bool progress = false;
 
-   calculate_live_intervals();
-
    cfg_t cfg(&instructions);
+   calculate_live_intervals(&cfg);
 
    for (int b = 0; b < cfg.num_blocks; b++) {
       bblock_t *block = cfg.blocks[b];
index 7b2d4aa9b72bbc14a8c546cff985a65992f6806f..d41a42c3ac02e2e7de76f5afccde27e7af179ba6 100644 (file)
@@ -41,7 +41,7 @@ fs_visitor::dead_code_eliminate()
 
    cfg_t cfg(&instructions);
 
-   calculate_live_intervals();
+   calculate_live_intervals(&cfg);
 
    int num_vars = live_intervals->num_vars;
    BITSET_WORD *live = ralloc_array(NULL, BITSET_WORD, BITSET_WORDS(num_vars));
index 0973dc9d83adf6e817e7591bcf4e143d58acf026..585dc3dad3b53aa6c20bfa3839f62dce7cd64977 100644 (file)
@@ -243,7 +243,7 @@ fs_live_variables::var_from_reg(fs_reg *reg)
    return var_from_vgrf[reg->reg] + reg->reg_offset;
 }
 
-fs_live_variables::fs_live_variables(fs_visitor *v, cfg_t *cfg)
+fs_live_variables::fs_live_variables(fs_visitor *v, const cfg_t *cfg)
    : v(v), cfg(cfg)
 {
    mem_ctx = ralloc_context(NULL);
@@ -304,7 +304,7 @@ fs_visitor::invalidate_live_intervals()
  * information about whole VGRFs.
  */
 void
-fs_visitor::calculate_live_intervals()
+fs_visitor::calculate_live_intervals(const cfg_t *cfg)
 {
    if (this->live_intervals)
       return;
@@ -320,8 +320,12 @@ fs_visitor::calculate_live_intervals()
       virtual_grf_end[i] = -1;
    }
 
-   cfg_t cfg(&instructions);
-   this->live_intervals = new(mem_ctx) fs_live_variables(this, &cfg);
+   if (cfg) {
+      this->live_intervals = new(mem_ctx) fs_live_variables(this, cfg);
+   } else {
+      cfg_t cfg(&instructions);
+      this->live_intervals = new(mem_ctx) fs_live_variables(this, &cfg);
+   }
 
    /* Merge the per-component live ranges to whole VGRF live ranges. */
    for (int i = 0; i < live_intervals->num_vars; i++) {
index 5a7dd279b3cd68f5c3f588a8989514ac11bfe0aa..13c3eb49a35464d753c6f4606ebae21890557185 100644 (file)
@@ -57,7 +57,7 @@ class fs_live_variables {
 public:
    DECLARE_RALLOC_CXX_OPERATORS(fs_live_variables)
 
-   fs_live_variables(fs_visitor *v, cfg_t *cfg);
+   fs_live_variables(fs_visitor *v, const cfg_t *cfg);
    ~fs_live_variables();
 
    bool vars_interfere(int a, int b);
@@ -97,7 +97,7 @@ protected:
    void compute_start_end();
 
    fs_visitor *v;
-   cfg_t *cfg;
+   const cfg_t *cfg;
    void *mem_ctx;
 
 };
index 079eb2eb79535eb8ed51f10446ecd4a34efb6066..1287adb34c4a72a76d0d8d12a1ff6c4dfccdf3ab 100644 (file)
@@ -93,10 +93,10 @@ fs_visitor::opt_saturate_propagation()
 {
    bool progress = false;
 
-   calculate_live_intervals();
-
    cfg_t cfg(&instructions);
 
+   calculate_live_intervals(&cfg);
+
    for (int b = 0; b < cfg.num_blocks; b++) {
       progress = opt_saturate_propagation_local(this, cfg.blocks[b])
                  || progress;