From: Tapani Pälli Date: Mon, 16 Mar 2015 08:08:08 +0000 (+0200) Subject: i965/fs: in MAD optimizations, switch last argument to be immediate X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=627c68308683abbd6e563a09af6013a33938a790;p=mesa.git i965/fs: in MAD optimizations, switch last argument to be immediate Commit bb33a31 introduced optimizations that transform cases of MAD in to simpler forms but it did not take in to account that src[0] can not be immediate and did not report progress. Patch switches src[0] and src[1] if src[0] is immediate and adds progress reporting. If both sources are immediates, this is taken care of by the same opt_algebraic pass on later run. v2: Fix for all cases, use temporary fs_reg (Matt, Kenneth) Signed-off-by: Tapani Pälli Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89569 Reviewed-by: Francisco Jerez (v1) Reviewed-by: Kenneth Graunke Cc: "10.5" --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 8702ea8a21f..53ceb29e919 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2491,6 +2491,7 @@ fs_visitor::opt_algebraic() inst->opcode = BRW_OPCODE_MUL; inst->src[0] = inst->src[2]; inst->src[2] = reg_undef; + progress = true; } else if (inst->src[1].is_one()) { inst->opcode = BRW_OPCODE_ADD; inst->src[1] = inst->src[2]; @@ -2521,8 +2522,16 @@ fs_visitor::opt_algebraic() default: break; } - } + /* Swap if src[0] is immediate. */ + if (progress && inst->is_commutative()) { + if (inst->src[0].file == IMM) { + fs_reg tmp = inst->src[1]; + inst->src[1] = inst->src[0]; + inst->src[0] = tmp; + } + } + } return progress; }