compiler: cleaner use of sets.
parent
7c39f8134b
commit
b8097f9221
|
@ -85,10 +85,8 @@ SYMBOL: worklist
|
||||||
SYMBOL: visited
|
SYMBOL: visited
|
||||||
|
|
||||||
: add-to-worklist ( bb -- )
|
: add-to-worklist ( bb -- )
|
||||||
dup visited get in? [ drop ] [
|
dup visited get ?adjoin
|
||||||
[ visited get adjoin ]
|
[ worklist get push-front ] [ drop ] if ;
|
||||||
[ worklist get push-front ] bi
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
: init-worklist ( cfg -- )
|
: init-worklist ( cfg -- )
|
||||||
<dlist> worklist set
|
<dlist> worklist set
|
||||||
|
|
|
@ -59,12 +59,11 @@ SYMBOLS: work-list loop-heads visited ;
|
||||||
successors>> <reversed> [ loop-nesting-at ] sort-with ;
|
successors>> <reversed> [ loop-nesting-at ] sort-with ;
|
||||||
|
|
||||||
: process-block ( bb -- )
|
: process-block ( bb -- )
|
||||||
dup visited? [ drop ] [
|
dup visited get ?adjoin [
|
||||||
[ , ]
|
[ , ]
|
||||||
[ visited get adjoin ]
|
|
||||||
[ sorted-successors [ process-successor ] each ]
|
[ sorted-successors [ process-successor ] each ]
|
||||||
tri
|
bi
|
||||||
] if ;
|
] [ drop ] if ;
|
||||||
|
|
||||||
: (linearization-order) ( cfg -- bbs )
|
: (linearization-order) ( cfg -- bbs )
|
||||||
init-linearization-order
|
init-linearization-order
|
||||||
|
|
|
@ -31,25 +31,22 @@ DEFER: find-loop-headers
|
||||||
if ;
|
if ;
|
||||||
|
|
||||||
: find-loop-headers ( bb -- )
|
: find-loop-headers ( bb -- )
|
||||||
dup visited get in? [ drop ] [
|
dup visited get ?adjoin [
|
||||||
{
|
active get
|
||||||
[ visited get adjoin ]
|
[ adjoin ]
|
||||||
[ active get adjoin ]
|
[ [ dup successors>> ] dip '[ _ visit-edge ] with each ]
|
||||||
[ dup successors>> active get '[ _ visit-edge ] with each ]
|
[ delete ]
|
||||||
[ active get delete ]
|
2tri
|
||||||
} cleave
|
] [ drop ] if ;
|
||||||
] if ;
|
|
||||||
|
|
||||||
SYMBOL: work-list
|
SYMBOL: work-list
|
||||||
|
|
||||||
: process-loop-block ( bb loop -- )
|
: process-loop-block ( bb loop -- )
|
||||||
2dup blocks>> in? [ 2drop ] [
|
2dup blocks>> ?adjoin [
|
||||||
[ blocks>> adjoin ] [
|
2dup header>> eq? [ 2drop ] [
|
||||||
2dup header>> eq? [ 2drop ] [
|
drop predecessors>> work-list get push-all-front
|
||||||
drop predecessors>> work-list get push-all-front
|
] if
|
||||||
] if
|
] [ 2drop ] if ;
|
||||||
] 2bi
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
: process-loop-ends ( loop -- )
|
: process-loop-ends ( loop -- )
|
||||||
[ ends>> members <dlist> [ push-all-front ] [ work-list set ] [ ] tri ] keep
|
[ ends>> members <dlist> [ push-all-front ] [ work-list set ] [ ] tri ] keep
|
||||||
|
|
|
@ -15,8 +15,7 @@ TUPLE: real-usage value node ;
|
||||||
SYMBOLS: visited accum ;
|
SYMBOLS: visited accum ;
|
||||||
|
|
||||||
: if-not-visited ( value quot -- )
|
: if-not-visited ( value quot -- )
|
||||||
over visited get in?
|
over visited get ?adjoin [ call ] [ 2drop ] if ; inline
|
||||||
[ 2drop ] [ over visited get adjoin call ] if ; inline
|
|
||||||
|
|
||||||
: with-simplified-def-use ( quot -- real-usages )
|
: with-simplified-def-use ( quot -- real-usages )
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue