compiler.cfg.representations.selection: some initial docs from comments
parent
31aae02916
commit
cdf9a8535b
|
@ -0,0 +1,19 @@
|
|||
USING: help.markup help.syntax math sequences ;
|
||||
IN: compiler.cfg.representations.selection
|
||||
|
||||
HELP: costs
|
||||
{ $var-description "Maps vreg to representation to cost." } ;
|
||||
|
||||
HELP: increase-cost
|
||||
{ $values { "rep" "representation symbol" } { "scc" "?" } { "factor" integer } }
|
||||
{ $description "Increase cost of keeping vreg in rep, making a choice of rep less likely. If the rep is not in the cost alist, it means this representation is prohibited." } ;
|
||||
|
||||
HELP: init-costs
|
||||
{ $description "Initialize cost as 0 for each possibility." } ;
|
||||
|
||||
HELP: minimize-costs
|
||||
{ $values { "costs" sequence } { "representations" sequence } }
|
||||
{ $description "For every vreg, compute preferred representation, that minimizes costs." } ;
|
||||
|
||||
HELP: tagged-vregs
|
||||
{ $var-description "Vregs which must be tagged at the definition site because there is at least one usage that is not int-rep. If all usages are int-rep it is safe to untag at the definition site." } ;
|
|
@ -12,9 +12,6 @@ FROM: assocs => change-at ;
|
|||
FROM: namespaces => set ;
|
||||
IN: compiler.cfg.representations.selection
|
||||
|
||||
! vregs which must be tagged at the definition site because
|
||||
! there is at least one usage that is not int-rep. If all usages
|
||||
! are int-rep it is safe to untag at the definition site.
|
||||
SYMBOL: tagged-vregs
|
||||
|
||||
SYMBOL: vreg-reps
|
||||
|
@ -62,17 +59,12 @@ SYMBOL: possibilities
|
|||
! For every vreg, compute the cost of keeping it in every possible
|
||||
! representation.
|
||||
|
||||
! Cost map maps vreg to representation to cost.
|
||||
SYMBOL: costs
|
||||
|
||||
: init-costs ( -- )
|
||||
! Initialize cost as 0 for each possibility.
|
||||
possibilities get [ [ 0 ] H{ } map>assoc ] assoc-map costs set ;
|
||||
|
||||
: increase-cost ( rep scc factor -- )
|
||||
! Increase cost of keeping vreg in rep, making a choice of rep less
|
||||
! likely. If the rep is not in the cost alist, it means this
|
||||
! representation is prohibited.
|
||||
[ costs get at 2dup key? ] dip
|
||||
'[ [ current-loop-nesting 10^ _ * + ] change-at ] [ 2drop ] if ;
|
||||
|
||||
|
@ -137,7 +129,6 @@ M: vreg-insn compute-insn-costs
|
|||
[ [ compute-insn-costs ] each-non-phi ] bi
|
||||
] each-basic-block ;
|
||||
|
||||
! For every vreg, compute preferred representation, that minimizes costs.
|
||||
: minimize-costs ( costs -- representations )
|
||||
[ nip assoc-empty? ] assoc-reject
|
||||
[ >alist alist-min first ] assoc-map ;
|
||||
|
|
Loading…
Reference in New Issue