Mesa (master): i965/vec4: Optimize sqrt+inv into rsq.
Matt Turner
mattst88 at kemper.freedesktop.org
Wed Oct 1 00:10:02 UTC 2014
Module: Mesa
Branch: master
Commit: b52126b44f40643aa2c0986c1d51330f4e4130b5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b52126b44f40643aa2c0986c1d51330f4e4130b5
Author: Matt Turner <mattst88 at gmail.com>
Date: Sat Sep 27 10:34:27 2014 -0700
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 <anuj.phogat at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/drivers/dri/i965/brw_vec4.cpp | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index e0a3d5f..46aa7d5 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;
}
More information about the mesa-commit
mailing list