Mesa (9.2): i965: Emit MOVs for neg/abs.

Ian Romanick idr at kemper.freedesktop.org
Thu Aug 22 04:11:57 UTC 2013


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

Author: Matt Turner <mattst88 at gmail.com>
Date:   Thu Aug  8 13:50:01 2013 -0700

i965: Emit MOVs for neg/abs.

Necessary to avoid combining a bitcast and a modifier into a single
operation. Otherwise if safe, the MOV should be removed by
copy-propagation or register coalescing.

With this and the next patch, there are only four changes in shader-db:
all a single extra instruction. The code does something like
   mov a.w, -b.x
and copy propagation doesn't work because it only handles no-op
swizzles. Seems acceptable, given the known limitation of our copy
propagation.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Paul Berry <stereoytpe441 at gmail.com>
(cherry picked from commit 0ae9ca12a887a5aca47edc2a6a99eac4235bf4b0)

---

 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp   |    4 ++--
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 15d1c6a..0b17dc7 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -361,12 +361,12 @@ fs_visitor::visit(ir_expression *ir)
       break;
    case ir_unop_neg:
       op[0].negate = !op[0].negate;
-      this->result = op[0];
+      emit(MOV(this->result, op[0]));
       break;
    case ir_unop_abs:
       op[0].abs = true;
       op[0].negate = false;
-      this->result = op[0];
+      emit(MOV(this->result, op[0]));
       break;
    case ir_unop_sign:
       temp = fs_reg(this, ir->type);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 5254850..55f8b02 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -1391,12 +1391,12 @@ vec4_visitor::visit(ir_expression *ir)
       break;
    case ir_unop_neg:
       op[0].negate = !op[0].negate;
-      this->result = op[0];
+      emit(MOV(result_dst, op[0]));
       break;
    case ir_unop_abs:
       op[0].abs = true;
       op[0].negate = false;
-      this->result = op[0];
+      emit(MOV(result_dst, op[0]));
       break;
 
    case ir_unop_sign:




More information about the mesa-commit mailing list