On Tue, Jul 12, 2016 at 05:17:04PM +0200, Bernd Schmidt wrote: > The Blackfin thing happens frequently with -fomit-frame-pointer when we have > > (insn 66 64 70 8 (set (reg:SI 96 [ ivtmp.32 ]) > (reg/f:SI 15 FP)) 19 {*movsi_insn} > > Which LRA transforms to an invalid insn: > > (insn 66 64 70 8 (set (reg:SI 15 FP [orig:96 ivtmp.32 ] [96]) > (plus:SI (reg/f:SI 14 SP) > (const_int 4 [0x4]))) 50 {addsi3} > (expr_list:REG_EQUAL (reg/f:SI 15 FP) > (nil))) > > Haven't fully debugged it but it looks like an instance of the same > problem: not using the correct register numbers in elimination. An FP+FP > addition would be fine (which is how I'm guessing we arrived at this > pattern), but once you substitute the real register number you get an > invalid insn. So LRA is somewhat defective in this area.
Do you have a testcase? This sounds like fun :-) Segher