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 <cwabbott0@gmail.com>
This commit is contained in:
Jason Ekstrand
2015-01-14 19:08:32 -08:00
parent c56adc68e2
commit 0d05d1226e
+3 -1
View File
@@ -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