http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57540
bin.cheng <amker.cheng at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|rtl-optimization |target --- Comment #2 from bin.cheng <amker.cheng at gmail dot com> --- This only happens on arm mode. For below gimple, k_8 = parent[k_29]; On ARM mode GCC expands it into, 81: r180:SI=0xf7f0 82: zero_extract(r180:SI,0x10,0x10)=0xffff 83: r181:SI=r165:SI<<0x2 84: r182:SI=r105:SI+r181:SI 85: r183:SI=r182:SI+r180:SI 86: r165:SI=[r183:SI] while on Thumb2 GCC expands it into, 88: r185:SI=r105:SI 89: r186:SI=r105:SI-0x810 90: r171:SI=[r171:SI*0x4+r186:SI] thus resulting in much better assembly code, .L5: ldr r3, [sp, r3, lsl #2] adds r2, r2, #1 cmp r3, #0 bge .L5 uxtb r2, r2