preference-guided-colors ( graph order affinities available -- colors )


Vocabulary
compiler.cfg.register-allocation.chordal

Inputs
graphan object
orderan object
affinitiesan object
availablean object


Outputs
colorsan object


Definition


:: preference-guided-colors
( graph order affinities available -- colors )
H{ } clone :> colors graph keys
[ H{ } clone ] H{ } map>assoc
:> preferences affinities affinity-chunks :> chunks chunks
values [ first ] map members [ H{ } clone ] H{ } map>assoc
:> chunk-preferences order [| vertex |
vertex chunks at first chunk-preferences at
:> shared vertex graph at [ colors at ] map
sift :> occupied vertex rep-of reg-class-of available at
length :> capacity capacity <iota>
[ occupied member? not ] filter :> free free empty?
[ vertex occupied capacity uncolorable-spill-result ]
when free vertex preferences at
shared preferred-free-color
:> chosen chosen vertex colors set-at
chosen shared inc-at vertex affinities at [| partner
weight |
chosen partner preferences at
[ 0 or weight 8 * + ] change-at
] assoc-each
] each colors ;