On 14/01/14 14:32, Jakub Jelinek wrote: > Anyway, the above is really a simple case, and I'd call it a > backend bug if it isn't able to generate good code out of that.
Exactly which back-end pass are you expecting to simplify (set (subreg:SI (reg:HI 1) 0) (and:SI (subreg:SI (reg:HI 0) 0) (const_int 2))) (set (reg:SI 2) (zero_extend:SI (reg:HI 1))) (set (reg:SI 3) (ne:SI (reg:SI 2) (const_int 0))) into (set (reg:SI 2) (and:SI (subreg:SI (reg:HI 0) 0) (const_int 2))) (set (reg:SI 3) (ne:SI (reg:SI 2) (const_int 0))) Combine is about the only pass that does this sort of thing, and that's far too often confused by extraneous information that it thinks might be helpful, but isn't, or by the fact that the intermediate result is used more than once. R.