On 07/12/2016 02:48 PM, Bernd Schmidt wrote:
No. You can reproduce issues with Blackfin easily by enabling LRA for
it, and I described the C6X issues when the LRA patches were posted for
review.

That was here:
  https://gcc.gnu.org/ml/gcc-patches/2012-10/msg00235.html

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.


Bernd

Reply via email to