* do not load wpo info from ppu files when we are not generating

a wpo feedback file (saves time and memory)

git-svn-id: trunk@13240 -
This commit is contained in:
Jonas Maebe 2009-06-06 09:08:08 +00:00
parent b9601f10fb
commit d27673bbe4
2 changed files with 45 additions and 28 deletions

View File

@ -369,10 +369,16 @@ implementation
fmaybecreatedbyclassrefdeftypes.free;
fmaybecreatedbyclassrefdeftypes:=nil;
for i:=0 to fcalledvmtentries.count-1 do
tcalledvmtentries(fcalledvmtentries[i]).free;
fcalledvmtentries.free;
fcalledvmtentries:=nil;
{ may not be assigned in case the info was loaded from a ppu and we
are not generating a wpo feedback file (see tunitwpoinfo.ppuload)
}
if assigned(fcalledvmtentries) then
begin
for i:=0 to fcalledvmtentries.count-1 do
tcalledvmtentries(fcalledvmtentries[i]).free;
fcalledvmtentries.free;
fcalledvmtentries:=nil;
end;
inherited destroy;
end;

View File

@ -141,33 +141,41 @@ implementation
if ppufile.readentry<>ibcreatedobjtypes then
cgmessage(unit_f_ppu_read_error);
len:=ppufile.getlongint;
fcreatedobjtypes:=tfpobjectlist.create(false);
fcreatedobjtypes.count:=len;
getmem(fcreatedobjtypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fcreatedobjtypesderefs^[i]);
{ don't load the wpo info from the units if we are not generating
a wpo feedback file (that would just take time and memory)
}
if (init_settings.genwpoptimizerswitches=[]) then
ppufile.skipdata(ppufile.entrysize)
else
begin
len:=ppufile.getlongint;
fcreatedobjtypes:=tfpobjectlist.create(false);
fcreatedobjtypes.count:=len;
getmem(fcreatedobjtypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fcreatedobjtypesderefs^[i]);
len:=ppufile.getlongint;
fcreatedclassrefobjtypes:=tfpobjectlist.create(false);
fcreatedclassrefobjtypes.count:=len;
getmem(fcreatedclassrefobjtypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fcreatedclassrefobjtypesderefs^[i]);
len:=ppufile.getlongint;
fcreatedclassrefobjtypes:=tfpobjectlist.create(false);
fcreatedclassrefobjtypes.count:=len;
getmem(fcreatedclassrefobjtypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fcreatedclassrefobjtypesderefs^[i]);
len:=ppufile.getlongint;
fmaybecreatedbyclassrefdeftypes:=tfpobjectlist.create(false);
fmaybecreatedbyclassrefdeftypes.count:=len;
getmem(fmaybecreatedbyclassrefdeftypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fmaybecreatedbyclassrefdeftypesderefs^[i]);
len:=ppufile.getlongint;
fmaybecreatedbyclassrefdeftypes:=tfpobjectlist.create(false);
fmaybecreatedbyclassrefdeftypes.count:=len;
getmem(fmaybecreatedbyclassrefdeftypesderefs,len*sizeof(tderef));
for i:=0 to len-1 do
ppufile.getderef(fmaybecreatedbyclassrefdeftypesderefs^[i]);
len:=ppufile.getlongint;
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
fcalledvmtentriestemplist.count:=len;
fcalledvmtentries:=tfphashlist.create;
for i:=0 to len-1 do
fcalledvmtentriestemplist[i]:=tcalledvmtentries.ppuload(ppufile);
len:=ppufile.getlongint;
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
fcalledvmtentriestemplist.count:=len;
fcalledvmtentries:=tfphashlist.create;
for i:=0 to len-1 do
fcalledvmtentriestemplist[i]:=tcalledvmtentries.ppuload(ppufile);
end;
end;
@ -203,6 +211,9 @@ implementation
len: longint;
begin
if (init_settings.genwpoptimizerswitches=[]) then
exit;
{ don't free deref arrays immediately after use, as the types may need
re-resolving in case a unit needs to be reloaded
}