-USING: accessors assocs compiler.cfg.utilities compiler.cfg
-compiler.cfg.branch-splitting compiler.cfg.debugger
-compiler.cfg.predecessors compiler.cfg.rpo compiler.cfg.instructions fry kernel
-tools.test namespaces sequences vectors ;
+USING: accessors assocs compiler.cfg.branch-splitting
+compiler.cfg.instructions compiler.cfg.predecessors compiler.cfg.rpo
+compiler.cfg.utilities compiler.test fry kernel namespaces tools.test ;
IN: compiler.cfg.branch-splitting.tests
: get-predecessors ( cfg -- assoc )
-USING: accessors compiler.cfg compiler.cfg.copy-prop compiler.cfg.debugger
-compiler.cfg.instructions compiler.cfg.registers compiler.cfg.utilities
-cpu.architecture kernel namespaces tools.test ;
+USING: accessors compiler.cfg.copy-prop compiler.cfg.instructions
+compiler.cfg.registers compiler.cfg.utilities compiler.test
+cpu.architecture namespaces tools.test ;
IN: compiler.cfg.copy-prop.tests
: test-copy-propagation ( -- )
! Copyright (C) 2008, 2011 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs classes.tuple compiler.cfg
-compiler.cfg.builder compiler.cfg.def-use
-compiler.cfg.finalization compiler.cfg.gc-checks
+compiler.cfg.builder compiler.cfg.finalization compiler.cfg.gc-checks
compiler.cfg.instructions compiler.cfg.linearization
compiler.cfg.optimizer compiler.cfg.registers
-compiler.cfg.representations
-compiler.cfg.representations.preferred compiler.cfg.rpo
-compiler.cfg.save-contexts
-compiler.cfg.utilities compiler.tree.builder
-compiler.tree.optimizer compiler.units fry hashtables io kernel math
-namespaces prettyprint prettyprint.backend prettyprint.custom
-prettyprint.sections quotations random sequences vectors words strings ;
+compiler.cfg.representations compiler.cfg.save-contexts
+compiler.cfg.utilities compiler.tree.builder compiler.tree.optimizer
+fry io kernel namespaces prettyprint prettyprint.backend
+prettyprint.custom prettyprint.sections quotations sequences strings
+words ;
FROM: compiler.cfg.linearization => number-blocks ;
IN: compiler.cfg.debugger
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 -- )
- [ insns>block 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 ] [ temp-vreg-reps ] bi zip ]
- [ [ defs-vregs ] [ defs-vreg-reps ] bi zip ]
- bi append
- ] map concat
- ] map concat >hashtable representations set ;
-
-: count-insns ( quot insn-check -- ? )
- [ test-regs [ cfg>insns ] map concat ] dip count ; inline
-
-: contains-insn? ( quot insn-check -- ? )
- count-insns 0 > ; inline
! Copyright (C) 2009 Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license.
-USING: kernel tools.test accessors vectors sequences namespaces
-arrays compiler.cfg.def-use compiler.cfg compiler.cfg.debugger
-compiler.cfg.instructions compiler.cfg.registers compiler.cfg.utilities
-cpu.architecture ;
+USING: compiler.cfg.def-use compiler.cfg.instructions
+compiler.cfg.registers compiler.cfg.utilities compiler.test namespaces
+tools.test ;
IN: compiler.cfg.def-use.tests
! compute-insns
-USING: accessors arrays assocs compiler.cfg compiler.cfg.dominance
-compiler.cfg.dominance.private compiler.cfg.debugger compiler.cfg.predecessors
-compiler.cfg.utilities grouping kernel math.ranges namespaces sequences sets
-tools.test vectors ;
+USING: accessors arrays assocs compiler.cfg.dominance
+compiler.cfg.dominance.private compiler.cfg.utilities compiler.test
+grouping kernel math.ranges namespaces sequences sets tools.test ;
IN: compiler.cfg.dominance.tests
: test-dominance ( -- )
USING: accessors alien arrays byte-arrays combinators.short-circuit
-compiler.cfg compiler.cfg.comparisons compiler.cfg.debugger
-compiler.cfg.gc-checks compiler.cfg.gc-checks.private
-compiler.cfg.instructions compiler.cfg.registers compiler.cfg.rpo
-compiler.cfg.utilities compiler.test cpu.architecture kernel layouts
-math memory namespaces sequences tools.test ;
+compiler.cfg compiler.cfg.comparisons compiler.cfg.gc-checks
+compiler.cfg.gc-checks.private compiler.cfg.instructions
+compiler.cfg.registers compiler.cfg.rpo compiler.cfg.utilities
+compiler.test cpu.architecture kernel layouts math memory namespaces
+sequences tools.test ;
IN: compiler.cfg.gc-checks.tests
! insert-gc-check?
-USING: accessors assocs compiler.cfg.debugger compiler.cfg
-compiler.cfg.linearization compiler.cfg.linearization.private
-compiler.cfg.utilities dlists kernel make namespaces sequences tools.test ;
+USING: accessors assocs compiler.cfg.linearization
+compiler.cfg.linearization.private compiler.cfg.utilities
+compiler.test kernel make namespaces sequences tools.test ;
IN: compiler.cfg.linearization.tests
! linearization-order
USING: accessors alien assocs compiler.cfg compiler.cfg.comparisons
-compiler.cfg.debugger compiler.cfg.def-use compiler.cfg.instructions
-compiler.cfg.liveness compiler.cfg.registers
-compiler.cfg.ssa.destruction.leaders compiler.cfg.utilities
-cpu.architecture cpu.x86.assembler.operands kernel math namespaces
-sequences system tools.test ;
+compiler.cfg.def-use compiler.cfg.instructions compiler.cfg.liveness
+compiler.cfg.registers compiler.cfg.ssa.destruction.leaders
+compiler.cfg.utilities compiler.test cpu.architecture
+cpu.x86.assembler.operands kernel math namespaces sequences system
+tools.test ;
IN: compiler.cfg.liveness.tests
QUALIFIED: sets
-USING: accessors compiler.cfg.debugger
-compiler.cfg.loop-detection compiler.cfg.loop-detection.private
-compiler.cfg.utilities kernel namespaces sequences sets
-tools.test ;
+USING: accessors compiler.cfg.loop-detection
+compiler.cfg.loop-detection.private compiler.cfg.utilities
+compiler.test kernel namespaces sequences sets tools.test ;
IN: compiler.cfg.loop-detection.tests
{ V{ 0 } { 1 } } [
-USING: arrays sequences kernel namespaces accessors compiler.cfg
-compiler.cfg.instructions
-compiler.cfg.registers
-compiler.cfg.debugger
-compiler.cfg.representations.coalescing
-compiler.cfg.utilities
-tools.test ;
+USING: compiler.cfg.instructions compiler.cfg.registers
+compiler.cfg.representations.coalescing compiler.cfg.utilities
+compiler.test kernel namespaces tools.test ;
IN: compiler.cfg.representations.coalescing.tests
: test-scc ( -- )
-USING: accessors compiler.cfg compiler.cfg.debugger
+USING: accessors compiler.cfg compiler.cfg.comparisons
compiler.cfg.instructions compiler.cfg.registers
-compiler.cfg.representations.preferred cpu.architecture kernel
-namespaces tools.test sequences arrays system literals layouts
-math compiler.constants compiler.cfg.representations.conversion
-compiler.cfg.representations.rewrite
-compiler.cfg.comparisons compiler.cfg.utilities
-make ;
+compiler.cfg.representations.conversion
+compiler.cfg.representations.preferred compiler.cfg.utilities
+compiler.constants compiler.test cpu.architecture kernel layouts
+literals make math namespaces sequences system tools.test ;
FROM: alien.c-types => char ;
IN: compiler.cfg.representations
-USING: accessors compiler.cfg.debugger
-compiler.cfg.instructions compiler.cfg.registers
-compiler.cfg.save-contexts kernel namespaces tools.test
-cpu.x86.assembler.operands cpu.architecture ;
+USING: accessors compiler.cfg.instructions compiler.cfg.registers
+compiler.cfg.save-contexts compiler.test cpu.architecture kernel
+namespaces tools.test ;
IN: compiler.cfg.save-contexts.tests
! insns-needs-save-context?
-USING: accessors compiler.cfg compiler.cfg.debugger
-compiler.cfg.dominance compiler.cfg.instructions
-compiler.cfg.predecessors compiler.cfg.ssa.construction assocs
-compiler.cfg.registers compiler.cfg.ssa.construction.private
-compiler.cfg.utilities cpu.architecture kernel namespaces sequences tools.test
-vectors ;
+USING: accessors assocs compiler.cfg compiler.cfg.instructions
+compiler.cfg.registers compiler.cfg.ssa.construction
+compiler.cfg.ssa.construction.private compiler.cfg.utilities
+compiler.test kernel namespaces sequences tools.test ;
IN: compiler.cfg.ssa.construction.tests
! insert-phi-later
-USING: accessors arrays compiler.cfg compiler.cfg.debugger
+USING: accessors arrays compiler.cfg
compiler.cfg.ssa.construction.tdmsc compiler.cfg.utilities
-kernel namespaces sequences tools.test ;
+compiler.test kernel namespaces sequences tools.test ;
QUALIFIED: sets
IN: compiler.cfg.ssa.construction.tdmsc.tests
-USING: accessors compiler.cfg compiler.cfg.debugger
-compiler.cfg.def-use compiler.cfg.dominance
-compiler.cfg.instructions compiler.cfg.liveness
-compiler.cfg.registers compiler.cfg.predecessors
-compiler.cfg.comparisons compiler.cfg.ssa.interference
-compiler.cfg.ssa.interference.private
+USING: accessors alien.c-types compiler.cfg.comparisons
+compiler.cfg.def-use compiler.cfg.instructions compiler.cfg.liveness
+compiler.cfg.registers compiler.cfg.ssa.interference
compiler.cfg.ssa.interference.live-ranges
-compiler.cfg.utilities
-cpu.architecture kernel namespaces tools.test alien.c-types
-arrays sequences slots ;
+compiler.cfg.ssa.interference.private compiler.cfg.utilities
+compiler.test cpu.architecture kernel namespaces sequences slots
+tools.test ;
IN: compiler.cfg.ssa.interference.tests
: test-interference ( -- )
USING: accessors arrays assocs compiler.cfg.instructions compiler.cfg.registers
-compiler.cfg.stacks.padding compiler.cfg.utilities kernel sequences sorting
-vectors tools.test ;
+compiler.cfg.stacks.padding compiler.cfg.utilities compiler.test kernel
+sequences sorting vectors tools.test ;
IN: compiler.cfg.stacks.padding.tests
! classify-read: initialized locations
: connect-Nto1-bbs ( froms to -- )
'[ _ connect-bbs ] each ;
-: make-edges ( block-map edgelist -- )
- [ [ of ] with map first2 connect-bbs ] with each ;
-
! Abstract generic stuff
MACRO: apply-passes ( passes -- quot: ( obj -- ) )
unclip-last [ [ 1array \ dup prefix ] map [ ] concat-as ] dip suffix ;
-USING: accessors alien assocs combinators.short-circuit
-compiler.cfg compiler.cfg.comparisons compiler.cfg.dce
-compiler.cfg.debugger compiler.cfg.instructions
+USING: accessors alien assocs combinators.short-circuit compiler.cfg
+compiler.cfg.comparisons compiler.cfg.dce compiler.cfg.instructions
compiler.cfg.registers compiler.cfg.representations
compiler.cfg.ssa.destruction compiler.cfg.utilities
-compiler.cfg.value-numbering cpu.architecture kernel layouts
-literals math namespaces sequences system tools.test ;
+compiler.cfg.value-numbering compiler.test cpu.architecture kernel
+layouts literals math namespaces sequences system tools.test ;
! need cfg simd loaded for some tests
USE: compiler.cfg.value-numbering.simd
QUALIFIED-WITH: alien.c-types c
! Copyright (C) 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays compiler.cfg compiler.units kernel sequences
-stack-checker tools.test vocabs words ;
+USING: accessors arrays assocs compiler.cfg compiler.cfg.debugger
+compiler.cfg.def-use compiler.cfg.linearization compiler.cfg.registers
+compiler.cfg.representations.preferred compiler.cfg.rpo
+compiler.cfg.stacks compiler.cfg.stacks.local compiler.cfg.utilities
+compiler.tree.builder compiler.tree.checker compiler.tree.def-use
+compiler.tree.normalization compiler.tree.propagation
+compiler.tree.propagation.info compiler.tree.recursive compiler.units
+fry hashtables kernel math namespaces sequences stack-checker
+tools.test vectors vocabs words ;
IN: compiler.test
: decompile ( word -- )
: compiler-test ( name -- )
"resource:basis/compiler/tests/" ".factor" surround run-test-file ;
-USING: compiler.cfg.registers compiler.cfg.stacks compiler.cfg.stacks.local
-fry namespaces ;
-
: init-cfg-test ( -- )
reset-vreg-counter begin-stack-analysis
<basic-block> dup basic-block set begin-local-analysis
: cfg-unit-test ( result quot -- )
'[ init-cfg-test @ ] unit-test ; inline
+
+: 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 ;
+
+: resolve-phis ( bb -- )
+ [
+ [ [ [ get ] dip ] assoc-map ] change-inputs drop
+ ] each-phi ;
+
+: test-bb ( insns n -- )
+ [ insns>block dup ] keep set resolve-phis ;
+
+: fake-representations ( cfg -- )
+ post-order [
+ instructions>> [
+ [ [ temp-vregs ] [ temp-vreg-reps ] bi zip ]
+ [ [ defs-vregs ] [ defs-vreg-reps ] bi zip ]
+ bi append
+ ] map concat
+ ] map concat >hashtable representations set ;
+
+: count-insns ( quot insn-check -- ? )
+ [ test-regs [ cfg>insns ] map concat ] dip count ; inline
+
+: contains-insn? ( quot insn-check -- ? )
+ count-insns 0 > ; inline
+
+: make-edges ( block-map edgelist -- )
+ [ [ of ] with map first2 connect-bbs ] with each ;
+
+: final-info ( quot -- seq )
+ build-tree
+ analyze-recursive
+ normalize
+ propagate
+ compute-def-use
+ dup check-nodes
+ last node-input-infos ;
+
+: final-classes ( quot -- seq )
+ final-info [ class>> ] map ;
+
+: final-literals ( quot -- seq )
+ final-info [ literal>> ] map ;
-USING: accessors assocs combinators compiler compiler.cfg
-compiler.cfg.debugger compiler.cfg.instructions
-compiler.cfg.registers compiler.cfg.linear-scan
-compiler.cfg.ssa.destruction compiler.cfg.build-stack-frame
-compiler.cfg.utilities compiler.codegen compiler.units cpu.architecture
-hashtables kernel namespaces sequences tools.test vectors words layouts
-literals math arrays alien.c-types alien.syntax math.private ;
+USING: alien.c-types arrays assocs combinators compiler.cfg
+compiler.cfg.build-stack-frame compiler.cfg.instructions
+compiler.cfg.linear-scan compiler.cfg.registers
+compiler.cfg.ssa.destruction compiler.cfg.utilities compiler.codegen
+compiler.test compiler.units cpu.architecture hashtables kernel
+layouts literals math namespaces sequences tools.test words ;
IN: compiler.tests.low-level-ir
: compile-cfg ( cfg -- word )
make-report report. ;
! More utilities
-
-: final-info ( quot -- seq )
- build-tree
- analyze-recursive
- normalize
- propagate
- compute-def-use
- dup check-nodes
- last node-input-infos ;
-
-: final-classes ( quot -- seq )
- final-info [ class>> ] map ;
-
-: final-literals ( quot -- seq )
- final-info [ literal>> ] map ;
-
: cleaned-up-tree ( quot -- nodes )
[
build-tree
! Copyright (C) 2009 Slava Pestov, Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators combinators.private compiler.tree
-compiler.tree.propagation.call-effect compiler.units math effects kernel
-compiler.tree.builder compiler.tree.optimizer compiler.tree.debugger sequences
-eval fry kernel.private tools.test ;
+USING: accessors combinators combinators.private compiler.test
+compiler.tree compiler.tree.builder compiler.tree.debugger
+compiler.tree.optimizer compiler.tree.propagation.call-effect
+compiler.units effects eval fry kernel kernel.private math sequences
+tools.test ;
IN: compiler.tree.propagation.call-effect.tests
! cached-effect
USING: accessors alien alien.accessors alien.c-types alien.data arrays
assocs byte-arrays classes classes.algebra classes.struct
-classes.tuple.private combinators.short-circuit compiler.tree
-compiler.tree.builder compiler.tree.debugger compiler.tree.optimizer
-compiler.tree.propagation.info effects fry generic.single hashtables
-kernel kernel.private layouts literals locals math math.floats.private
-math.functions math.integers.private math.intervals math.libm
-math.order math.private quotations sequences sequences.private sets
-slots.private sorting specialized-arrays strings strings.private
-system tools.test vectors vocabs words ;
+classes.tuple.private combinators.short-circuit compiler.test
+compiler.tree compiler.tree.builder compiler.tree.debugger
+compiler.tree.optimizer compiler.tree.propagation.info effects fry
+generic.single hashtables kernel kernel.private layouts literals
+locals math math.floats.private math.functions math.integers.private
+math.intervals math.libm math.order math.private quotations sequences
+sequences.private sets slots.private sorting specialized-arrays
+strings strings.private system tools.test vectors vocabs words ;
FROM: math => float ;
SPECIALIZED-ARRAY: double
SPECIALIZED-ARRAY: void*
-USING: compiler.cfg.debugger compiler.cfg.instructions
-compiler.cfg.registers compiler.codegen.gc-maps
-compiler.codegen.relocation cpu.architecture cpu.x86 cpu.x86.assembler
-cpu.x86.assembler.operands cpu.x86.features kernel kernel.private
-layouts literals make math math.libm namespaces sequences system
-tools.test ;
+USING: compiler.cfg.instructions compiler.cfg.registers
+compiler.codegen.gc-maps compiler.codegen.relocation compiler.test
+cpu.architecture cpu.x86 cpu.x86.assembler cpu.x86.assembler.operands
+cpu.x86.features kernel kernel.private layouts literals make math
+math.libm namespaces sequences system tools.test ;
IN: cpu.x86.tests
{ } [
! Copyright (C) 2011 Alex Vondrak.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs compiler.cfg compiler.cfg.debugger
-compiler.cfg.graphviz compiler.cfg.gvn
-compiler.cfg.gvn.expressions compiler.cfg.gvn.graph
-compiler.cfg.optimizer compiler.cfg.utilities continuations formatting graphviz
-graphviz.notation graphviz.render io.directories kernel
-math.parser namespaces prettyprint sequences sorting splitting
-tools.annotations ;
+USING: accessors assocs compiler.cfg compiler.cfg.graphviz
+compiler.cfg.gvn compiler.cfg.gvn.expressions compiler.cfg.gvn.graph
+compiler.cfg.optimizer compiler.cfg.utilities compiler.test
+continuations formatting graphviz.notation graphviz.render
+io.directories kernel math.parser namespaces prettyprint sequences
+sorting splitting tools.annotations ;
IN: compiler.cfg.gvn.testing
GENERIC: expr>str ( expr -- str )