factor/basis/compiler/cfg/debugger/debugger.factor

78 lines
2.0 KiB
Factor
Raw Normal View History

! Copyright (C) 2008, 2009 Slava Pestov.
2008-09-11 03:05:22 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: kernel words sequences quotations namespaces io vectors
classes.tuple accessors prettyprint prettyprint.config assocs
2008-12-08 15:58:00 -05:00
prettyprint.backend prettyprint.custom prettyprint.sections
parser compiler.tree.builder compiler.tree.optimizer
cpu.architecture compiler.cfg.builder compiler.cfg.linearization
2008-12-08 15:58:00 -05:00
compiler.cfg.registers compiler.cfg.stack-frame
compiler.cfg.linear-scan compiler.cfg.two-operand
compiler.cfg.optimizer compiler.cfg.instructions
compiler.cfg.utilities compiler.cfg.def-use
compiler.cfg.rpo compiler.cfg.mr compiler.cfg ;
2008-09-11 03:05:22 -04:00
IN: compiler.cfg.debugger
GENERIC: test-cfg ( quot -- cfgs )
M: callable test-cfg
0 vreg-counter set-global
2008-09-17 01:46:38 -04:00
build-tree optimize-tree gensym build-cfg ;
2008-09-11 03:05:22 -04:00
M: word test-cfg
0 vreg-counter set-global
[ build-tree optimize-tree ] keep build-cfg ;
2008-09-11 03:05:22 -04:00
2008-10-07 21:00:38 -04:00
: test-mr ( quot -- mrs )
2008-10-20 02:56:28 -04:00
test-cfg [
2008-10-22 19:39:41 -04:00
optimize-cfg
build-mr
2008-10-20 02:56:28 -04:00
] map ;
: insn. ( insn -- )
2009-07-10 04:05:45 -04:00
tuple>array but-last [ pprint bl ] each nl ;
2008-09-11 03:05:22 -04:00
: mr. ( mrs -- )
[
"=== word: " write
dup word>> pprint
", label: " write
dup label>> pprint nl nl
2008-10-20 02:56:28 -04:00
instructions>> [ insn. ] each
2008-09-11 03:05:22 -04:00
nl
] each ;
2008-12-08 15:58:00 -05:00
! Prettyprinting
: pprint-loc ( loc word -- ) <block pprint-word n>> pprint* block> ;
M: ds-loc pprint* \ D pprint-loc ;
M: rs-loc pprint* \ R pprint-loc ;
: resolve-phis ( bb -- )
[
[ [ [ get ] dip ] assoc-map ] change-inputs drop
] each-phi ;
: test-bb ( insns n -- )
[ <basic-block> swap >>number swap >>instructions dup ] keep set
resolve-phis ;
: edge ( from to -- )
[ get ] bi@ 1vector >>successors drop ;
: edges ( from tos -- )
[ get ] [ [ get ] V{ } map-as ] bi* >>successors drop ;
: test-diamond ( -- )
0 1 edge
1 { 2 3 } edges
2 4 edge
3 4 edge ;
: fake-representations ( cfg -- )
post-order [
instructions>>
[ [ temp-vregs ] [ defs-vreg ] bi [ suffix ] when* ]
map concat
] map concat
[ int-rep ] H{ } map>assoc representations set ;