Maybe Henri feels otherwise, but I dislike this. The point of vsir should be that it has uniform semantics. That may not be the case already in plenty of ways, but I think we should be moving away from those.
On the other hand, perhaps the right thing to do is write the pass like this but then eventually move it from ir.c to d3dbc.c.
The way I see it, this moves it in the right direction; one less place for the backend to have to care about the shader version. You could certainly argue for e.g. setting an appropriate write mask in the parser so that we don't have to care about the shader version here, and I'd be inclined to agree. I don't think that's an argument against this patch as such though.