From af875ba836454eaf5a45dea24da08460733efe36 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Jul 2009 00:51:06 -0500 Subject: [PATCH 1/2] compiler.cfg: bug fixes in GC check insertion and fixnum intrinsics --- .../cfg/instructions/instructions.factor | 2 +- .../cfg/intrinsics/fixnum/fixnum.factor | 43 +++++++------------ .../linear-scan/assignment/assignment.factor | 4 +- 3 files changed, 18 insertions(+), 31 deletions(-) diff --git a/basis/compiler/cfg/instructions/instructions.factor b/basis/compiler/cfg/instructions/instructions.factor index 17a02175d5..8e2d2ff75e 100644 --- a/basis/compiler/cfg/instructions/instructions.factor +++ b/basis/compiler/cfg/instructions/instructions.factor @@ -240,7 +240,7 @@ INSN: _compare-imm-branch label { src1 vreg } { src2 integer } cc ; INSN: _compare-float-branch < _conditional-branch ; -TUPLE: spill-slot n ; C: spill-slot +TUPLE: spill-slot { n integer } ; C: spill-slot INSN: _gc { temp1 vreg } { temp2 vreg } gc-roots gc-root-count gc-root-size ; diff --git a/basis/compiler/cfg/intrinsics/fixnum/fixnum.factor b/basis/compiler/cfg/intrinsics/fixnum/fixnum.factor index bfae02f553..9efac9e81a 100644 --- a/basis/compiler/cfg/intrinsics/fixnum/fixnum.factor +++ b/basis/compiler/cfg/intrinsics/fixnum/fixnum.factor @@ -39,38 +39,25 @@ IN: compiler.cfg.intrinsics.fixnum :: emit-commutative-fixnum-op ( node insn imm-insn -- ) [let | infos [ node node-input-infos ] | - infos first value-info-small-tagged? - [ infos imm-insn emit-fixnum-imm-op1 ] - [ - infos second value-info-small-tagged? [ - infos imm-insn emit-fixnum-imm-op2 - ] [ - insn (emit-fixnum-op) - ] if - ] if + { + { [ infos first value-info-small-tagged? ] [ infos imm-insn emit-fixnum-imm-op1 ] } + { [ infos second value-info-small-tagged? ] [ infos imm-insn emit-fixnum-imm-op2 ] } + [ insn (emit-fixnum-op) ] + } cond ds-push ] ; inline -: (emit-fixnum-shift-fast) ( obj node -- obj ) - literal>> dup sgn { - { -1 [ neg tag-bits get + ^^sar-imm ^^tag-fixnum ] } - { 0 [ drop ] } - { 1 [ ^^shl-imm ] } - } case ; - : emit-fixnum-shift-fast ( node -- ) - dup node-input-infos dup first value-info-small-fixnum? [ + dup node-input-infos dup second value-info-small-fixnum? [ nip - [ ds-pop ds-drop ] dip first (emit-fixnum-shift-fast) ds-push - ] [ - drop - dup node-input-infos dup second value-info-small-fixnum? [ - nip - [ ds-drop ds-pop ] dip second (emit-fixnum-shift-fast) ds-push - ] [ - drop emit-primitive - ] if - ] if ; + [ ds-drop ds-pop ] dip + second literal>> dup sgn { + { -1 [ neg tag-bits get + ^^sar-imm ^^tag-fixnum ] } + { 0 [ drop ] } + { 1 [ ^^shl-imm ] } + } case + ds-push + ] [ drop emit-primitive ] if ; : emit-fixnum-bitnot ( -- ) ds-pop ^^not tag-mask get ^^xor-imm ds-push ; @@ -89,7 +76,7 @@ IN: compiler.cfg.intrinsics.fixnum : emit-fixnum*fast ( node -- ) node-input-infos - dup first value-info-small-fixnum? + dup first value-info-small-fixnum? drop f [ (emit-fixnum*fast-imm1) ] [ diff --git a/basis/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor index 745146b56e..0956b7263f 100644 --- a/basis/compiler/cfg/linear-scan/assignment/assignment.factor +++ b/basis/compiler/cfg/linear-scan/assignment/assignment.factor @@ -136,8 +136,8 @@ M: vreg-insn assign-registers-in-insn register-mapping ; : compute-live-spill-slots ( -- spill-slots ) - spill-slots get values [ values ] map concat - [ [ vreg>> ] [ reload-from>> ] bi ] { } map>assoc ; + spill-slots get values + [ [ vreg>> swap ] { } assoc-map-as ] map concat ; M: ##gc assign-registers-in-insn dup call-next-method From 2de41f01dae4132d4de490b24949ce9d9976f6aa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 2 Jul 2009 01:05:59 -0500 Subject: [PATCH 2/2] compiler.cfg.optimizer: enable branch folding --- basis/compiler/cfg/optimizer/optimizer.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basis/compiler/cfg/optimizer/optimizer.factor b/basis/compiler/cfg/optimizer/optimizer.factor index 529f93e9fb..84eb8a84d1 100644 --- a/basis/compiler/cfg/optimizer/optimizer.factor +++ b/basis/compiler/cfg/optimizer/optimizer.factor @@ -37,8 +37,8 @@ SYMBOL: check-optimizer? compute-liveness alias-analysis value-numbering - ! fold-branches - ! compute-predecessors + fold-branches + compute-predecessors eliminate-dead-code eliminate-write-barriers eliminate-phis