https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71942
--- Comment #3 from Albi <albrecht.guendel at web dot de> --- Agreed, after way more google research a lot of people complain about this. Never the less this poses a big problem since it halves the performance of every load on a sub-32-bit datatype. Imho the problem issnt in the optimizer... i think the fundamental problem is that the instruction-set is not aware of the implicit unsigned zero-extention thats allready done by the load-instruction. With that knowledge the idea of inserting the (redundant) zero-extending instruction like "uxth" wouldnt even come up even without optimization. This is at least true for every unsigned short or unsigned char. Signed types need the sign extension of course. In other words: there is actually no reason the instruction should be issued in the first place and therefore the optimizer should not really need to remove it afterwards. Its fundamentally redundant.