From ca4f442eaa20055e5ded3af24ee577c5ed77741c Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Mon, 3 May 2010 18:20:28 -0400 Subject: [PATCH 1/2] compiler.cfg.alias-analysis: storing a reference into an object now merges the reference's alias class with the heap alias class --- .../cfg/alias-analysis/alias-analysis.factor | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/basis/compiler/cfg/alias-analysis/alias-analysis.factor b/basis/compiler/cfg/alias-analysis/alias-analysis.factor index 3cf099d149..438395e2a7 100644 --- a/basis/compiler/cfg/alias-analysis/alias-analysis.factor +++ b/basis/compiler/cfg/alias-analysis/alias-analysis.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel math namespaces assocs hashtables sequences arrays accessors words vectors combinators combinators.short-circuit -sets classes layouts cpu.architecture +sets classes layouts fry cpu.architecture compiler.cfg compiler.cfg.rpo compiler.cfg.def-use @@ -100,6 +100,15 @@ SYMBOL: acs>vregs : each-alias ( vreg quot -- ) [ aliases ] dip each ; inline +: merge-acs ( vreg into -- ) + [ vreg>ac ] dip + 2dup eq? [ 2drop ] [ + [ ac>vregs ] dip + [ vregs>acs get '[ [ _ ] dip _ set-at ] each ] + [ acs>vregs get at push-all ] + 2bi + ] if ; + ! Map vregs -> slot# -> vreg SYMBOL: live-slots @@ -187,7 +196,8 @@ SYMBOL: heap-ac : remember-set-slot ( slot#/f vreg -- ) over [ [ record-constant-set-slot ] - [ kill-constant-set-slot ] 2bi + [ kill-constant-set-slot ] + 2bi ] [ nip kill-computed-set-slot ] if ; GENERIC: insn-slot# ( insn -- slot#/f ) @@ -262,7 +272,10 @@ M: ##write analyze-aliases* dup [ src>> resolve ] [ insn-slot# ] [ insn-object ] tri 3dup idempotent? [ 3drop ] [ - [ remember-set-slot drop ] [ load-slot ] 3bi + [ 2drop heap-ac get merge-acs ] + [ remember-set-slot drop ] + [ load-slot ] + 3tri ] if ; M: ##copy analyze-aliases* From 4352902bb6b9a65e2579c19e3a8805a47028ab61 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Mon, 3 May 2010 18:23:54 -0400 Subject: [PATCH 2/2] compiler.cfg.empty-blocks: remove unused pass --- .../cfg/empty-blocks/empty-blocks.factor | 47 ------------------- .../cfg/finalization/finalization.factor | 7 ++- basis/compiler/cfg/optimizer/optimizer.factor | 1 - 3 files changed, 3 insertions(+), 52 deletions(-) delete mode 100644 basis/compiler/cfg/empty-blocks/empty-blocks.factor diff --git a/basis/compiler/cfg/empty-blocks/empty-blocks.factor b/basis/compiler/cfg/empty-blocks/empty-blocks.factor deleted file mode 100644 index 605c572cb3..0000000000 --- a/basis/compiler/cfg/empty-blocks/empty-blocks.factor +++ /dev/null @@ -1,47 +0,0 @@ -! Copyright (C) 2008, 2009 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: kernel accessors sequences namespaces combinators -combinators.short-circuit classes vectors compiler.cfg -compiler.cfg.instructions compiler.cfg.rpo ; -IN: compiler.cfg.empty-blocks - -<PRIVATE - -: update-predecessor ( bb -- ) - ! We have to replace occurrences of bb with bb's successor - ! in bb's predecessor's list of successors. - dup predecessors>> first [ - [ - 2dup eq? [ drop successors>> first ] [ nip ] if - ] with map - ] change-successors drop ; - -: update-successor ( bb -- ) - ! We have to replace occurrences of bb with bb's predecessor - ! in bb's sucessor's list of predecessors. - dup successors>> first [ - [ - 2dup eq? [ drop predecessors>> first ] [ nip ] if - ] with map - ] change-predecessors drop ; - -SYMBOL: changed? - -: delete-basic-block ( bb -- ) - [ update-predecessor ] [ update-successor ] bi - changed? on ; - -: delete-basic-block? ( bb -- ? ) - { - [ instructions>> length 1 = ] - [ predecessors>> length 1 = ] - [ successors>> length 1 = ] - [ instructions>> first ##branch? ] - } 1&& ; - -PRIVATE> - -: delete-empty-blocks ( cfg -- cfg' ) - changed? off - dup [ dup delete-basic-block? [ delete-basic-block ] [ drop ] if ] each-basic-block - changed? get [ cfg-changed ] when ; \ No newline at end of file diff --git a/basis/compiler/cfg/finalization/finalization.factor b/basis/compiler/cfg/finalization/finalization.factor index 3ee7ba06e3..681563da34 100644 --- a/basis/compiler/cfg/finalization/finalization.factor +++ b/basis/compiler/cfg/finalization/finalization.factor @@ -1,9 +1,8 @@ ! Copyright (C) 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: compiler.cfg.empty-blocks compiler.cfg.gc-checks -compiler.cfg.representations compiler.cfg.save-contexts -compiler.cfg.ssa.destruction compiler.cfg.build-stack-frame -compiler.cfg.linear-scan ; +USING: compiler.cfg.gc-checks compiler.cfg.representations +compiler.cfg.save-contexts compiler.cfg.ssa.destruction +compiler.cfg.build-stack-frame compiler.cfg.linear-scan ; IN: compiler.cfg.finalization : finalize-cfg ( cfg -- cfg' ) diff --git a/basis/compiler/cfg/optimizer/optimizer.factor b/basis/compiler/cfg/optimizer/optimizer.factor index ca1886bcd6..d819e227c9 100644 --- a/basis/compiler/cfg/optimizer/optimizer.factor +++ b/basis/compiler/cfg/optimizer/optimizer.factor @@ -14,7 +14,6 @@ compiler.cfg.representations compiler.cfg.gc-checks compiler.cfg.save-contexts compiler.cfg.ssa.destruction -compiler.cfg.empty-blocks compiler.cfg.checker ; IN: compiler.cfg.optimizer