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