From: Eric Anholt Date: Thu, 1 Sep 2011 23:43:38 +0000 (-0700) Subject: i965/vs: Allow copy propagation on GRFs. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=29361e14df8e5e92df747d52303da2c454e2cacc;p=mesa.git i965/vs: Allow copy propagation on GRFs. Further reduces instruction count by 4.0% in 40.7% of the vertex shaders. --- 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; } }