Mesa (master): i965/fs: in MAD optimizations, switch last argument to be immediate

Tapani Pälli tpalli at kemper.freedesktop.org
Tue Mar 17 05:59:51 UTC 2015


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

Author: Tapani Pälli <tapani.palli at intel.com>
Date:   Mon Mar 16 10:08:08 2015 +0200

i965/fs: in MAD optimizations, switch last argument to be immediate

Commit bb33a31 introduced optimizations that transform cases of MAD
in to simpler forms but it did not take in to account that src[0]
can not be immediate and did not report progress. Patch switches
src[0] and src[1] if src[0] is immediate and adds progress
reporting. If both sources are immediates, this is taken care of by
the same opt_algebraic pass on later run.

v2: Fix for all cases, use temporary fs_reg (Matt, Kenneth)

Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89569
Reviewed-by: Francisco Jerez <currojerez at riseup.net> (v1)
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Cc: "10.5" <mesa-stable at lists.freedesktop.org>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 8702ea8..53ceb29 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2491,6 +2491,7 @@ fs_visitor::opt_algebraic()
             inst->opcode = BRW_OPCODE_MUL;
             inst->src[0] = inst->src[2];
             inst->src[2] = reg_undef;
+            progress = true;
          } else if (inst->src[1].is_one()) {
             inst->opcode = BRW_OPCODE_ADD;
             inst->src[1] = inst->src[2];
@@ -2521,8 +2522,16 @@ fs_visitor::opt_algebraic()
       default:
 	 break;
       }
-   }
 
+      /* Swap if src[0] is immediate. */
+      if (progress && inst->is_commutative()) {
+         if (inst->src[0].file == IMM) {
+            fs_reg tmp = inst->src[1];
+            inst->src[1] = inst->src[0];
+            inst->src[0] = tmp;
+         }
+      }
+   }
    return progress;
 }
 




More information about the mesa-commit mailing list