diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 9 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 8 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index e58545bb9d9..b66febbde00 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1127,7 +1127,14 @@ fs_visitor::propagate_constants() scan_inst->src[i] = inst->src[0]; progress = true; } else if (i == 0 && scan_inst->src[1].file != IMM) { - /* Fit this constant in by commuting the operands */ + /* Fit this constant in by commuting the operands. + * Exception: we can't do this for 32-bit integer MUL + * because it's asymmetric. + */ + if (scan_inst->opcode == BRW_OPCODE_MUL && + (scan_inst->src[1].type == BRW_REGISTER_TYPE_D || + scan_inst->src[1].type == BRW_REGISTER_TYPE_UD)) + break; scan_inst->src[0] = scan_inst->src[1]; scan_inst->src[1] = inst->src[0]; progress = true; 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 c3a9deee76b..93ae3d61cac 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp @@ -101,7 +101,13 @@ try_constant_propagation(vec4_instruction *inst, int arg, src_reg *values[4]) inst->src[arg] = value; return true; } else if (arg == 0 && inst->src[1].file != IMM) { - /* Fit this constant in by commuting the operands */ + /* Fit this constant in by commuting the operands. Exception: we + * can't do this for 32-bit integer MUL because it's asymmetric. + */ + if (inst->opcode == BRW_OPCODE_MUL && + (inst->src[1].type == BRW_REGISTER_TYPE_D || + inst->src[1].type == BRW_REGISTER_TYPE_UD)) + break; inst->src[0] = inst->src[1]; inst->src[1] = value; return true; |