compiler: Ghetto functor hack for now.
Quotations are strings temporarily. This is because unparse is not in core, so you can't just interpolate a quotation text into a template.modern-harvey2
parent
8e8b5f59f5
commit
dbfeeebe38
|
@ -1,14 +1,18 @@
|
|||
! Copyright (C) 2008, 2010 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays assocs combinators compiler.cfg
|
||||
compiler.cfg.instructions compiler.cfg.linear-scan.allocation.state
|
||||
compiler.cfg.linear-scan.live-intervals compiler.cfg.linearization
|
||||
compiler.cfg.liveness compiler.cfg.registers
|
||||
compiler.cfg.renaming.functor compiler.cfg.ssa.destruction.leaders
|
||||
compiler.cfg.utilities fry heaps kernel make math namespaces sequences
|
||||
;
|
||||
IN: compiler.cfg.linear-scan.assignment
|
||||
compiler.cfg.def-use compiler.cfg.instructions
|
||||
compiler.cfg.instructions.syntax
|
||||
compiler.cfg.linear-scan.allocation.state
|
||||
compiler.cfg.linear-scan.live-intervals
|
||||
compiler.cfg.linearization compiler.cfg.liveness
|
||||
compiler.cfg.registers compiler.cfg.renaming.functor
|
||||
compiler.cfg.ssa.destruction.leaders compiler.cfg.utilities
|
||||
generic.parser heaps kernel make math namespaces sequences sets
|
||||
words ;
|
||||
FROM: namespaces => set ;
|
||||
QUALIFIED: sets
|
||||
IN: compiler.cfg.linear-scan.assignment
|
||||
|
||||
! This contains both active and inactive intervals; any interval
|
||||
! such that start <= insn# <= end is in this set.
|
||||
|
@ -88,7 +92,7 @@ SYMBOL: machine-live-outs
|
|||
[ pending-interval-heap get expire-old-intervals ]
|
||||
[ unhandled-intervals get activate-new-intervals ] bi ;
|
||||
|
||||
RENAMING: assign [ vreg>reg ] [ vreg>reg ] [ vreg>reg ]
|
||||
RENAMING: assign "[ vreg>reg ]" "[ vreg>reg ]" "[ vreg>reg ]"
|
||||
|
||||
: assign-all-registers ( insn -- )
|
||||
[ assign-insn-defs ] [ assign-insn-uses ] [ assign-insn-temps ] tri ;
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
! Copyright (C) 2009, 2011 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays assocs compiler.cfg.def-use
|
||||
compiler.cfg.instructions compiler.cfg.instructions.syntax fry
|
||||
functors generic.parser kernel lexer namespaces parser sequences
|
||||
sets slots words ;
|
||||
USING: functors2 kernel sequences slots strings ;
|
||||
IN: compiler.cfg.renaming.functor
|
||||
|
||||
! Like compiler.cfg.def-use, but for changing operands
|
||||
|
@ -12,77 +9,79 @@ IN: compiler.cfg.renaming.functor
|
|||
'[ [ _ ] dip changer-word [ ] 2sequence ] map [ ] join
|
||||
[ drop ] append ;
|
||||
|
||||
<FUNCTOR: define-renaming ( NAME DEF-QUOT USE-QUOT TEMP-QUOT -- )
|
||||
SAME-FUNCTOR: renaming ( NAME: name DEF-QUOT: string USE-QUOT: string TEMP-QUOT: string -- ) [[
|
||||
|
||||
rename-insn-defs DEFINES ${NAME}-insn-defs
|
||||
rename-insn-uses DEFINES ${NAME}-insn-uses
|
||||
rename-insn-temps DEFINES ${NAME}-insn-temps
|
||||
! rename-insn-defs DEFINES ${NAME}-insn-defs
|
||||
! rename-insn-uses DEFINES ${NAME}-insn-uses
|
||||
! rename-insn-temps DEFINES ${NAME}-insn-temps
|
||||
|
||||
WHERE
|
||||
! WHERE
|
||||
|
||||
GENERIC: rename-insn-defs ( insn -- )
|
||||
GENERIC: rename-insn-uses ( insn -- )
|
||||
GENERIC: rename-insn-temps ( insn -- )
|
||||
GENERIC: ${NAME}-insn-defs ( insn -- )
|
||||
GENERIC: ${NAME}-insn-uses ( insn -- )
|
||||
GENERIC: ${NAME}-insn-temps ( insn -- )
|
||||
|
||||
M: insn rename-insn-defs drop ;
|
||||
M: insn rename-insn-uses drop ;
|
||||
M: insn rename-insn-temps drop ;
|
||||
M: insn ${NAME}-insn-defs drop ;
|
||||
M: insn ${NAME}-insn-uses drop ;
|
||||
M: insn ${NAME}-insn-temps drop ;
|
||||
|
||||
! Instructions with unusual operands
|
||||
|
||||
! Special rename-insn-defs methods
|
||||
M: ##parallel-copy rename-insn-defs
|
||||
[ [ first2 DEF-QUOT dip 2array ] map ] change-values drop ;
|
||||
! Special ${NAME}-insn-defs methods
|
||||
M: ##parallel-copy ${NAME}-insn-defs
|
||||
[ [ first2 ${DEF-QUOT} dip 2array ] map ] change-values drop ;
|
||||
|
||||
M: ##phi rename-insn-defs DEF-QUOT change-dst drop ;
|
||||
M: ##phi ${NAME}-insn-defs ${DEF-QUOT} change-dst drop ;
|
||||
|
||||
M: alien-call-insn rename-insn-defs
|
||||
[ [ first3 DEF-QUOT 2dip 3array ] map ] change-reg-outputs
|
||||
M: alien-call-insn ${NAME}-insn-defs
|
||||
[ [ first3 ${DEF-QUOT} 2dip 3array ] map ] change-reg-outputs
|
||||
drop ;
|
||||
|
||||
M: ##callback-inputs rename-insn-defs
|
||||
[ [ first3 DEF-QUOT 2dip 3array ] map ] change-reg-outputs
|
||||
[ [ first3 DEF-QUOT 2dip 3array ] map ] change-stack-outputs
|
||||
M: ##callback-inputs ${NAME}-insn-defs
|
||||
[ [ first3 ${DEF-QUOT} 2dip 3array ] map ] change-reg-outputs
|
||||
[ [ first3 ${DEF-QUOT} 2dip 3array ] map ] change-stack-outputs
|
||||
drop ;
|
||||
|
||||
! Special rename-insn-uses methods
|
||||
M: ##parallel-copy rename-insn-uses
|
||||
[ [ first2 USE-QUOT call 2array ] map ] change-values drop ;
|
||||
! Special ${NAME}-insn-uses methods
|
||||
M: ##parallel-copy ${NAME}-insn-uses
|
||||
[ [ first2 ${USE-QUOT} call 2array ] map ] change-values drop ;
|
||||
|
||||
M: ##phi rename-insn-uses
|
||||
[ USE-QUOT assoc-map ] change-inputs drop ;
|
||||
M: ##phi ${NAME}-insn-uses
|
||||
[ ${USE-QUOT} assoc-map ] change-inputs drop ;
|
||||
|
||||
M: alien-call-insn rename-insn-uses
|
||||
[ [ first3 USE-QUOT 2dip 3array ] map ] change-reg-inputs
|
||||
[ [ first3 USE-QUOT 2dip 3array ] map ] change-stack-inputs
|
||||
M: alien-call-insn ${NAME}-insn-uses
|
||||
[ [ first3 ${USE-QUOT} 2dip 3array ] map ] change-reg-inputs
|
||||
[ [ first3 ${USE-QUOT} 2dip 3array ] map ] change-stack-inputs
|
||||
drop ;
|
||||
|
||||
M: ##alien-indirect rename-insn-uses
|
||||
USE-QUOT change-src call-next-method ;
|
||||
M: ##alien-indirect ${NAME}-insn-uses
|
||||
${USE-QUOT} change-src call-next-method ;
|
||||
|
||||
M: ##callback-outputs rename-insn-uses
|
||||
[ [ first3 USE-QUOT 2dip 3array ] map ] change-reg-inputs
|
||||
M: ##callback-outputs ${NAME}-insn-uses
|
||||
[ [ first3 ${USE-QUOT} 2dip 3array ] map ] change-reg-inputs
|
||||
drop ;
|
||||
|
||||
<<
|
||||
! Generate methods for everything else
|
||||
insn-classes get special-vreg-insns diff [ insn-def-slots empty? ] reject [
|
||||
[ \ rename-insn-defs create-method-in ]
|
||||
[ insn-def-slots [ name>> ] map DEF-QUOT slot-change-quot ] bi
|
||||
[ \ ${NAME}-insn-defs create-method-in ]
|
||||
[ insn-def-slots [ name>> ] map ${DEF-QUOT} slot-change-quot ] bi
|
||||
define
|
||||
] each
|
||||
|
||||
insn-classes get special-vreg-insns diff [ insn-use-slots empty? ] reject [
|
||||
[ \ rename-insn-uses create-method-in ]
|
||||
[ insn-use-slots [ name>> ] map USE-QUOT slot-change-quot ] bi
|
||||
[ \ ${NAME}-insn-uses create-method-in ]
|
||||
[ insn-use-slots [ name>> ] map ${USE-QUOT} slot-change-quot ] bi
|
||||
define
|
||||
] each
|
||||
|
||||
insn-classes get [ insn-temp-slots empty? ] reject [
|
||||
[ \ rename-insn-temps create-method-in ]
|
||||
[ insn-temp-slots [ name>> ] map TEMP-QUOT slot-change-quot ] bi
|
||||
[ \ ${NAME}-insn-temps create-method-in ]
|
||||
[ insn-temp-slots [ name>> ] map ${TEMP-QUOT} slot-change-quot ] bi
|
||||
define
|
||||
] each
|
||||
>>
|
||||
|
||||
;FUNCTOR>
|
||||
]]
|
||||
|
||||
SYNTAX: \RENAMING: scan-token scan-object scan-object scan-object define-renaming ;
|
||||
! SYNTAX: \RENAMING: scan-token scan-object scan-object scan-object define-renaming ;
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
! Copyright (C) 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: assocs compiler.cfg.registers
|
||||
compiler.cfg.renaming.functor kernel namespaces ;
|
||||
USING: accessors arrays assocs compiler.cfg.def-use
|
||||
compiler.cfg.instructions compiler.cfg.instructions.syntax
|
||||
compiler.cfg.registers compiler.cfg.renaming.functor
|
||||
generic.parser kernel namespaces sequences sets words ;
|
||||
IN: compiler.cfg.renaming
|
||||
|
||||
SYMBOL: renamings
|
||||
|
@ -9,4 +11,4 @@ SYMBOL: renamings
|
|||
: rename-value ( vreg -- vreg' )
|
||||
renamings get ?at drop ;
|
||||
|
||||
RENAMING: rename [ rename-value ] [ rename-value ] [ drop next-vreg ]
|
||||
RENAMING: rename "[ rename-value ]" "[ rename-value ]" "[ drop next-vreg ]"
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
! Copyright (C) 2010 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays assocs compiler.cfg.instructions
|
||||
USING: accessors arrays assocs compiler.cfg.def-use
|
||||
compiler.cfg.instructions compiler.cfg.instructions.syntax
|
||||
compiler.cfg.registers compiler.cfg.renaming.functor
|
||||
compiler.cfg.representations.conversion
|
||||
compiler.cfg.representations.preferred compiler.cfg.rpo kernel
|
||||
locals make namespaces sequences ;
|
||||
compiler.cfg.representations.preferred compiler.cfg.rpo
|
||||
generic.parser kernel make namespaces sequences sets words ;
|
||||
FROM: namespaces => set ;
|
||||
IN: compiler.cfg.representations.rewrite
|
||||
|
||||
! Insert conversions. This introduces new temporaries, so we need
|
||||
|
@ -65,7 +67,7 @@ SYMBOLS: renaming-set needs-renaming? ;
|
|||
: converted-value ( vreg -- vreg' )
|
||||
renaming-set get pop first2 [ assert= ] dip ;
|
||||
|
||||
RENAMING: convert [ converted-value ] [ converted-value ] [ ]
|
||||
RENAMING: convert "[ converted-value ]" "[ converted-value ]" "[ ]"
|
||||
|
||||
: perform-renaming ( insn -- )
|
||||
needs-renaming? get [
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
! Copyright (C) 2009, 2010 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors assocs combinators compiler.cfg
|
||||
USING: accessors arrays assocs combinators compiler.cfg
|
||||
compiler.cfg.def-use compiler.cfg.dominance
|
||||
compiler.cfg.instructions compiler.cfg.registers
|
||||
compiler.cfg.renaming.functor compiler.cfg.rpo
|
||||
compiler.cfg.ssa.construction.tdmsc deques dlists fry kernel
|
||||
math namespaces sequences sets ;
|
||||
compiler.cfg.instructions compiler.cfg.instructions.syntax
|
||||
compiler.cfg.registers compiler.cfg.renaming.functor
|
||||
compiler.cfg.rpo compiler.cfg.ssa.construction.tdmsc deques
|
||||
dlists generic.parser kernel math namespaces sequences sets
|
||||
words ;
|
||||
FROM: namespaces => set ;
|
||||
IN: compiler.cfg.ssa.construction
|
||||
|
||||
<PRIVATE
|
||||
|
@ -73,7 +75,7 @@ SYMBOLS: stacks pushed ;
|
|||
(top-name)
|
||||
dup [ dup used-vregs get push-front ] when ;
|
||||
|
||||
RENAMING: ssa-rename [ gen-name ] [ top-name ] [ ]
|
||||
RENAMING: ssa-rename "[ gen-name ]" "[ top-name ]" "[ ]"
|
||||
|
||||
GENERIC: rename-insn ( insn -- )
|
||||
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
! Copyright (C) 2011 Alex Vondrak.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors assocs hashtables kernel namespaces sequences
|
||||
sets
|
||||
compiler.cfg
|
||||
compiler.cfg.dataflow-analysis
|
||||
compiler.cfg.def-use
|
||||
compiler.cfg.gvn.graph
|
||||
compiler.cfg.predecessors
|
||||
compiler.cfg.renaming.functor
|
||||
compiler.cfg.rpo
|
||||
compiler.utilities ;
|
||||
USING: accessors arrays assocs compiler.cfg
|
||||
compiler.cfg.dataflow-analysis compiler.cfg.def-use
|
||||
compiler.cfg.gvn.graph compiler.cfg.instructions
|
||||
compiler.cfg.instructions.syntax compiler.cfg.predecessors
|
||||
compiler.cfg.renaming.functor compiler.cfg.rpo
|
||||
compiler.utilities generic.parser hashtables kernel namespaces
|
||||
sequences sets words ;
|
||||
IN: compiler.cfg.gvn.avail
|
||||
|
||||
: defined ( bb -- vregs )
|
||||
|
@ -41,4 +38,4 @@ M: avail transfer-set drop defined assoc-union ;
|
|||
: make-available ( vreg -- )
|
||||
basic-block get avail-ins get [ dupd clone ?set-at ] assocs:change-at ;
|
||||
|
||||
RENAMING: >avail [ ] [ dup >avail-vreg swap or ] [ ]
|
||||
RENAMING: >avail "[ ]" "[ dup >avail-vreg swap or ]" "[ ]"
|
||||
|
|
Loading…
Reference in New Issue