Mesa (master): Revert "nir/copy_propagate: do not copy-propagate MOV srcs with source modifiers"

Iago Toral Quiroga itoral at kemper.freedesktop.org
Fri Nov 13 07:53:36 UTC 2015


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

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Fri Nov 13 08:51:06 2015 +0100

Revert "nir/copy_propagate: do not copy-propagate MOV srcs with source modifiers"

The change proposed in the review leads to piglit regressions because
is_move() is used in other places and relies on the checks for source
modifiers to be there.

Revert this until we agree on a better solution.

---

 src/glsl/nir/nir_opt_copy_propagate.c |   17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/glsl/nir/nir_opt_copy_propagate.c b/src/glsl/nir/nir_opt_copy_propagate.c
index 2611069..7d8bdd7 100644
--- a/src/glsl/nir/nir_opt_copy_propagate.c
+++ b/src/glsl/nir/nir_opt_copy_propagate.c
@@ -41,6 +41,11 @@ static bool is_move(nir_alu_instr *instr)
    if (instr->dest.saturate)
       return false;
 
+   /* we handle modifiers in a separate pass */
+
+   if (instr->src[0].abs || instr->src[0].negate)
+      return false;
+
    if (!instr->src[0].src.is_ssa)
       return false;
 
@@ -60,13 +65,9 @@ static bool is_vec(nir_alu_instr *instr)
 }
 
 static bool
-is_simple_move(nir_alu_instr *instr)
+is_swizzleless_move(nir_alu_instr *instr)
 {
    if (is_move(instr)) {
-      /* We handle modifiers in a separate pass */
-      if (instr->src[0].negate || instr->src[0].abs)
-         return false;
-
       for (unsigned i = 0; i < 4; i++) {
          if (!((instr->dest.write_mask >> i) & 1))
             break;
@@ -80,10 +81,6 @@ is_simple_move(nir_alu_instr *instr)
          if (instr->src[i].swizzle[0] != i)
             return false;
 
-         /* We handle modifiers in a separate pass */
-         if (instr->src[i].negate || instr->src[i].abs)
-            return false;
-
          if (def == NULL) {
             def = instr->src[i].src.ssa;
          } else if (instr->src[i].src.ssa != def) {
@@ -110,7 +107,7 @@ copy_prop_src(nir_src *src, nir_instr *parent_instr, nir_if *parent_if)
       return false;
 
    nir_alu_instr *alu_instr = nir_instr_as_alu(src_instr);
-   if (!is_simple_move(alu_instr))
+   if (!is_swizzleless_move(alu_instr))
       return false;
 
    /* Don't let copy propagation land us with a phi that has more




More information about the mesa-commit mailing list