I have altered the source, so that I call both refers_to_regno_p and reg_mentioned_p and print out when the two disagree. For the attached rectmm.i input file, there are only 5 disagreements:
mismatch for regno=2343: refersto=F,mentions=T reg = (reg/f:SI 2343) i1 = (insn 3162 1730 3165 99 rectmm.c:1041 (set (reg/f:SI 2343) (reg:SI 1 r1)) -1 (nil))
mismatch for regno=2355: refersto=F,mentions=T reg = (reg/f:SI 2355) i1 = (insn 3166 1745 3169 99 rectmm.c:1043 (set (reg/f:SI 2355) (reg:SI 9 r9)) -1 (nil))
mismatch for regno=2377: refersto=F,mentions=T reg = (reg/f:SI 2377) i1 = (insn 3170 1770 1731 99 rectmm.c:1045 (set (reg/f:SI 2377) (reg:SI 12 ip)) -1 (nil))
mismatch for regno=2349: refersto=F,mentions=T reg = (reg/f:SI 2349) i1 = (insn 3174 1737 3177 99 rectmm.c:1042 (set (reg/f:SI 2349) (reg:SI 0 r0)) -1 (nil))
mismatch for regno=2361: refersto=F,mentions=T - reg and i1 follow ... reg = (reg/f:SI 2361) il = (insn 3178 1752 1772 99 rectmm.c:1044 (set (reg/f:SI 2361) (reg:SI 3 r3)) -1 (nil))
This occurs because reg_mentioned_p looks at output regs, but refers_to_regno_p does not.
The knock-on effect of this difference must lead to those increments being lost, but I don't know why yet.
I have altered the source, so that I call both refers_to_regno_p and reg_mentioned_p and print out when the two disagree. For the attached rectmm.i input file, there are only 5 disagreements:
mismatch for regno=2343: refersto= F,mentions= T
reg = (reg/f:SI 2343)
i1 = (insn 3162 1730 3165 99 rectmm.c:1041 (set (reg/f:SI 2343)
(reg:SI 1 r1)) -1 (nil))
mismatch for regno=2355: refersto= F,mentions= T
reg = (reg/f:SI 2355)
i1 = (insn 3166 1745 3169 99 rectmm.c:1043 (set (reg/f:SI 2355)
(reg:SI 9 r9)) -1 (nil))
mismatch for regno=2377: refersto= F,mentions= T
reg = (reg/f:SI 2377)
i1 = (insn 3170 1770 1731 99 rectmm.c:1045 (set (reg/f:SI 2377)
(reg:SI 12 ip)) -1 (nil))
mismatch for regno=2349: refersto= F,mentions= T
reg = (reg/f:SI 2349)
i1 = (insn 3174 1737 3177 99 rectmm.c:1042 (set (reg/f:SI 2349)
(reg:SI 0 r0)) -1 (nil))
mismatch for regno=2361: refersto= F,mentions= T - reg and i1 follow ...
reg = (reg/f:SI 2361)
il = (insn 3178 1752 1772 99 rectmm.c:1044 (set (reg/f:SI 2361)
(reg:SI 3 r3)) -1 (nil))
This occurs because reg_mentioned_p looks at output regs, but refers_to_regno_p does not.
The knock-on effect of this difference must lead to those increments being lost, but I don't know why yet.