[Mesa-dev] [PATCH 2/3] i965/vec4: Optimize sqrt+inv into rsq.

Matt Turner mattst88 at gmail.com
Sat Sep 27 12:12:36 PDT 2014


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%)
---
 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;
       }
-- 
1.8.5.5



More information about the mesa-dev mailing list