http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54236
--- Comment #3 from Oleg Endo <olegendo at gcc dot gnu.org> --- Some more addc candidates I ran into: int test00 (int a, int b, int c, int d) { return (d & 1) + a + b; } -O2 -m4: mov r7,r0 and #1,r0 add r4,r0 rts add r5,r0 better: shlr r7 // T = r7 & 1 addc r4,r5 rts mov r5,r0 int test01 (int a, int b, int c, int d) { return ((d >> 31) & 1) + a + b; } -O2 -m4: shll r7 movt r0 add r4,r0 rts add r5,r0 better: shll r7 // T = (r7 >> 31) & 1 addc r4,r5 rts mov r5,r0