diff options
author | Jason Ekstrand <[email protected]> | 2015-01-14 19:08:32 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-01-15 07:20:24 -0800 |
commit | 0d05d1226e0f51f703e0dcbf736375ee4f252473 (patch) | |
tree | 22c439a2367735b9096c595d570a1d30f9c77385 /src/glsl/nir/nir_algebraic.py | |
parent | c56adc68e2e75276785fd933b47621c87f9fd3ee (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.py | 4 |
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 |