https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80791
--- Comment #8 from amker at gcc dot gnu.org ---
So whole expanded rtl is:
;;
;; Full RTL generated for this function:
;;
1: NOTE_INSN_DELETED
5: NOTE_INSN_BASIC_BLOCK 2
2: r160:DI=%3:DI
3: NOTE_INSN_FUNCTION_BEG
4: r157:DI=0x100
20: L20:
7: NOTE_INSN_BASIC_BLOCK 4
8: {r161:SI=r157:DI#0>>0x1;clobber ca:SI;}
9: r157:DI=sign_extend(r161:SI)
10: r162:DI=[unspec[`*.LC0',%2:DI] 47]
REG_EQUAL `a'
11: r163:DI=r157:DI<<0x3
12: r164:DI=r162:DI+r163:DI
13: r165:SI=r160:DI#0<<0x3 ;;r160 use 2
14: r166:DI=zero_extend(r165:SI)
15: r168:DI=[unspec[`*.LC0',%2:DI] 47]
REG_EQUAL `a'
16: r167:DI=r166:DI+r168:DI
17: [r164:DI]=r167:DI
18: r169:SI=r160:DI#0+0x4 ;;r160 use 3
19: r160:DI=sign_extend(r169:SI) ;;r160 def
21: r170:SI=0x4000000f
22: r171:CC=cmp(r160:DI#0,r170:SI) ;;r160 use 1
23: pc={(r171:CC<=0)?L20:pc}
REG_BR_PROB 8500
24: NOTE_INSN_BASIC_BLOCK 5
I think it's the loop carried dependence of r160 breaks sms here.