https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67763
Bug ID: 67763 Summary: [SH] Redirect conditional branches Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: olegendo at gcc dot gnu.org Target Milestone: --- Target: sh*-*-* In CSiBE renderMite.c there's the following sequence when compiled with -O2 -m4 -ml: mov.l @(16,r12),r4 tst r0,r0 mov r0,r11 movt r9 bt/s .L40 // (1) mov r9,r0 mov.l .L74,r0 mov r11,r5 jsr @r0 mov.l @(16,r12),r4 or r9,r0 .L40: // if predecessor block is (1), then // T = r0 = 1 tst r0,r0 T = !r0 = 0 bf .L42 (2) always branch bra .L41 mov r14,r9 .L42: mov.l .L87,r0 mov r15,r6 mov.l .L76,r5 add #16,r6 The branch (1) can be "straightened" by redirecting it to .L42.