I was actually thinking that at least some of the code was probably going to belong in the individual frontends. I don't think any of the frontends declare descriptors in the same way, at least, so it hardly makes sense to me to have that in common code. The control flow scanning probably makes sense in ir.c, though.
Sure, it would probably make sense to build e.g. descriptor information in the frontends while parsing. (Although, would TPF and DXIL really end up being that different from each other?) As it is though, the vkd3d_shader_scan_instruction() loop in particular just operates on the IR.