diff options
author | Iago Toral Quiroga <[email protected]> | 2015-11-13 08:51:06 +0100 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2015-11-13 08:53:10 +0100 |
commit | a29d922c1a19ecebb7c274f31248b00086cb4733 (patch) | |
tree | 71e04ad21dcfc64c6d8d76004c35bc26a35ca054 /src | |
parent | 5f004fd1970338c9a1db51b421ae0f6f687661d9 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/nir/nir_opt_copy_propagate.c | 17 |
1 files 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 2611069dd5c..7d8bdd7f2ca 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 |