Mesa (10.5): glsl: optimize (0 cmp x + y) into (-x cmp y).

Emil Velikov evelikov at kemper.freedesktop.org
Thu Mar 26 01:44:45 UTC 2015


Module: Mesa
Branch: 10.5
Commit: 5e572b1ccee4adfba9441c793b53b7950de560c5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e572b1ccee4adfba9441c793b53b7950de560c5

Author: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Date:   Tue Feb 24 19:02:57 2015 +0100

glsl: optimize (0 cmp x + y) into (-x cmp y).

The optimization done by commit 34ec1a24d did not take it into account.

Fixes:

dEQP-GLES3.functional.shaders.random.all_features.fragment.20

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Matt Turner <mattst88 at gmail.com>
Cc: "10.4 10.5" <mesa-stable at lists.freedesktop.org>
(cherry picked from commit b43bbfa90ace596c8b2e0b3954a5f69924726c59)

---

 src/glsl/opt_algebraic.cpp |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
index fae58c7..7f25fc4 100644
--- a/src/glsl/opt_algebraic.cpp
+++ b/src/glsl/opt_algebraic.cpp
@@ -578,9 +578,18 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
          if (!is_vec_zero(zero))
             continue;
 
-         return new(mem_ctx) ir_expression(ir->operation,
-                                           add->operands[0],
-                                           neg(add->operands[1]));
+         /* Depending of the zero position we want to optimize
+          * (0 cmp x+y) into (-x cmp y) or (x+y cmp 0) into (x cmp -y)
+          */
+         if (add_pos == 1) {
+            return new(mem_ctx) ir_expression(ir->operation,
+                                              neg(add->operands[0]),
+                                              add->operands[1]);
+         } else {
+            return new(mem_ctx) ir_expression(ir->operation,
+                                              add->operands[0],
+                                              neg(add->operands[1]));
+         }
       }
       break;
 




More information about the mesa-commit mailing list