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.

Reply via email to