diff --git a/basis/bootstrap/compiler/compiler.factor b/basis/bootstrap/compiler/compiler.factor index 4394535b8d..d0f7147452 100755 --- a/basis/bootstrap/compiler/compiler.factor +++ b/basis/bootstrap/compiler/compiler.factor @@ -94,6 +94,7 @@ nl { memq? split harvest sift cut cut-slice start index clone set-at reverse push-all class number>string string>number + like clone-like } compile-unoptimized "." write flush diff --git a/basis/compiler/cfg/linear-scan/resolve/resolve.factor b/basis/compiler/cfg/linear-scan/resolve/resolve.factor index 932e3dc6d6..b1fe1572cd 100644 --- a/basis/compiler/cfg/linear-scan/resolve/resolve.factor +++ b/basis/compiler/cfg/linear-scan/resolve/resolve.factor @@ -26,10 +26,9 @@ SYMBOL: spill-temps 2dup = [ 2drop ] [ vreg reg-class>> add-mapping ] if ; : compute-mappings ( bb to -- mappings ) - [ - dup live-in keys - [ resolve-value-data-flow ] with with each - ] { } make ; + dup live-in dup assoc-empty? [ 3drop f ] [ + [ keys [ resolve-value-data-flow ] with with each ] { } make + ] if ; : memory->register ( from to -- ) swap [ first2 ] [ first n>> ] bi* _reload ; diff --git a/basis/compiler/cfg/stacks/finalize/finalize.factor b/basis/compiler/cfg/stacks/finalize/finalize.factor index 5c8c1343d0..094b3c5f1e 100644 --- a/basis/compiler/cfg/stacks/finalize/finalize.factor +++ b/basis/compiler/cfg/stacks/finalize/finalize.factor @@ -30,8 +30,12 @@ ERROR: bad-peek dst loc ; [ dup n>> 0 < [ 2drop ] [ ##replace ] if ] each-insertion ; : visit-edge ( from to -- ) - 2dup [ [ insert-peeks ] [ insert-replaces ] 2bi ] V{ } make - [ 2drop ] [ insert-basic-block ] if-empty ; + ! If both blocks are subroutine calls, don't bother + ! computing anything. + 2dup [ kill-block? ] both? [ 2drop ] [ + 2dup [ [ insert-peeks ] [ insert-replaces ] 2bi ] V{ } make + [ 2drop ] [ insert-basic-block ] if-empty + ] if ; : visit-block ( bb -- ) [ predecessors>> ] keep '[ _ visit-edge ] each ; diff --git a/basis/compiler/cfg/two-operand/two-operand.factor b/basis/compiler/cfg/two-operand/two-operand.factor index 3508585552..7a8b160acd 100644 --- a/basis/compiler/cfg/two-operand/two-operand.factor +++ b/basis/compiler/cfg/two-operand/two-operand.factor @@ -93,8 +93,10 @@ M: ##not convert-two-operand* M: insn convert-two-operand* , ; -: (convert-two-operand) ( cfg -- cfg' ) - [ [ convert-two-operand* ] each ] V{ } make ; +: (convert-two-operand) ( insns -- insns' ) + dup first kill-vreg-insn? [ + [ [ convert-two-operand* ] each ] V{ } make + ] unless ; : convert-two-operand ( cfg -- cfg' ) two-operand? [ [ (convert-two-operand) ] local-optimization ] when ; \ No newline at end of file diff --git a/core/make/make.factor b/core/make/make.factor index f8bdaa1dbb..8b6aa3a3d3 100644 --- a/core/make/make.factor +++ b/core/make/make.factor @@ -8,7 +8,7 @@ SYMBOL: building : make ( quot exemplar -- seq ) [ [ - 1024 swap new-resizable [ + 100 swap new-resizable [ building set call ] keep ] keep like