From 3c1f223d90f690c6b10d656745cd5f5edf1df8df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Mon, 19 Jan 2015 10:08:06 +0000 Subject: [PATCH] compiler.cfg.stacks.*: use insn# as the key in the stack-record instead of the insn tuple itself --- basis/compiler/cfg/stacks/map/map.factor | 16 ++++++++++++---- basis/compiler/cfg/stacks/vacant/vacant.factor | 6 +++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/basis/compiler/cfg/stacks/map/map.factor b/basis/compiler/cfg/stacks/map/map.factor index 0ad9a7e2ea..10f62d4dc1 100644 --- a/basis/compiler/cfg/stacks/map/map.factor +++ b/basis/compiler/cfg/stacks/map/map.factor @@ -1,6 +1,6 @@ USING: accessors arrays assocs combinators compiler.cfg.dataflow-analysis -compiler.cfg.instructions compiler.cfg.registers fry kernel math math.order -namespaces sequences ; +compiler.cfg.instructions compiler.cfg.linearization compiler.cfg.registers fry +kernel math math.order namespaces sequences ; QUALIFIED: sets IN: compiler.cfg.stacks.map @@ -61,9 +61,12 @@ FORWARD-ANALYSIS: map SYMBOL: stack-record +: register-stack-state ( state insn -- ) + insn#>> stack-record get 2dup at f assert= set-at ; + M: map-analysis transfer-set ( in-set bb dfa -- out-set ) drop instructions>> swap [ - [ stack-record get set-at ] [ visit-insn ] 2bi + [ register-stack-state ] [ visit-insn ] 2bi ] reduce ; M: map-analysis ignore-block? ( bb dfa -- ? ) @@ -73,5 +76,10 @@ M: map-analysis ignore-block? ( bb dfa -- ? ) M: map-analysis join-sets ( sets bb dfa -- set ) 2drop [ initial-state ] [ first ] if-empty ; +: uniquely-number-instructions ( cfg -- ) + cfg>insns [ swap insn#<< ] each-index ; + : trace-stack-state ( cfg -- assoc ) - H{ } clone stack-record set compute-map-sets stack-record get ; + H{ } clone stack-record set + [ uniquely-number-instructions ] [ compute-map-sets ] bi + stack-record get ; diff --git a/basis/compiler/cfg/stacks/vacant/vacant.factor b/basis/compiler/cfg/stacks/vacant/vacant.factor index 002bbef51f..de9663dc98 100644 --- a/basis/compiler/cfg/stacks/vacant/vacant.factor +++ b/basis/compiler/cfg/stacks/vacant/vacant.factor @@ -1,5 +1,5 @@ USING: accessors arrays assocs compiler.cfg.instructions -compiler.cfg.stacks.map fry kernel math sequences ; +compiler.cfg.linearization compiler.cfg.stacks.map fry kernel math sequences ; IN: compiler.cfg.stacks.vacant ! ! Utils @@ -31,5 +31,5 @@ IN: compiler.cfg.stacks.vacant { >>scrub-d >>check-d >>scrub-r >>check-r } write-slots ; : fill-gc-maps ( cfg -- ) - trace-stack-state [ drop gc-map-insn? ] assoc-filter - [ swap gc-map>> set-gc-map ] assoc-each ; + [ trace-stack-state ] [ cfg>insns [ gc-map-insn? ] filter ] bi + [ [ insn#>> of ] [ gc-map>> ] bi set-gc-map ] with each ;