* Removed ifdefs around notifications

ifdefs around for loop optimizations remain
This commit is contained in:
daniel 2003-01-03 12:15:55 +00:00
parent 190b09a5dd
commit 5041b70618
7 changed files with 39 additions and 89 deletions

View File

@ -117,17 +117,12 @@ interface
{ a node which is a reference to a certain temp } { a node which is a reference to a certain temp }
ttemprefnode = class(tnode) ttemprefnode = class(tnode)
{$ifdef var_notification}
writeaccess:boolean;
{$endif}
constructor create(const temp: ttempcreatenode); virtual; constructor create(const temp: ttempcreatenode); virtual;
constructor create_offset(const temp: ttempcreatenode;aoffset:longint); constructor create_offset(const temp: ttempcreatenode;aoffset:longint);
function getcopy: tnode; override; function getcopy: tnode; override;
function pass_1 : tnode; override; function pass_1 : tnode; override;
function det_resulttype : tnode; override; function det_resulttype : tnode; override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
function docompare(p: tnode): boolean; override; function docompare(p: tnode): boolean; override;
protected protected
tempinfo: ptempinfo; tempinfo: ptempinfo;
@ -679,13 +674,11 @@ implementation
(ttemprefnode(p).tempinfo = tempinfo); (ttemprefnode(p).tempinfo = tempinfo);
end; end;
{$ifdef var_notification}
procedure Ttemprefnode.mark_write; procedure Ttemprefnode.mark_write;
begin begin
writeaccess:=true; include(flags,nf_write);
end; end;
{$endif}
{***************************************************************************** {*****************************************************************************
@ -766,7 +759,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.38 2002-11-27 02:37:12 peter Revision 1.39 2003-01-03 12:15:55 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.38 2002/11/27 02:37:12 peter
* case statement inlining added * case statement inlining added
* fixed inlining of write() * fixed inlining of write()
* switched statementnode left and right parts so the statements are * switched statementnode left and right parts so the statements are

View File

@ -48,9 +48,7 @@ interface
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
function docompare(p: tnode) : boolean; override; function docompare(p: tnode) : boolean; override;
private private
function resulttype_cord_to_pointer : tnode; function resulttype_cord_to_pointer : tnode;
@ -1293,14 +1291,11 @@ implementation
result:=resulttype_call_helper(convtype); result:=resulttype_call_helper(convtype);
end; end;
{$ifdef var_notification}
procedure Ttypeconvnode.mark_write; procedure Ttypeconvnode.mark_write;
begin begin
left.mark_write; left.mark_write;
end; end;
{$endif}
function ttypeconvnode.first_cord_to_pointer : tnode; function ttypeconvnode.first_cord_to_pointer : tnode;
@ -2022,7 +2017,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.96 2002-12-22 16:34:49 peter Revision 1.97 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.96 2002/12/22 16:34:49 peter
* proc-procvar crash fixed (tw2277) * proc-procvar crash fixed (tw2277)
Revision 1.95 2002/12/20 16:01:26 peter Revision 1.95 2002/12/20 16:01:26 peter

View File

@ -29,10 +29,7 @@ interface
uses uses
node,cpubase, node,cpubase,
aasmbase,aasmtai,aasmcpu, aasmbase,aasmtai,aasmcpu,symnot,
{$ifdef var_notification}
symnot,
{$endif}
symppu,symtype,symbase,symdef,symsym; symppu,symtype,symbase,symdef,symsym;
type type
@ -87,13 +84,9 @@ interface
tifnodeclass = class of tifnode; tifnodeclass = class of tifnode;
tfornode = class(tloopnode) tfornode = class(tloopnode)
{$ifdef var_notification}
loopvar_notid:cardinal; loopvar_notid:cardinal;
{$endif}
constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual; constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;
{$ifdef var_notification}
procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym); procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym);
{$endif}
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
end; end;
@ -658,7 +651,6 @@ implementation
include(loopflags,lnf_testatbegin); include(loopflags,lnf_testatbegin);
end; end;
{$ifdef var_notification}
procedure Tfornode.loop_var_access(not_type:Tnotification_flag; procedure Tfornode.loop_var_access(not_type:Tnotification_flag;
symbol:Tsym); symbol:Tsym);
@ -677,7 +669,6 @@ implementation
end; end;
Tvarsym(symbol).unregister_notification(loopvar_notid); Tvarsym(symbol).unregister_notification(loopvar_notid);
end; end;
{$endif}
function tfornode.det_resulttype:tnode; function tfornode.det_resulttype:tnode;
var var
@ -757,14 +748,6 @@ implementation
resulttypepass(right); resulttypepass(right);
set_varstate(right,true); set_varstate(right,true);
inserttypeconv(right,t2.resulttype); inserttypeconv(right,t2.resulttype);
(*
{$ifdef var_notification}
include(loopflags,lnf_dont_mind_loopvar_on_exit);
if (hp.nodetype=loadn) and (Tloadnode(hp).symtableentry.typ=varsym) then
loopvar_notid:=Tvarsym(Tloadnode(hp).symtableentry).
register_notification([vn_onread,vn_onwrite],@loop_var_access);
{$endif}
*)
end; end;
@ -819,7 +802,7 @@ implementation
rg.cleartempgen; rg.cleartempgen;
firstpass(right); firstpass(right);
{$ifdef var_notification} {$ifdef loopvar_dont_mind}
{ Check count var, record fields are also allowed in tp7 } { Check count var, record fields are also allowed in tp7 }
include(loopflags,lnf_dont_mind_loopvar_on_exit); include(loopflags,lnf_dont_mind_loopvar_on_exit);
hp:=t2; hp:=t2;
@ -1468,7 +1451,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.60 2002-12-31 09:55:58 daniel Revision 1.61 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.60 2002/12/31 09:55:58 daniel
+ Notification implementation complete + Notification implementation complete
+ Add for loop code optimization using notifications + Add for loop code optimization using notifications
results in 1.5-1.9% speed improvement in nestloop benchmark results in 1.5-1.9% speed improvement in nestloop benchmark

View File

@ -47,9 +47,7 @@ interface
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
function docompare(p: tnode): boolean; override; function docompare(p: tnode): boolean; override;
{$ifdef extdebug} {$ifdef extdebug}
procedure _dowrite;override; procedure _dowrite;override;
@ -84,9 +82,7 @@ interface
function getcopy : tnode;override; function getcopy : tnode;override;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
function docompare(p: tnode): boolean; override; function docompare(p: tnode): boolean; override;
end; end;
tfuncretnodeclass = class of tfuncretnode; tfuncretnodeclass = class of tfuncretnode;
@ -158,9 +154,7 @@ implementation
symtable,paramgr,defutil,defcmp, symtable,paramgr,defutil,defcmp,
htypechk,pass_1, htypechk,pass_1,
ncon,ninl,ncnv,nmem,ncal,cpubase,rgobj,cginfo,cgbase ncon,ninl,ncnv,nmem,ncal,cpubase,rgobj,cginfo,cgbase
{$ifdef var_notification}
,symnot ,symnot
{$endif}
; ;
{***************************************************************************** {*****************************************************************************
@ -366,17 +360,7 @@ implementation
if nf_absolute in flags then if nf_absolute in flags then
tvarsym(symtableentry).varstate:=vs_used tvarsym(symtableentry).varstate:=vs_used
else else
begin resulttype:=tvarsym(symtableentry).vartype;
resulttype:=tvarsym(symtableentry).vartype;
(*
{$ifdef var_notification}
if nf_write in flags then
Tvarsym(symtableentry).trigger_notifications(vn_onwrite)
else
Tvarsym(symtableentry).trigger_notifications(vn_onread);
{$endif}
*)
end;
end; end;
typedconstsym : typedconstsym :
if not(nf_absolute in flags) then if not(nf_absolute in flags) then
@ -430,14 +414,11 @@ implementation
end; end;
end; end;
{$ifdef var_notification}
procedure Tloadnode.mark_write; procedure Tloadnode.mark_write;
begin begin
include(flags,nf_write); include(flags,nf_write);
end; end;
{$endif}
function tloadnode.pass_1 : tnode; function tloadnode.pass_1 : tnode;
begin begin
@ -492,12 +473,10 @@ implementation
if ([vo_is_thread_var,vo_is_dll_var]*tvarsym(symtableentry).varoptions)<>[] then if ([vo_is_thread_var,vo_is_dll_var]*tvarsym(symtableentry).varoptions)<>[] then
registers32:=1; registers32:=1;
{$ifdef var_notification}
if nf_write in flags then if nf_write in flags then
Tvarsym(symtableentry).trigger_notifications(vn_onwrite) Tvarsym(symtableentry).trigger_notifications(vn_onwrite)
else else
Tvarsym(symtableentry).trigger_notifications(vn_onread); Tvarsym(symtableentry).trigger_notifications(vn_onread);
{$endif}
{ count variable references } { count variable references }
{ this will create problem with local var set by { this will create problem with local var set by
@ -558,9 +537,7 @@ implementation
begin begin
inherited create(assignn,l,r); inherited create(assignn,l,r);
{$ifdef var_notification}
l.mark_write; l.mark_write;
{$endif}
assigntype:=at_normal; assigntype:=at_normal;
end; end;
@ -875,13 +852,11 @@ implementation
resulttype:=funcretsym.returntype; resulttype:=funcretsym.returntype;
end; end;
{$ifdef var_notification}
procedure Tfuncretnode.mark_write; procedure Tfuncretnode.mark_write;
begin begin
include(flags,nf_write); include(flags,nf_write);
end; end;
{$endif}
function tfuncretnode.pass_1 : tnode; function tfuncretnode.pass_1 : tnode;
begin begin
@ -1297,7 +1272,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.77 2002-12-31 09:55:58 daniel Revision 1.78 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.77 2002/12/31 09:55:58 daniel
+ Notification implementation complete + Notification implementation complete
+ Add for loop code optimization using notifications + Add for loop code optimization using notifications
results in 1.5-1.9% speed improvement in nestloop benchmark results in 1.5-1.9% speed improvement in nestloop benchmark

View File

@ -80,9 +80,7 @@ interface
constructor create(l : tnode);virtual; constructor create(l : tnode);virtual;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
end; end;
tderefnodeclass = class of tderefnode; tderefnodeclass = class of tderefnode;
@ -96,9 +94,7 @@ interface
function pass_1 : tnode;override; function pass_1 : tnode;override;
function docompare(p: tnode): boolean; override; function docompare(p: tnode): boolean; override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
end; end;
tsubscriptnodeclass = class of tsubscriptnode; tsubscriptnodeclass = class of tsubscriptnode;
@ -106,9 +102,7 @@ interface
constructor create(l,r : tnode);virtual; constructor create(l,r : tnode);virtual;
function pass_1 : tnode;override; function pass_1 : tnode;override;
function det_resulttype:tnode;override; function det_resulttype:tnode;override;
{$ifdef var_notification}
procedure mark_write;override; procedure mark_write;override;
{$endif}
end; end;
tvecnodeclass = class of tvecnode; tvecnodeclass = class of tvecnode;
@ -578,13 +572,11 @@ implementation
CGMessage(cg_e_invalid_qualifier); CGMessage(cg_e_invalid_qualifier);
end; end;
{$ifdef var_notification}
procedure Tderefnode.mark_write; procedure Tderefnode.mark_write;
begin begin
include(flags,nf_write); include(flags,nf_write);
end; end;
{$endif}
function tderefnode.pass_1 : tnode; function tderefnode.pass_1 : tnode;
begin begin
@ -655,13 +647,11 @@ implementation
resulttype:=vs.vartype; resulttype:=vs.vartype;
end; end;
{$ifdef var_notification}
procedure Tsubscriptnode.mark_write; procedure Tsubscriptnode.mark_write;
begin begin
include(flags,nf_write); include(flags,nf_write);
end; end;
{$endif}
function tsubscriptnode.pass_1 : tnode; function tsubscriptnode.pass_1 : tnode;
begin begin
@ -780,13 +770,11 @@ implementation
end; end;
end; end;
{$ifdef var_notification}
procedure Tvecnode.mark_write; procedure Tvecnode.mark_write;
begin begin
include(flags,nf_write); include(flags,nf_write);
end; end;
{$endif}
function tvecnode.pass_1 : tnode; function tvecnode.pass_1 : tnode;
{$ifdef consteval} {$ifdef consteval}
@ -1055,7 +1043,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.41 2002-11-25 17:43:20 peter Revision 1.42 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.41 2002/11/25 17:43:20 peter
* splitted defbase in defutil,symutil,defcmp * splitted defbase in defutil,symutil,defcmp
* merged isconvertable and is_equal into compare_defs(_ext) * merged isconvertable and is_equal into compare_defs(_ext)
* made operator search faster by walking the list only once * made operator search faster by walking the list only once

View File

@ -335,11 +335,9 @@ interface
in a procedure } in a procedure }
function track_state_pass(exec_known:boolean):boolean;virtual; function track_state_pass(exec_known:boolean):boolean;virtual;
{$endif} {$endif}
{$ifdef var_notification}
{ For a t1:=t2 tree, mark the part of the tree t1 that gets { For a t1:=t2 tree, mark the part of the tree t1 that gets
written to (normally the loadnode) as write access. } written to (normally the loadnode) as write access. }
procedure mark_write;virtual;abstract; procedure mark_write;virtual;abstract;
{$endif}
procedure det_temp;virtual;abstract; procedure det_temp;virtual;abstract;
procedure pass_2;virtual;abstract; procedure pass_2;virtual;abstract;
@ -974,7 +972,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.46 2002-12-26 18:24:33 jonas Revision 1.47 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.46 2002/12/26 18:24:33 jonas
* fixed check for whether or not a high parameter was already generated * fixed check for whether or not a high parameter was already generated
* no type checking/conversions for invisible parameters * no type checking/conversions for invisible parameters

View File

@ -34,9 +34,7 @@ interface
symconst,symbase,symtype,symdef, symconst,symbase,symtype,symdef,
{ ppu } { ppu }
ppu,symppu, ppu,symppu,
{$ifdef var_notification}
cclasses,symnot, cclasses,symnot,
{$endif}
{ aasm } { aasm }
aasmbase,aasmtai,cpubase, aasmbase,aasmtai,cpubase,
globals globals
@ -182,9 +180,7 @@ interface
varspez : tvarspez; { sets the type of access } varspez : tvarspez; { sets the type of access }
varstate : tvarstate; varstate : tvarstate;
paraitem : tparaitem; paraitem : tparaitem;
{$ifdef var_notification}
notifications : Tlinkedlist; notifications : Tlinkedlist;
{$endif}
constructor create(const n : string;const tt : ttype); constructor create(const n : string;const tt : ttype);
constructor create_dll(const n : string;const tt : ttype); constructor create_dll(const n : string;const tt : ttype);
constructor create_C(const n,mangled : string;const tt : ttype); constructor create_C(const n,mangled : string;const tt : ttype);
@ -196,12 +192,10 @@ interface
procedure set_mangledname(const s:string); procedure set_mangledname(const s:string);
function getsize : longint; function getsize : longint;
function getvaluesize : longint; function getvaluesize : longint;
{$ifdef var_notification}
procedure trigger_notifications(what:Tnotification_flag); procedure trigger_notifications(what:Tnotification_flag);
function register_notification(flags:Tnotification_flags; function register_notification(flags:Tnotification_flags;
callback:Tnotification_callback):cardinal; callback:Tnotification_callback):cardinal;
procedure unregister_notification(id:cardinal); procedure unregister_notification(id:cardinal);
{$endif}
{$ifdef GDB} {$ifdef GDB}
function stabstring : pchar;override; function stabstring : pchar;override;
procedure concatstabto(asmlist : taasmoutput);override; procedure concatstabto(asmlist : taasmoutput);override;
@ -1653,10 +1647,8 @@ implementation
destructor tvarsym.destroy; destructor tvarsym.destroy;
begin begin
{$ifdef var_notification}
if assigned(notifications) then if assigned(notifications) then
notifications.destroy; notifications.destroy;
{$endif}
inherited destroy; inherited destroy;
end; end;
@ -1720,7 +1712,6 @@ implementation
end; end;
{$ifdef var_notification}
procedure Tvarsym.trigger_notifications(what:Tnotification_flag); procedure Tvarsym.trigger_notifications(what:Tnotification_flag);
var n:Tnotification; var n:Tnotification;
@ -1774,7 +1765,6 @@ implementation
internalerror(200212311) internalerror(200212311)
end; end;
end; end;
{$endif}
{$ifdef GDB} {$ifdef GDB}
function tvarsym.stabstring : pchar; function tvarsym.stabstring : pchar;
@ -2569,7 +2559,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.89 2003-01-02 11:14:02 michael Revision 1.90 2003-01-03 12:15:56 daniel
* Removed ifdefs around notifications
ifdefs around for loop optimizations remain
Revision 1.89 2003/01/02 11:14:02 michael
+ Patch from peter to support initial values for local variables + Patch from peter to support initial values for local variables
Revision 1.88 2003/01/01 22:51:03 peter Revision 1.88 2003/01/01 22:51:03 peter