diff options
author | Eric Anholt <[email protected]> | 2011-09-01 16:43:38 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2011-09-08 21:40:39 -0700 |
commit | 29361e14df8e5e92df747d52303da2c454e2cacc (patch) | |
tree | 061947e4f24b959ec29abe4c4fc0a25795d06ed9 | |
parent | 6d0c018776977219e355c534eaafec53a30d993b (diff) |
i965/vs: Allow copy propagation on GRFs.
Further reduces instruction count by 4.0% in 40.7% of the vertex
shaders.
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp index 7862d78ab33..c46735abfab 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp @@ -187,6 +187,7 @@ try_copy_propagation(struct intel_context *intel, value.swizzle = BRW_SWIZZLE4(s[0], s[1], s[2], s[3]); if (value.file != UNIFORM && + value.file != GRF && value.file != ATTR) return false; @@ -204,6 +205,10 @@ try_copy_propagation(struct intel_context *intel, if (intel->gen >= 6 && inst->is_math()) return false; + /* Don't report progress if this is a noop. */ + if (value.equals(&inst->src[arg])) + return false; + inst->src[arg] = value; return true; } @@ -307,7 +312,7 @@ vec4_visitor::opt_copy_propagation() cur_value[i][j] && cur_value[i][j]->file == GRF && cur_value[i][j]->reg == inst->dst.reg && - cur_value[i][j]->reg == inst->dst.reg) { + cur_value[i][j]->reg_offset == inst->dst.reg_offset) { cur_value[i][j] = NULL; } } |