Mesa (master): i965/fs: 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: 94b68109fbe1cb60cc23a4c5a319039ada81ea81
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=94b68109fbe1cb60cc23a4c5a319039ada81ea81

Author: Matt Turner <mattst88 at gmail.com>
Date:   Sat Sep 27 10:34:56 2014 -0700

i965/fs: Optimize sqrt+inv into rsq.

Transform

   sqrt a, b
   rcp  c, a

into

   sqrt a, b
   rsq  c, b

The improvement here is that we've broken a dependency between these
instructions. Leads to 330 fewer INV instructions and 330 more RSQ.

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_fs.cpp |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index ab4ee34..19e9cb9 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2334,6 +2334,17 @@ fs_visitor::opt_algebraic()
             }
          }
          break;
+      case SHADER_OPCODE_RCP: {
+         fs_inst *prev = (fs_inst *)inst->prev;
+         if (prev->opcode == SHADER_OPCODE_SQRT) {
+            if (inst->src[0].equals(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