Huh, sorry. This is not yet complete, I pushed by mistake.
But my plan is to keep (a) and also support replacing swizzles with constants if the required components can be resolved into a constant, which I think should be enough for this MR.
This last patch does that, but I should also implement a way to combine chained swizzles:
```hlsl uniform uint i;
float4 main() : sv_target { float4 a = {1, 2, 3, i}; float4 b = a.xywz; float4 c = b.yxww; return c; // Should be constant (2, 1, 3, 3) } ```