この前のHLSLの

c.x+c.y+c.z+c.w

dot(float4(1,1,1,1), c)

と書くと最適化されるね。っていうか書かないと最適化されないのかよ!
他にもシェーダモデル1.1でmin()が展開できないと言って怒るし、最適化アマアマだし。結局はあくまでシェーダはアセンブラを書くべきなのかもしらん。DirectX10のHLSLはマクロがかなり使えるようになってるみたいですね…