https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63949

--- Comment #4 from vekumar at gcc dot gnu.org ---
(In reply to Richard Earnshaw from comment #3)
> make_extraction is unable to generate bit-field extractions in more than one
> mode.  This causes the extractions that it does generate to be wrapped in
> subregs when SImode results are wanted.
> 
> Ideally, we should teach make_extraction to be more sensible, but I'm not
> sure what the impact of that would be on other ports that really can only
> support one mode for bit-field extracts.

Yes, make_extraction converts mult to sign extract RTL.

RTL from (mult: SI (reg: SI 1 x1 [i])
              ( constant_int 2 [0x2]))

to 

(subreg: SI (sign_extract: DI (ashift: DI (reg DI 1 x1 [i]) 
                                      (constant_int 1 [0x1]))
                              (constant_int 17 [0x11]))
            (constant_int 0 [0x0]))

Reply via email to