The vsir changes don't seem too bad at first sight. Is that the extent of them though, or is there much more to come?
You could probably avoid VSIR_DIMENSION_VEC1/2/3 though; I think in most cases the size of source vectors is implied either by the destination mask, or by the instruction itself. Specifically, instructions like "mov r0.xy, r1.xyzw" are effectively "mov r0.xy, r1.xy", and instructions like "dp3 r0.x, r1.xyzw, r2.xyzw" are effectively "dp3 r0.x, r1.xyz, r2.xyz". I.e., we could conceivably handle this entirely on the output side, much like we do for GLSL output in wined3d.