summaryrefslogtreecommitdiffstats
path: root/src/glsl/nir/nir_algebraic.py
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-01-14 19:08:32 -0800
committerJason Ekstrand <[email protected]>2015-01-15 07:20:24 -0800
commit0d05d1226e0f51f703e0dcbf736375ee4f252473 (patch)
tree22c439a2367735b9096c595d570a1d30f9c77385 /src/glsl/nir/nir_algebraic.py
parentc56adc68e2e75276785fd933b47621c87f9fd3ee (diff)
nir/algebraic: Only replace an instruction once
Without the break, it was possible that an instruction would match multiple expressions. If this happened, you could end up trying to replace it multiple times and get a segfault. This makes it so that, after a successful replacement, it moves on to the next instruction. Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/glsl/nir/nir_algebraic.py')
-rw-r--r--src/glsl/nir/nir_algebraic.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/glsl/nir/nir_algebraic.py b/src/glsl/nir/nir_algebraic.py
index 72703beea8a..f9b246dd865 100644
--- a/src/glsl/nir/nir_algebraic.py
+++ b/src/glsl/nir/nir_algebraic.py
@@ -192,8 +192,10 @@ ${pass_name}_block(nir_block *block, void *void_state)
for (unsigned i = 0; i < ARRAY_SIZE(${pass_name}_${opcode}_xforms); i++) {
if (nir_replace_instr(alu, ${pass_name}_${opcode}_xforms[i].search,
${pass_name}_${opcode}_xforms[i].replace,
- state->mem_ctx))
+ state->mem_ctx)) {
state->progress = true;
+ break;
+ }
}
break;
% endfor