https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44883
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- In GCC 9+ (due to 2->2 combine) we get: .L2: cmp r4, r5 blt .L3 pop {r4, r5, r6, r7, r8, pc} .L3: ldr r3, [r6] lsls r2, r4, #5 add r8, r3, r4, lsl #5 adds r4, r4, #1 ldr r0, [r3, r2] bl foo str r7, [r8, #4] b .L2