From 2f1fdaad6cf74ea5f29d9989c18efe03a7902646 Mon Sep 17 00:00:00 2001 From: Alex Vondrak Date: Tue, 5 Jul 2011 19:19:30 -0700 Subject: [PATCH] compiler.cfg.gvn: forgot to make certain defs available --- extra/compiler/cfg/gvn/avail/avail.factor | 3 +-- extra/compiler/cfg/gvn/gvn.factor | 15 +++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/extra/compiler/cfg/gvn/avail/avail.factor b/extra/compiler/cfg/gvn/avail/avail.factor index 7851e83723..a60e72a2e4 100644 --- a/extra/compiler/cfg/gvn/avail/avail.factor +++ b/extra/compiler/cfg/gvn/avail/avail.factor @@ -36,6 +36,5 @@ M: avail-analysis transfer-set drop defined assoc-union ; : with-available-uses? ( quot -- ? ) keep swap [ available-uses? ] [ drop f ] if ; inline -: make-available ( insn -- insn ) - dup dst>> +: make-available ( vreg -- ) basic-block get avail-ins get [ dupd clone ?set-at ] change-at ; diff --git a/extra/compiler/cfg/gvn/gvn.factor b/extra/compiler/cfg/gvn/gvn.factor index 1ce57aeb31..40281d0299 100644 --- a/extra/compiler/cfg/gvn/gvn.factor +++ b/extra/compiler/cfg/gvn/gvn.factor @@ -83,18 +83,21 @@ GENERIC: gcse ( insn -- insn' ) M: array gcse [ gcse ] map ; -M: alien-call-insn gcse ; -M: ##callback-inputs gcse ; -M: ##copy gcse ; +: defs-available ( insn -- insn ) + dup defs-vregs [ make-available ] each ; + +M: alien-call-insn gcse defs-available ; +M: ##callback-inputs gcse defs-available ; +M: ##copy gcse defs-available ; : ?eliminate ( insn vn -- insn' ) dup available? [ - [ dst>> ] dip - ] [ drop make-available ] if ; + [ dst>> dup make-available ] dip + ] [ drop defs-available ] if ; : eliminate-redundancy ( insn -- insn' ) dup >expr exprs>vns get at - [ ?eliminate ] [ make-available ] if* ; + [ ?eliminate ] [ defs-available ] if* ; M: ##phi gcse dup inputs>> values [ vreg>vn ] map sift