instructions in affected programs:     968 -> 942 (-2.69%)
helped:                                4
---
 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 e74a22e..988e36a 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2335,6 +2335,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 ee74052..7868465 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:
-- 
2.0.5

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to