From: Jason Ekstrand Date: Thu, 15 Jan 2015 03:08:32 +0000 (-0800) Subject: nir/algebraic: Only replace an instruction once X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d05d1226e0f51f703e0dcbf736375ee4f252473;p=mesa.git 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 --- 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