https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61578
--- Comment #19 from Fredrik Hederstierna <fredrik.hederstie...@securitas-direct.com> --- I'm not sure why bug 59535 was closed, same problem might still exist, quote: > Zhenqiang Chen 2014-09-03 06:17:44 UTC > > Here is a small case to show lra introduces one more register copy (tested > with trunk and 4.9). int isascii (int c) { return c >= 0 && c < 128; } With options: -Os -mthumb -mcpu=cortex-m0, I got isascii: mov r3, #0 mov r2, #127 mov r1, r3 //??? cmp r2, r0 adc r1, r1, r3 mov r0, r1 bx lr With options: -Os -mthumb -mcpu=cortex-m0 -mno-lra, I got isascii: mov r2, #127 mov r3, #0 cmp r2, r0 adc r3, r3, r3 mov r0, r3 bx lr Testing 4.8.5 and 5.2.0 still still produces same bigger code in GCC 5.2. So something adds a register copy in this small case. /Fredrik