i965/vec4: Add parameter to skip doing constant propagation.
authorMatt Turner <mattst88@gmail.com>
Sun, 21 Dec 2014 01:37:09 +0000 (17:37 -0800)
committerMatt Turner <mattst88@gmail.com>
Mon, 29 Dec 2014 18:08:18 +0000 (10:08 -0800)
After CSEing some MOV ..., VF instructions we have code like

   mov tmp, [1F, 2F, 3F, 4F]VF
   mov r10, tmp
   mov r11, tmp
   ...
   use r10
   use r11

We want to copy propagate tmp into the uses of r10 and r11, but *not*
constant propagate the VF immediate into the uses of tmp.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp

index 4a8a4676d650761b4085bacc8b3b2b0667d628b5..75ecaf1a37def5f09aacf3ba40bbd6b0223a91dc 100644 (file)
@@ -369,7 +369,7 @@ public:
    bool opt_reduce_swizzle();
    bool dead_code_eliminate();
    bool virtual_grf_interferes(int a, int b);
-   bool opt_copy_propagation();
+   bool opt_copy_propagation(bool do_constant_prop = true);
    bool opt_cse_local(bblock_t *block);
    bool opt_cse();
    bool opt_algebraic();
index 65564c998e305da7ae5b503b4617103bc4e8e51d..9deaffa9fc3b5e7c1940dabca44495920b4da128 100644 (file)
@@ -330,7 +330,7 @@ try_copy_propagate(struct brw_context *brw, vec4_instruction *inst,
 }
 
 bool
-vec4_visitor::opt_copy_propagation()
+vec4_visitor::opt_copy_propagation(bool do_constant_prop)
 {
    bool progress = false;
    struct copy_entry entries[virtual_grf_reg_count];
@@ -395,7 +395,7 @@ vec4_visitor::opt_copy_propagation()
         if (c != 4)
            continue;
 
-        if (try_constant_propagate(brw, inst, i, &entry))
+         if (do_constant_prop && try_constant_propagate(brw, inst, i, &entry))
             progress = true;
 
         if (try_copy_propagate(brw, inst, i, &entry, reg))