There are few places still that have NOP/INVALID opcode assigned directly, I left those out as they were not causing problems. If there is interested in using vsir_instruction_init() at all times, let me know.
I think we generally should, yes. Note that there's a difference between creating a new NOP instruction and changing an existing instruction to NOP though; in the latter case we should use vkd3d_shader_instruction_make_nop() to preserve location information.