Most of this looks fine to me, but I have my doubts about 9/9. What the old code calls "immconst_type" *is* the dimension; I don't think that it's meaningfully different, and I think that we should quite possibly be making vsir look more like the hlsl_sm4 layer in this respect—that is, rename "immconst_type" to "dimension" and parse and specify it everywhere.
Yeah. The reason it ended up being like that is that most registers have an implicit dimension; vec4 for most, but scalar for the ones from shader_sm4_is_scalar_register(). (And looking more closely at 9/9, I see some inconsistencies with shader_sm4_is_scalar_register()...) Immediate constants were the exception for not having such an implied dimension.
Leaving that last patch it off the series for now may be prudent.
I wasn't too worried about 9/9, but you're probably right that it's not the direction we want to go in. More generally it's of course also true that it tends to be faster to get two small series in than it is to get one large one in...