mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 02:59:13 +02:00
* changed backwards_was_first and extended_backwards from supregsets into
tbitsets so that they can grow as necessary and so that we don't have to fill the entire 8KiB all the time git-svn-id: trunk@15604 -
This commit is contained in:
parent
c072eb5a34
commit
b475d03612
@ -199,7 +199,7 @@ unit rgobj;
|
|||||||
coalesced_moves,
|
coalesced_moves,
|
||||||
constrained_moves : Tlinkedlist;
|
constrained_moves : Tlinkedlist;
|
||||||
extended_backwards,
|
extended_backwards,
|
||||||
backwards_was_first : tsuperregisterset;
|
backwards_was_first : tbitset;
|
||||||
|
|
||||||
{$ifdef EXTDEBUG}
|
{$ifdef EXTDEBUG}
|
||||||
procedure writegraph(loopidx:longint);
|
procedure writegraph(loopidx:longint);
|
||||||
@ -372,9 +372,6 @@ unit rgobj;
|
|||||||
if high(Ausable)=-1 then
|
if high(Ausable)=-1 then
|
||||||
internalerror(200210181);
|
internalerror(200210181);
|
||||||
live_range_direction:=rad_forward;
|
live_range_direction:=rad_forward;
|
||||||
// initialised by newinstance
|
|
||||||
// supregset_reset(extended_backwards,false,high(tsuperregister));
|
|
||||||
// supregset_reset(backwards_was_first,false,high(tsuperregister));
|
|
||||||
first_imaginary:=Afirst_imaginary;
|
first_imaginary:=Afirst_imaginary;
|
||||||
maxreg:=Afirst_imaginary;
|
maxreg:=Afirst_imaginary;
|
||||||
regtype:=Aregtype;
|
regtype:=Aregtype;
|
||||||
@ -420,6 +417,8 @@ unit rgobj;
|
|||||||
live_registers.done;
|
live_registers.done;
|
||||||
worklist_moves.free;
|
worklist_moves.free;
|
||||||
dispose_reginfo;
|
dispose_reginfo;
|
||||||
|
extended_backwards.free;
|
||||||
|
backwards_was_first.free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure Trgobj.dispose_reginfo;
|
procedure Trgobj.dispose_reginfo;
|
||||||
@ -689,11 +688,19 @@ unit rgobj;
|
|||||||
begin
|
begin
|
||||||
if (dir in [rad_backwards,rad_backwards_reinit]) then
|
if (dir in [rad_backwards,rad_backwards_reinit]) then
|
||||||
begin
|
begin
|
||||||
if (dir=rad_backwards_reinit) then
|
if not assigned(extended_backwards) then
|
||||||
supregset_reset(extended_backwards,false,high(tsuperregister));
|
begin
|
||||||
|
{ create expects a "size", not a "max bit" parameter -> +1 }
|
||||||
|
backwards_was_first:=tbitset.create(maxreg+1);
|
||||||
|
extended_backwards:=tbitset.create(maxreg+1);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if (dir=rad_backwards_reinit) then
|
||||||
|
extended_backwards.clear;
|
||||||
|
backwards_was_first.clear;
|
||||||
|
end;
|
||||||
int_live_range_direction:=rad_backwards;
|
int_live_range_direction:=rad_backwards;
|
||||||
{ new registers may be allocated }
|
|
||||||
supregset_reset(backwards_was_first,false,high(tsuperregister));
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
int_live_range_direction:=rad_forward;
|
int_live_range_direction:=rad_forward;
|
||||||
@ -723,19 +730,19 @@ unit rgobj;
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if not supregset_in(extended_backwards,supreg) then
|
if not extended_backwards.isset(supreg) then
|
||||||
begin
|
begin
|
||||||
supregset_include(extended_backwards,supreg);
|
extended_backwards.include(supreg);
|
||||||
live_start := instr;
|
live_start := instr;
|
||||||
if not assigned(live_end) then
|
if not assigned(live_end) then
|
||||||
begin
|
begin
|
||||||
supregset_include(backwards_was_first,supreg);
|
backwards_was_first.include(supreg);
|
||||||
live_end := instr;
|
live_end := instr;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if supregset_in(backwards_was_first,supreg) then
|
if backwards_was_first.isset(supreg) then
|
||||||
live_end := instr;
|
live_end := instr;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user