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))) 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. 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} 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 Any ideas? I ran into this when trying to make LRA the default for this target. paul