https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96015
--- Comment #27 from Sergei Trofimovich <slyfox at inbox dot ru> --- If it's of any help by slightly expanding case switch I reproduced very similar problem on both hppa and sh4 (but not on sparc or mips) with: """ int b, c; int a() __attribute__((noipa)); int a(int *d, int *f, int g) { int e; if (d == f) e = 0; else e = 1; switch (g) { case 0: return e; case 1: return 7; case 2: return 8; case 3: return 8; case 4: return 1; case 5: if (e) return 10; default: __builtin_unreachable(); } } int main() { return a(&b, &c, 0); } """ $ sh4-unknown-linux-gnu-gcc -fno-PIE -no-pie -fno-stack-protector -U_FORTIFY_SOURCE -O2 bug_test.c -o bad-bug; ./bad-bug; echo $? 8 $ sh4-unknown-linux-gnu-gcc -fno-PIE -no-pie -fno-stack-protector -U_FORTIFY_SOURCE -O2 -fno-delayed-branch bug_test.c -o good-bug; ./good-bug; echo $? 1 bad-bug.S: a: cmp/eq r4,r5 ; if (d == f) // not our case bt/s .L21 ; goto .L21; something complicated on jump tables mov #5,r1 ; +delay slot .L6: .align 1 .L13: .align 1 .L14: rts ; return 8 mov #8,r0 ; +delay slot .align 1 .L17: rts mov #1,r0 .align 1 .L21: mov #4,r1 cmp/hi r1,r6 bt/s .L6 mov r6,r2 mova .L8,r0 add r2,r2 mov.w @(r0,r2),r1 braf r1 nop .L9: .align 2 .L8: .word .L10-.L9 .word .L15-.L9 .word .L14-.L9 .word .L14-.L9 .word .L17-.L9 .align 1 .L15: rts mov #7,r0 .align 1 .L10: rts mov r6,r0 good-bug.S: a: cmp/eq r4,r5 bt .L21 mov #5,r1 cmp/hi r1,r6 bf .L22 .L6: .align 1 .L22: mova .L12,r0 mov.b @(r0,r6),r6 braf r6 nop .L13: .align 2 .L12: .byte .L17-.L13 .byte .L15-.L13 .byte .L14-.L13 .byte .L14-.L13 .byte .L17-.L13 .byte .L11-.L13 .align 1 .L14: mov #8,r0 rts nop .align 1 .L17: mov #1,r0 rts nop .align 1 .L21: mov #4,r1 cmp/hi r1,r6 bt .L6 mova .L8,r0 mov r6,r2 add r2,r2 mov.w @(r0,r2),r1 braf r1 nop .L9: .align 2 .L8: .word .L10-.L9 .word .L15-.L9 .word .L14-.L9 .word .L14-.L9 .word .L17-.L9 .align 1 .L15: mov #7,r0 rts nop .align 1 .L11: mov #10,r0 rts nop .align 1 .L10: mov r6,r0 rts nop Might be not backend-specific? Or pa and sh have a similar bug.