Modifying dependence graph construction for faster compile time
parent
7565588f4f
commit
6d36bfd104
|
@ -51,23 +51,17 @@ M: node hashcode* nip number>> ;
|
||||||
node insn>> uses-vregs [ definers at [ node +data+ precedes ] when* ] each
|
node insn>> uses-vregs [ definers at [ node +data+ precedes ] when* ] each
|
||||||
] each ;
|
] each ;
|
||||||
|
|
||||||
: make-chain ( nodes -- )
|
|
||||||
[ dup rest-slice [ +control+ precedes ] 2each ] unless-empty ;
|
|
||||||
|
|
||||||
: instruction-chain ( nodes quot -- )
|
|
||||||
'[ insn>> @ ] filter make-chain ; inline
|
|
||||||
|
|
||||||
UNION: stack-read-write ##peek ##replace ;
|
UNION: stack-read-write ##peek ##replace ;
|
||||||
UNION: stack-change-height ##inc-d ##inc-r ;
|
|
||||||
UNION: stack-insn stack-read-write stack-change-height ;
|
|
||||||
|
|
||||||
GENERIC: data-stack-insn? ( insn -- ? )
|
PREDICATE: ds-read-write < stack-read-write
|
||||||
M: object data-stack-insn? drop f ;
|
loc>> ds-loc? ;
|
||||||
M: ##inc-d data-stack-insn? drop t ;
|
UNION: data-stack-insn
|
||||||
M: stack-read-write data-stack-insn? loc>> ds-loc? ;
|
##inc-d ds-read-write ;
|
||||||
|
|
||||||
: retain-stack-insn? ( insn -- ? )
|
PREDICATE: rs-read-write < stack-read-write
|
||||||
dup stack-insn? [ data-stack-insn? not ] [ drop f ] if ;
|
loc>> rs-loc? ;
|
||||||
|
UNION: retain-stack-insn
|
||||||
|
##inc-r rs-read-write ;
|
||||||
|
|
||||||
UNION: ##alien-read
|
UNION: ##alien-read
|
||||||
##alien-double ##alien-float ##alien-cell ##alien-vector
|
##alien-double ##alien-float ##alien-cell ##alien-vector
|
||||||
|
@ -90,15 +84,38 @@ UNION: string-memory-insn
|
||||||
UNION: alien-call-insn
|
UNION: alien-call-insn
|
||||||
##save-context ##alien-invoke ##alien-indirect ##alien-callback ;
|
##save-context ##alien-invoke ##alien-indirect ##alien-callback ;
|
||||||
|
|
||||||
|
: chain ( node var -- )
|
||||||
|
dup get [
|
||||||
|
pick +control+ precedes
|
||||||
|
] when*
|
||||||
|
set ;
|
||||||
|
|
||||||
|
GENERIC: add-control-edge ( node insn -- )
|
||||||
|
|
||||||
|
M: data-stack-insn add-control-edge
|
||||||
|
drop data-stack-insn chain ;
|
||||||
|
|
||||||
|
M: retain-stack-insn add-control-edge
|
||||||
|
drop retain-stack-insn chain ;
|
||||||
|
|
||||||
|
M: alien-memory-insn add-control-edge
|
||||||
|
drop alien-memory-insn chain ;
|
||||||
|
|
||||||
|
M: slot-memory-insn add-control-edge
|
||||||
|
drop slot-memory-insn chain ;
|
||||||
|
|
||||||
|
M: string-memory-insn add-control-edge
|
||||||
|
drop string-memory-insn chain ;
|
||||||
|
|
||||||
|
M: alien-call-insn add-control-edge
|
||||||
|
drop alien-call-insn chain ;
|
||||||
|
|
||||||
|
M: object add-control-edge 2drop ;
|
||||||
|
|
||||||
: add-control-edges ( nodes -- )
|
: add-control-edges ( nodes -- )
|
||||||
{
|
[
|
||||||
[ [ data-stack-insn? ] instruction-chain ]
|
[ dup insn>> add-control-edge ] each
|
||||||
[ [ retain-stack-insn? ] instruction-chain ]
|
] with-scope ;
|
||||||
[ [ alien-memory-insn? ] instruction-chain ]
|
|
||||||
[ [ slot-memory-insn? ] instruction-chain ]
|
|
||||||
[ [ string-memory-insn? ] instruction-chain ]
|
|
||||||
[ [ alien-call-insn? ] instruction-chain ]
|
|
||||||
} cleave ;
|
|
||||||
|
|
||||||
: set-follows ( nodes -- )
|
: set-follows ( nodes -- )
|
||||||
[
|
[
|
||||||
|
@ -112,11 +129,11 @@ UNION: alien-call-insn
|
||||||
|
|
||||||
: build-dependence-graph ( instructions -- )
|
: build-dependence-graph ( instructions -- )
|
||||||
[ <node> ] map {
|
[ <node> ] map {
|
||||||
[ add-data-edges ]
|
|
||||||
[ add-control-edges ]
|
[ add-control-edges ]
|
||||||
|
[ add-data-edges ]
|
||||||
[ set-follows ]
|
[ set-follows ]
|
||||||
[ nodes set ]
|
|
||||||
[ set-roots ]
|
[ set-roots ]
|
||||||
|
[ nodes set ]
|
||||||
} cleave ;
|
} cleave ;
|
||||||
|
|
||||||
! Sethi-Ulmann numbering
|
! Sethi-Ulmann numbering
|
||||||
|
|
Loading…
Reference in New Issue