Remove some unnecessary work from stack-analysis pass
parent
50a86a8d93
commit
43fab5b2ae
|
@ -92,14 +92,11 @@ M: poison-insn visit call-next-method poison-state ;
|
||||||
M: kill-vreg-insn visit sync-state , ;
|
M: kill-vreg-insn visit sync-state , ;
|
||||||
|
|
||||||
! Maps basic-blocks to states
|
! Maps basic-blocks to states
|
||||||
SYMBOLS: state-in state-out ;
|
SYMBOL: state-out
|
||||||
|
|
||||||
: block-in-state ( bb -- states )
|
: block-in-state ( bb -- states )
|
||||||
dup predecessors>> state-out get '[ _ at ] map merge-states ;
|
dup predecessors>> state-out get '[ _ at ] map merge-states ;
|
||||||
|
|
||||||
: set-block-in-state ( state bb -- )
|
|
||||||
[ clone ] dip state-in get set-at ;
|
|
||||||
|
|
||||||
: set-block-out-state ( state bb -- )
|
: set-block-out-state ( state bb -- )
|
||||||
[ clone ] dip state-out get set-at ;
|
[ clone ] dip state-out get set-at ;
|
||||||
|
|
||||||
|
@ -109,21 +106,18 @@ SYMBOLS: state-in state-out ;
|
||||||
[
|
[
|
||||||
dup basic-block set
|
dup basic-block set
|
||||||
dup block-in-state
|
dup block-in-state
|
||||||
[ swap set-block-in-state ] [
|
|
||||||
state [
|
state [
|
||||||
[ instructions>> [ visit ] each ]
|
[ instructions>> [ visit ] each ]
|
||||||
[ [ state get ] dip set-block-out-state ]
|
[ [ state get ] dip set-block-out-state ]
|
||||||
[ ]
|
[ ]
|
||||||
tri
|
tri
|
||||||
] with-variable
|
] with-variable
|
||||||
] 2bi
|
|
||||||
] V{ } make >>instructions drop ;
|
] V{ } make >>instructions drop ;
|
||||||
|
|
||||||
: stack-analysis ( cfg -- cfg' )
|
: stack-analysis ( cfg -- cfg' )
|
||||||
[
|
[
|
||||||
<hashed-dlist> work-list set
|
<hashed-dlist> work-list set
|
||||||
H{ } clone copies set
|
H{ } clone copies set
|
||||||
H{ } clone state-in set
|
|
||||||
H{ } clone state-out set
|
H{ } clone state-out set
|
||||||
dup [ visit-block ] each-basic-block
|
dup [ visit-block ] each-basic-block
|
||||||
global-optimization? get [ work-list get [ visit-block ] slurp-deque ] when
|
global-optimization? get [ work-list get [ visit-block ] slurp-deque ] when
|
||||||
|
|
Loading…
Reference in New Issue