summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-06-23 22:07:38 -0700
committerMatt Turner <mattst88@gmail.com>2014-06-25 13:00:54 -0700
commit7192207de18a7a7e127a8a5910626af96f001993 (patch)
tree988adb9362158a9357a9e3808b5caf0f3af53cc2 /src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
parent038eb649b30dfddaf40888ea28b5e88de3af2214 (diff)
downloadexternal_mesa3d-7192207de18a7a7e127a8a5910626af96f001993.zip
external_mesa3d-7192207de18a7a7e127a8a5910626af96f001993.tar.gz
external_mesa3d-7192207de18a7a7e127a8a5910626af96f001993.tar.bz2
i965/vec4: Constant propagate into 2-src math instructions on Gen8.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp')
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp11
1 files changed, 9 insertions, 2 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 11571ad..278ec7b 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
@@ -73,7 +73,8 @@ is_channel_updated(vec4_instruction *inst, src_reg *values[4], int ch)
}
static bool
-try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4])
+try_constant_propagation(struct brw_context *brw, vec4_instruction *inst,
+ int arg, src_reg *values[4])
{
/* For constant propagation, we only handle the same constant
* across all 4 channels. Some day, we should handle the 8-bit
@@ -110,6 +111,12 @@ try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4])
inst->src[arg] = value;
return true;
+ case SHADER_OPCODE_POW:
+ case SHADER_OPCODE_INT_QUOTIENT:
+ case SHADER_OPCODE_INT_REMAINDER:
+ if (brw->gen < 8)
+ break;
+ /* fallthrough */
case BRW_OPCODE_DP2:
case BRW_OPCODE_DP3:
case BRW_OPCODE_DP4:
@@ -360,7 +367,7 @@ vec4_visitor::opt_copy_propagation()
if (c != 4)
continue;
- if (try_constant_propagation(inst, i, values) ||
+ if (try_constant_propagation(brw, inst, i, values) ||
try_copy_propagation(inst, i, values))
progress = true;
}