On 10/29/2013, 5:20 PM, Matthew Fortune wrote:
On 10/29/2013 09:43 AM, Matthew Fortune wrote:
It is hard for me to say what is going on. Elimination is done when we match
hard reg against constraints. May be elimination to hfp is rejected on some
sub-pass and LRA don't try all alternatives after this.
Could you send me the test from which you got this dumps and what
options did you use. I can say more. As I understand there should be
no such problem. If reload can do right think, LRA should do the same.
Attached is a reduced patch to enable LRA for mips16 with my workarounds
omitted.
Also attached is frametest.c which should be compiled with -O2 -mips16. Add
-mreload to compare with reload and you will see the extra instruction that LRA
produces. When not omitting the frame pointer, LRA and reload behave the same.
Thanks, this helped me a lot.
The problem is in that LRA cannot match explicit frame pointer when it
is eliminated to sp as "ks", because in LRA we don't substitute RTL
operand itself and using RTL $frame for EXTRA_CONSTRAINT_STR with "ks"
and it returns false for RTL $frame. In other LRA places when we need a
hard register number for matching we use number of the elimination
result and it works.
I'll do the patch tomorrow to fix it. The patch should be not big but
it will need a lot testing.