diff --git a/basis/compiler/cfg/checker/checker.factor b/basis/compiler/cfg/checker/checker.factor index ef8aa56cd2..510d7c45cb 100644 --- a/basis/compiler/cfg/checker/checker.factor +++ b/basis/compiler/cfg/checker/checker.factor @@ -1,18 +1,22 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel compiler.cfg.instructions compiler.cfg.rpo -compiler.cfg.def-use compiler.cfg.linearization compiler.cfg.utilities -compiler.cfg.mr combinators.short-circuit accessors math -sequences sets assocs ; +USING: kernel combinators.short-circuit accessors math sequences +sets assocs compiler.cfg.instructions compiler.cfg.rpo +compiler.cfg.def-use compiler.cfg.linearization +compiler.cfg.utilities compiler.cfg.mr compiler.utilities ; IN: compiler.cfg.checker +! Check invariants + ERROR: bad-kill-block bb ; : check-kill-block ( bb -- ) - dup instructions>> first2 - swap ##epilogue? [ - { [ ##return? ] [ ##callback-return? ] [ ##jump? ] } 1|| - ] [ ##branch? ] if + dup instructions>> dup penultimate ##epilogue? [ + { + [ length 2 = ] + [ last { [ ##return? ] [ ##callback-return? ] [ ##jump? ] } 1|| ] + } 1&& + ] [ last ##branch? ] if [ drop ] [ bad-kill-block ] if ; ERROR: last-insn-not-a-jump bb ; diff --git a/basis/compiler/cfg/mr/mr.factor b/basis/compiler/cfg/mr/mr.factor index de679cbcc2..a46e6c15cb 100644 --- a/basis/compiler/cfg/mr/mr.factor +++ b/basis/compiler/cfg/mr/mr.factor @@ -2,11 +2,13 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel namespaces accessors compiler.cfg compiler.cfg.linearization compiler.cfg.gc-checks -compiler.cfg.linear-scan compiler.cfg.build-stack-frame ; +compiler.cfg.save-contexts compiler.cfg.linear-scan +compiler.cfg.build-stack-frame ; IN: compiler.cfg.mr : build-mr ( cfg -- mr ) insert-gc-checks + insert-save-contexts linear-scan flatten-cfg build-stack-frame ; \ No newline at end of file diff --git a/basis/compiler/cfg/optimizer/optimizer.factor b/basis/compiler/cfg/optimizer/optimizer.factor index 35e0c6e3aa..649032b469 100644 --- a/basis/compiler/cfg/optimizer/optimizer.factor +++ b/basis/compiler/cfg/optimizer/optimizer.factor @@ -13,7 +13,6 @@ compiler.cfg.dce compiler.cfg.write-barrier compiler.cfg.representations compiler.cfg.two-operand -compiler.cfg.save-contexts compiler.cfg.ssa.destruction compiler.cfg.empty-blocks compiler.cfg.checker ; @@ -39,7 +38,6 @@ SYMBOL: check-optimizer? eliminate-write-barriers select-representations convert-two-operand - insert-save-contexts destruct-ssa delete-empty-blocks ?check ; diff --git a/basis/compiler/cfg/save-contexts/save-contexts-tests.factor b/basis/compiler/cfg/save-contexts/save-contexts-tests.factor index 85c71ddbc8..23646cfcd7 100644 --- a/basis/compiler/cfg/save-contexts/save-contexts-tests.factor +++ b/basis/compiler/cfg/save-contexts/save-contexts-tests.factor @@ -1,19 +1,22 @@ USING: accessors compiler.cfg.debugger -compiler.cfg.instructions compiler.cfg.save-contexts namespaces -tools.test ; +compiler.cfg.instructions compiler.cfg.registers +compiler.cfg.save-contexts kernel namespaces tools.test ; IN: compiler.cfg.save-contexts.tests +0 vreg-counter set-global +H{ } clone representations set + V{ - T{ ##save-context f 0 1 f } - T{ ##save-context f 0 1 t } + T{ ##unary-float-function f 2 3 "sqrt" } T{ ##branch } } 0 test-bb -0 get combine-in-block +0 get insert-save-context [ V{ - T{ ##save-context f 0 1 t } + T{ ##save-context f 1 2 f } + T{ ##unary-float-function f 2 3 "sqrt" } T{ ##branch } } ] [ @@ -25,7 +28,7 @@ V{ T{ ##branch } } 0 test-bb -0 get combine-in-block +0 get insert-save-context [ V{ diff --git a/basis/compiler/cfg/utilities/utilities.factor b/basis/compiler/cfg/utilities/utilities.factor index bb61a63939..19c73eebd4 100644 --- a/basis/compiler/cfg/utilities/utilities.factor +++ b/basis/compiler/cfg/utilities/utilities.factor @@ -2,14 +2,14 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs combinators combinators.short-circuit cpu.architecture kernel layouts locals make math namespaces sequences -sets vectors fry compiler.cfg compiler.cfg.instructions -compiler.cfg.rpo arrays ; +sets vectors fry arrays compiler.cfg compiler.cfg.instructions +compiler.cfg.rpo compiler.utilities ; IN: compiler.cfg.utilities PREDICATE: kill-block < basic-block instructions>> { - [ length 2 = ] - [ first kill-vreg-insn? ] + [ length 2 >= ] + [ penultimate kill-vreg-insn? ] } 1&& ; : back-edge? ( from to -- ? ) diff --git a/basis/cpu/x86/features/tags.txt b/basis/cpu/x86/features/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/cpu/x86/features/tags.txt @@ -0,0 +1 @@ +unportable