From: Matt Turner Date: Sat, 27 Sep 2014 17:34:27 +0000 (-0700) Subject: i965/vec4: Optimize sqrt+inv into rsq. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b52126b44f40643aa2c0986c1d51330f4e4130b5;p=mesa.git i965/vec4: Optimize sqrt+inv into rsq. Transform sqrt a, b rcp c, a into sqrt a, b rsq c, b In most cases the sqrt's result is still used, so the improvement here is that we've broken a dependency between these instructions. Leads to 80 fewer INV instructions and 80 more RSQ. Occasionally the sqrt's result is no longer used, leading to: instructions in affected programs: 5005 -> 4949 (-1.12%) Reviewed-by: Anuj Phogat Reviewed-by: Ian Romanick --- diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index e0a3d5fa786..46aa7d5a8ae 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -731,6 +731,17 @@ vec4_visitor::opt_algebraic() progress = true; } break; + case SHADER_OPCODE_RCP: { + vec4_instruction *prev = (vec4_instruction *)inst->prev; + if (prev->opcode == SHADER_OPCODE_SQRT) { + if (inst->src[0].equals(src_reg(prev->dst))) { + inst->opcode = SHADER_OPCODE_RSQ; + inst->src[0] = prev->src[0]; + progress = true; + } + } + break; + } default: break; }