Mesa (master): i965/fs: Allow copy-propagation on pull constant load values .

Eric Anholt anholt at kemper.freedesktop.org
Sun Nov 4 19:58:03 UTC 2012


Module: Mesa
Branch: master
Commit: 545b59b62a65a9cf1121668bd407e3365bbfa296
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=545b59b62a65a9cf1121668bd407e3365bbfa296

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Oct 30 14:38:41 2012 -0700

i965/fs: Allow copy-propagation on pull constant load values.

Given that we handle similarly-regioned GRFs registers for our copy
propagation from our UNIFORM file, there's no reason not to allow it.

The shader-db impact is negligible -- +90 instructions total, 2 shaders helped
and 7 hurt (slightly increased register pressure increased spilling), but this
is to prevent regression in other shaders when fixing copy_propagation to
reduce register pressure in the shaders that are hurt here.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 .../drivers/dri/i965/brw_fs_copy_propagation.cpp   |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
index 2fff688..73fe1a5 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -52,12 +52,14 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
    bool has_source_modifiers = entry->src.abs || entry->src.negate;
 
    if (intel->gen == 6 && inst->is_math() &&
-       (has_source_modifiers || entry->src.file == UNIFORM))
+       (has_source_modifiers || entry->src.file == UNIFORM ||
+        entry->src.smear != -1))
       return false;
 
    inst->src[arg].file = entry->src.file;
    inst->src[arg].reg = entry->src.reg;
    inst->src[arg].reg_offset = entry->src.reg_offset;
+   inst->src[arg].smear = entry->src.smear;
 
    if (!inst->src[arg].abs) {
       inst->src[arg].abs = entry->src.abs;
@@ -255,8 +257,7 @@ fs_visitor::opt_copy_propagate_local(void *mem_ctx, bblock_t *block)
 	  !inst->saturate &&
 	  !inst->predicate &&
 	  !inst->force_uncompressed &&
-	  !inst->force_sechalf &&
-	  inst->src[0].smear == -1) {
+	  !inst->force_sechalf) {
 	 acp_entry *entry = ralloc(mem_ctx, acp_entry);
 	 entry->dst = inst->dst;
 	 entry->src = inst->src[0];




More information about the mesa-commit mailing list