Mesa (master): i965/vec4: skip copy-propate for logical instructions with negated src entries
Matt Turner
mattst88 at kemper.freedesktop.org
Mon Jun 9 18:27:19 UTC 2014
Module: Mesa
Branch: master
Commit: c17db7537fe112841bb76b91865a30d97aae3594
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c17db7537fe112841bb76b91865a30d97aae3594
Author: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
Date: Thu Jun 5 11:05:31 2014 -0700
i965/vec4: skip copy-propate for logical instructions with negated src entries
The negation source modifier on src registers has changed meaning in Broadwell when
used with logical operations. Don't copy propagate when negate src modifier is set
and when the destination instruction is a logical op.
Reviewed-by: Matt Turner <mattst88 at gmail.com>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
---
.../drivers/dri/i965/brw_vec4_copy_propagation.cpp | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
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 83cf191..3242c3a 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
@@ -195,6 +195,15 @@ try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4])
return false;
}
+static bool
+is_logic_op(enum opcode opcode)
+{
+ return (opcode == BRW_OPCODE_AND ||
+ opcode == BRW_OPCODE_OR ||
+ opcode == BRW_OPCODE_XOR ||
+ opcode == BRW_OPCODE_NOT);
+}
+
bool
vec4_visitor::try_copy_propagation(vec4_instruction *inst, int arg,
src_reg *values[4])
@@ -233,6 +242,14 @@ vec4_visitor::try_copy_propagation(vec4_instruction *inst, int arg,
value.file != ATTR)
return false;
+ if (brw->gen >= 8) {
+ if (value.negate) {
+ if (is_logic_op(inst->opcode)) {
+ return false;
+ }
+ }
+ }
+
if (inst->src[arg].abs) {
value.negate = false;
value.abs = true;
More information about the mesa-commit
mailing list