Mesa (master): i965: Optimize multiplication by -1 into a negated MOV.

Matt Turner mattst88 at kemper.freedesktop.org
Sun Feb 15 20:24:52 UTC 2015


Module: Mesa
Branch: master
Commit: eb47d0efd39d73d4388389d6c0ebe458160f79fa
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=eb47d0efd39d73d4388389d6c0ebe458160f79fa

Author: Matt Turner <mattst88 at gmail.com>
Date:   Wed Feb  4 18:08:30 2015 -0800

i965: Optimize multiplication by -1 into a negated MOV.

instructions in affected programs:     968 -> 942 (-2.69%)
helped:                                4

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp   |    9 +++++++++
 src/mesa/drivers/dri/i965/brw_vec4.cpp |    5 +++++
 2 files changed, 14 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index c7c6acc..0f1300c 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2325,6 +2325,15 @@ fs_visitor::opt_algebraic()
 	    break;
 	 }
 
+         /* a * -1.0 = -a */
+         if (inst->src[1].is_negative_one()) {
+            inst->opcode = BRW_OPCODE_MOV;
+            inst->src[0].negate = !inst->src[0].negate;
+            inst->src[1] = reg_undef;
+            progress = true;
+            break;
+         }
+
          /* a * 0.0 = 0.0 */
          if (inst->src[1].is_zero()) {
             inst->opcode = BRW_OPCODE_MOV;
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index fda8552..58828c3 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -725,6 +725,11 @@ vec4_visitor::opt_algebraic()
 	    inst->opcode = BRW_OPCODE_MOV;
 	    inst->src[1] = src_reg();
 	    progress = true;
+         } else if (inst->src[1].is_negative_one()) {
+            inst->opcode = BRW_OPCODE_MOV;
+            inst->src[0].negate = !inst->src[0].negate;
+            inst->src[1] = src_reg();
+            progress = true;
 	 }
 	 break;
       case BRW_OPCODE_CMP:




More information about the mesa-commit mailing list