https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320
--- Comment #16 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > unsigned int foo (unsigned short *x) > { > return x[0] << 16 | x[1]; > } > > [...] > gets you > > foo: > lduh [%o0], %g1 > lduh [%o0+2], %o0 > sll %g1, 16, %g1 > jmp %o7+8 > or %o0, %g1, %o0 > > which looks perfect to me. Indeed, but after having gone through a perfectly useless transformation and wasted cycles. This reminds me of the ipa-split + inlining round trip. Really SPARC machines aren't fast enough to allow such a silliness...