https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64537
Bug ID: 64537 Summary: Aarch64 redundant sxth instruction gets generated Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vekumar at gcc dot gnu.org For the below test case redundant sxth instruction gets generate. int adds_shift_ext ( long long a, short b, int c) { long long d = (a - ((long long)b << 3)); if (d == 0) return a + c; else return b + d + c; } adds_shift_ext: sxth w1, w1 // 3 *extendhisi2_aarch64/1 [length = 4] <==1 subs x3, x0, x1, sxth 3 // 11 *subs_extvdi_multp2 [length = 4] <==2 beq .L5 // 12 *condjump [length = 4] add w0, w1, w2 // 19 *addsi3_aarch64/2 [length = 4] add w0, w0, w3 // 20 *addsi3_aarch64/2 [length = 4] ret // 57 simple_return [length = 4] .p2align 2 .L5: add w0, w2, w0 // 14 *addsi3_aarch64/2 [length = 4] ret // 55 simple_return [length = 4] <== 1 is not needed.