https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100378
Bug ID: 100378 Summary: [Regression 9/10/11/12] arm64: lsl + asr used instead of sxth Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: luc.vanoostenryck at gmail dot com Target Milestone: --- Created attachment 50727 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50727&action=edit testcase On arm64, when compiling with optimization, for example with -O2, the following code: struct sh { short a; short b; short y[2]; }; int fooh(struct sh s) { return s.a; } produces the following assembly code since GCC9.x: fooh: lsl x0, x0, 16 asr w0, w0, 16 ret but with GCC8.x and before it produces the shorter: fooh(sh): sxth w0, w0 ret See https://gcc.godbolt.org/z/YrW7E3cro