From c17db7537fe112841bb76b91865a30d97aae3594 Mon Sep 17 00:00:00 2001 From: Abdiel Janulgue Date: Thu, 5 Jun 2014 11:05:31 -0700 Subject: [PATCH] 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 Signed-off-by: Abdiel Janulgue --- .../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 83cf19114be..3242c3a0dd0 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; -- 2.30.2