Massive focused action
parent
73d01452cb
commit
1f693b50b3
|
@ -4,7 +4,8 @@ USING: kernel words sequences quotations namespaces io
|
||||||
classes.tuple accessors prettyprint prettyprint.config
|
classes.tuple accessors prettyprint prettyprint.config
|
||||||
compiler.tree.builder compiler.tree.optimizer
|
compiler.tree.builder compiler.tree.optimizer
|
||||||
compiler.cfg.builder compiler.cfg.linearization
|
compiler.cfg.builder compiler.cfg.linearization
|
||||||
compiler.cfg.stack-frame compiler.cfg.linear-scan ;
|
compiler.cfg.stack-frame compiler.cfg.linear-scan
|
||||||
|
compiler.cfg.optimizer ;
|
||||||
IN: compiler.cfg.debugger
|
IN: compiler.cfg.debugger
|
||||||
|
|
||||||
GENERIC: test-cfg ( quot -- cfgs )
|
GENERIC: test-cfg ( quot -- cfgs )
|
||||||
|
@ -19,6 +20,7 @@ SYMBOL: allocate-registers?
|
||||||
|
|
||||||
: test-mr ( quot -- mrs )
|
: test-mr ( quot -- mrs )
|
||||||
test-cfg [
|
test-cfg [
|
||||||
|
optimize-cfg
|
||||||
build-mr
|
build-mr
|
||||||
allocate-registers? get
|
allocate-registers? get
|
||||||
[ linear-scan build-stack-frame ] when
|
[ linear-scan build-stack-frame ] when
|
||||||
|
|
|
@ -53,7 +53,10 @@ M: ##compare-float-branch linearize-insn
|
||||||
binary-conditional _compare-float-branch emit-branch ;
|
binary-conditional _compare-float-branch emit-branch ;
|
||||||
|
|
||||||
: linearize-basic-block ( bb -- )
|
: linearize-basic-block ( bb -- )
|
||||||
[ number>> _label ] [ linearize-insns ] bi ;
|
[ number>> _label ]
|
||||||
|
[ gc>> [ _gc ] when ]
|
||||||
|
[ linearize-insns ]
|
||||||
|
tri ;
|
||||||
|
|
||||||
: linearize-basic-blocks ( rpo -- insns )
|
: linearize-basic-blocks ( rpo -- insns )
|
||||||
[ [ linearize-basic-block ] each ] { } make ;
|
[ [ linearize-basic-block ] each ] { } make ;
|
||||||
|
|
|
@ -5,12 +5,12 @@ parser prettyprint.backend prettyprint.sections ;
|
||||||
IN: compiler.cfg.registers
|
IN: compiler.cfg.registers
|
||||||
|
|
||||||
! Virtual registers, used by CFG and machine IRs
|
! Virtual registers, used by CFG and machine IRs
|
||||||
TUPLE: vreg reg-class n ;
|
TUPLE: vreg { reg-class read-only } { n read-only } ;
|
||||||
SYMBOL: vreg-counter
|
SYMBOL: vreg-counter
|
||||||
: next-vreg ( reg-class -- vreg ) \ vreg-counter counter vreg boa ;
|
: next-vreg ( reg-class -- vreg ) \ vreg-counter counter vreg boa ;
|
||||||
|
|
||||||
! Stack locations
|
! Stack locations
|
||||||
TUPLE: loc n ;
|
TUPLE: loc { n read-only } ;
|
||||||
|
|
||||||
TUPLE: ds-loc < loc ;
|
TUPLE: ds-loc < loc ;
|
||||||
C: <ds-loc> ds-loc
|
C: <ds-loc> ds-loc
|
||||||
|
|
|
@ -1,20 +1,32 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel accessors namespaces make math sequences
|
USING: kernel accessors namespaces make math sequences sets
|
||||||
compiler.cfg.instructions ;
|
assocs fry compiler.cfg.instructions ;
|
||||||
IN: compiler.cfg.rpo
|
IN: compiler.cfg.rpo
|
||||||
|
|
||||||
: post-order-traversal ( basic-block -- )
|
SYMBOL: visited
|
||||||
dup visited>> [ drop ] [
|
|
||||||
t >>visited
|
: post-order-traversal ( bb -- )
|
||||||
|
dup id>> visited get key? [ drop ] [
|
||||||
|
dup id>> visited get conjoin
|
||||||
[ successors>> [ post-order-traversal ] each ] [ , ] bi
|
[ successors>> [ post-order-traversal ] each ] [ , ] bi
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: post-order ( procedure -- blocks )
|
: post-order ( bb -- blocks )
|
||||||
[ post-order-traversal ] { } make ;
|
[ post-order-traversal ] { } make ;
|
||||||
|
|
||||||
: number-blocks ( blocks -- )
|
: number-blocks ( blocks -- )
|
||||||
[ >>number drop ] each-index ;
|
[ >>number drop ] each-index ;
|
||||||
|
|
||||||
: reverse-post-order ( procedure -- blocks )
|
: reverse-post-order ( bb -- blocks )
|
||||||
post-order <reversed> dup number-blocks ; inline
|
H{ } clone visited [
|
||||||
|
post-order <reversed> dup number-blocks
|
||||||
|
] with-variable ; inline
|
||||||
|
|
||||||
|
: each-basic-block ( cfg quot -- )
|
||||||
|
[ entry>> reverse-post-order ] dip each ; inline
|
||||||
|
|
||||||
|
: change-basic-blocks ( cfg quot -- cfg' )
|
||||||
|
[ '[ _ change-instructions drop ] each-basic-block ]
|
||||||
|
[ drop ]
|
||||||
|
2bi ; inline
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel math layouts namespaces cpu.architecture
|
USING: accessors kernel math layouts make sequences
|
||||||
namespaces compiler.cfg compiler.cfg.instructions ;
|
cpu.architecture namespaces compiler.cfg
|
||||||
|
compiler.cfg.instructions ;
|
||||||
IN: compiler.cfg.utilities
|
IN: compiler.cfg.utilities
|
||||||
|
|
||||||
: value-info-small-tagged? ( value-info -- ? )
|
: value-info-small-tagged? ( value-info -- ? )
|
||||||
|
|
|
@ -6,8 +6,9 @@ threads graphs generic combinators deques search-deques
|
||||||
stack-checker stack-checker.state stack-checker.inlining
|
stack-checker stack-checker.state stack-checker.inlining
|
||||||
compiler.errors compiler.units compiler.tree.builder
|
compiler.errors compiler.units compiler.tree.builder
|
||||||
compiler.tree.optimizer compiler.cfg.builder
|
compiler.tree.optimizer compiler.cfg.builder
|
||||||
compiler.cfg.linearization compiler.cfg.linear-scan
|
compiler.cfg.optimizer compiler.cfg.linearization
|
||||||
compiler.cfg.stack-frame compiler.codegen ;
|
compiler.cfg.linear-scan compiler.cfg.stack-frame
|
||||||
|
compiler.codegen ;
|
||||||
IN: compiler
|
IN: compiler
|
||||||
|
|
||||||
SYMBOL: compile-queue
|
SYMBOL: compile-queue
|
||||||
|
@ -73,6 +74,7 @@ t compile-dependencies? set-global
|
||||||
|
|
||||||
: backend ( nodes word -- )
|
: backend ( nodes word -- )
|
||||||
build-cfg [
|
build-cfg [
|
||||||
|
optimize-cfg
|
||||||
build-mr
|
build-mr
|
||||||
linear-scan
|
linear-scan
|
||||||
build-stack-frame
|
build-stack-frame
|
||||||
|
|
Loading…
Reference in New Issue