+ tai_regalloc.keep to force register deallocations to be keep

git-svn-id: trunk@22187 -
This commit is contained in:
florian 2012-08-22 19:51:47 +00:00
parent c0425c48fd
commit b6608e716b
2 changed files with 5 additions and 1 deletions

View File

@ -644,6 +644,7 @@ interface
tai_regalloc = class(tai)
reg : tregister;
ratype : TRegAllocType;
keep : boolean;
{ reg(de)alloc belongs to this instruction, this
is only used for automatic inserted (de)alloc for
imaginary register and required for spilling code }

View File

@ -25,6 +25,8 @@ Unit aopt;
{$i fpcdefs.inc}
{ $define DEBUG_OPTALLOC}
Interface
Uses
@ -195,13 +197,14 @@ Unit aopt;
{$endif DEBUG_OPTALLOC}
AsmL.Remove(p);
InsertLLItem(hp2, tai(hp2.Next), p);
tai_regalloc(p).keep:=true;
{$ifdef DEBUG_OPTALLOC}
AsmL.InsertAfter(tai_comment.Create(strpnew('Moved deallocation of '+std_regname(tai_regalloc(p).Reg)+' here')),hp2);
{$endif DEBUG_OPTALLOC}
p := hp1;
End
else if findregalloc(tai_regalloc(p).reg, tai(p.next))
and getnextinstruction(p,hp1) then
and getnextinstruction(p,hp1) and not(tai_regalloc(p).keep) then
begin
hp1 := tai(p.previous);
{$ifdef DEBUG_OPTALLOC}