I think this looks good, although we'll probably want to wait until after the 1.7 release to commit it.
There is one thought that occurred to me, although it may not be quite critical enough to block this series: ideally we would preserve the original source locations when doing transformations like this. That may mean recording the original vkd3d_shader_location in the vkd3d_shader_instruction structure, or at least the index of a particular instruction in the original vkd3d_shader_instruction_array.
(Incidentally, location information is currently more broken than that; we can no longer rely on the parser to update the current location while processing instructions.)