https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83327
Bug ID: 83327
Summary: Spilling into hard regs not taken into account in lra
liveness analysis
Product: gcc
Version: 7.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: vries at gcc dot gnu.org
Target Milestone: ---
This is a problem I'm running into with a gcn port on top of 7.1.0 on an
internal branch. [ This may be a duplicate of PR71657 - Wrong code on trunk gcc
(std::out_of_range), westmere . ]
The symptom is an execution failure when running no-scevccp-outer-10.c.
The port has the TARGET_SPILL_CLASS hook enabled, which enables spilling into
hard regs.
I.
At ira, we have a def and use of 'reg:BI 605', the def in bb2 and the use in
bb3:
...
(note 44 32 33 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
...
(insn 269 54 64 2 (set (reg:BI 605)
(le:BI (reg/v:SI 491 [ n ])
(const_int 0 [0]))) 23 {cstoresi4}
(nil))
....
(code_label 250 228 56 3 7 (nil) [1 uses])
(note 56 250 58 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
...
(jump_insn 62 60 63 3 (set (pc)
(if_then_else (ne:BI (reg:BI 605)
(const_int 0 [0]))
(label_ref 242)
(pc))) "no-scevccp-outer-10.c":19 21 {cjump}
(int_list:REG_BR_PROB 1500 (nil))
-> 242)
(note 63 62 66 4 [bb 4] NOTE_INSN_BASIC_BLOCK)
...
And in lra, we decide to spill it into a hard register:
...
Spill r605 into hr95
...
Resulting in this code:
...
(insn 385 386 64 2 (set (reg:BI 95 s95)
(reg:BI 18 s18 [605])) 3 {*movbi}
(nil))
...
(insn 404 60 405 3 (set (reg:BI 18 s18 [605])
(reg:BI 95 s95)) "no-scevccp-outer-10.c":19 3 {*movbi}
(nil))
...
II.
However, a bit later in lra we decide to assign r94,r95 to DImode pseudo 833:
...
Assign 94 to reload r833 (freq=60)
...
Resulting in this code:
...
(insn 629 378 390 2 (set (reg:DI 94 s94 [833])
(plus:DI (reg/f:DI 16 s16)
(const_int -8 [0xfffffffffffffff8]))) 35 {addptrdi3}
(nil))
...
This clobbers the def of s95 in insn 385.
III.
Consequently, the insn is removed in the dce in the jump pass:
...
DCE: Deleting insn 385
deleting insn with uid = 385.
...