rgobj: reduce compilation time of programs with long movelists

Reduces compilation time of webtbs/tw2242 for AArch64 with -O2 from
15 minutes to 10 seconds on my system.

from 15 minutes to 10 seconds
This commit is contained in:
Jonas Maebe 2022-10-12 22:50:25 +02:00
parent e2ade64a1e
commit a835d8b533

View File

@ -1327,7 +1327,7 @@ unit rgobj;
procedure trgobj.combine(u,v:Tsuperregister); procedure trgobj.combine(u,v:Tsuperregister);
var adj : Psuperregisterworklist; var adj : Psuperregisterworklist;
i,n,p,q:cardinal; original_u_count, i,n,p,q:cardinal;
t : tsuperregister; t : tsuperregister;
searched:Tmoveins; searched:Tmoveins;
found : boolean; found : boolean;
@ -1365,6 +1365,7 @@ unit rgobj;
sort_movelist(reginfo[u].movelist); sort_movelist(reginfo[u].movelist);
if assigned(reginfo[v].movelist) then if assigned(reginfo[v].movelist) then
begin begin
original_u_count:=reginfo[u].movelist^.header.count;
for n:=0 to reginfo[v].movelist^.header.count-1 do for n:=0 to reginfo[v].movelist^.header.count-1 do
begin begin
{Binary search the sorted part of the list.} {Binary search the sorted part of the list.}
@ -1385,7 +1386,9 @@ unit rgobj;
begin begin
{Linear search the unsorted part of the list.} {Linear search the unsorted part of the list.}
found:=false; found:=false;
for i:=header.sorted_until+1 to header.count-1 do { no need to search the instructions we've already added
from v, we know we won't find a match there }
for i:=header.sorted_until+1 to original_u_count-1 do
if searched.id=data[i].id then if searched.id=data[i].id then
begin begin
found:=true; found:=true;