diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 12a2a393a58..946cd628ca8 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1148,10 +1148,24 @@ nir_instr_move(nir_cursor cursor, nir_instr *instr) /* If the cursor happens to refer to this instruction (either before or * after), don't do anything. */ - if ((cursor.option == nir_cursor_before_instr || - cursor.option == nir_cursor_after_instr) && - cursor.instr == instr) - return false; + switch (cursor.option) { + case nir_cursor_before_instr: + if (cursor.instr == instr || nir_instr_prev(cursor.instr) == instr) + return false; + break; + case nir_cursor_after_instr: + if (cursor.instr == instr || nir_instr_next(cursor.instr) == instr) + return false; + break; + case nir_cursor_before_block: + if (cursor.block == instr->block && nir_instr_is_first(instr)) + return false; + break; + case nir_cursor_after_block: + if (cursor.block == instr->block && nir_instr_is_last(instr)) + return false; + break; + } nir_instr_remove(instr); nir_instr_insert(cursor, instr);