Hi Paul,
On Tue, Jan 10, 2023 at 02:39:34PM -0500, Paul Koning via Gcc wrote:
> In pdp11.md I have:
>
> (define_insn_and_split "addhi3"
> [(set (match_operand:HI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
> (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0")
> (match_operand:HI 2 "general_operand" "rRLM,Qi,rRLM,Qi")))]
> ""
> "#"
> "reload_completed"
> [(parallel [(set (match_dup 0)
> (plus:HI (match_dup 1) (match_dup 2)))
> (clobber (reg:CC CC_REGNUM))])]
> ""
> [(set_attr "length" "2,4,4,6")])
>
> While compiling libgcc2.c I see this RTL in the .ira dump file:
>
> (insn 49 48 53 5 (set (reg/f:HI 136)
> (plus:HI (reg/f:HI 5 r5)
> (const_int -8 [0xfffffffffffffff8])))
> "../../../../../gcc/libgcc/libgcc2.c":276:4 68 {addhi3}
> (expr_list:REG_EQUIV (plus:HI (reg/f:HI 5 r5)
> (const_int -8 [0xfffffffffffffff8]))
> (nil)))
What hard register was assigned by IRA to r136? It shows this in the
.ira dump file, search for "Disposition:".
> Then in the .reload dump it appears this way:
>
> (insn 49 48 53 5 (set (reg/f:HI 5 r5 [136])
> (plus:HI (reg/f:HI 6 sp)
> (const_int 40 [0x28])))
> "../../../../../gcc/libgcc/libgcc2.c":276:4 68 {addhi3}
> (expr_list:REG_EQUIV (plus:HI (reg/f:HI 5 r5)
> (const_int -8 [0xfffffffffffffff8]))
> (nil)))
>
> which obviously causes an ICE because that RTL doesn't meet the constraints.
Before reload it did not have operands[0] and operands[1] the same,
already?
> This happens only when LRA is used.
>
> I also see this in the .reload file, but I don't know what it means:
>
> Choosing alt 1 in insn 49: (0) rR (1) 0 (2) Qi {addhi3}
It chose alternative 1 in this instruction, which uses constraints rR
for operands[0], a tie to that for operands[1], and Qi for operands[2].
> 1 Non-pseudo reload: reject+=2
> 1 Non input pseudo reload: reject++
> Cycle danger: overall += LRA_MAX_REJECT
> alt=0,overall=609,losers=1,rld_nregs=2
> alt=1: Bad operand -- refuse
> alt=2: Bad operand -- refuse
> alt=3,overall=0,losers=0,rld_nregs=0
This is for the *next* instruction. There is a "Choosing alt" thing
for that right after this. That will be alt 3: 1 and 2 are refused,
0 costs 609, 3 costs 0.
Reading the LRA dumps needs some getting used to ;-)
> Any ideas? I ran into this when trying to make LRA the default for this
> target.
Please show *all* relevant things in the reload dump file? Everything
about insn 49 or any insn added to reload it, for example.
Segher