module Asm.L ( mkLive, liveBB ) where

import           Asm.Ar
import           Asm.BB
import           CF
import           LR

mkLive :: (Arch arch reg freg) => [arch reg freg ()] -> [arch reg freg Liveness]
mkLive :: forall (arch :: * -> * -> * -> *) reg freg.
Arch arch reg freg =>
[arch reg freg ()] -> [arch reg freg Liveness]
mkLive = (BB arch reg freg () Liveness -> [arch reg freg Liveness])
-> [BB arch reg freg () Liveness] -> [arch reg freg Liveness]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap BB arch reg freg () Liveness -> [arch reg freg Liveness]
forall (arch :: * -> * -> * -> *) reg freg.
Arch arch reg freg =>
BB arch reg freg () Liveness -> [arch reg freg Liveness]
expand([BB arch reg freg () Liveness] -> [arch reg freg Liveness])
-> ([arch reg freg ()] -> [BB arch reg freg () Liveness])
-> [arch reg freg ()]
-> [arch reg freg Liveness]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [arch reg freg ()] -> [BB arch reg freg () Liveness]
forall (arch :: * -> * -> * -> *) reg freg.
Arch arch reg freg =>
[arch reg freg ()] -> [BB arch reg freg () Liveness]
liveBB

liveBB :: (Arch arch reg freg) => [arch reg freg ()] -> [BB arch reg freg () Liveness]
liveBB :: forall (arch :: * -> * -> * -> *) reg freg.
Arch arch reg freg =>
[arch reg freg ()] -> [BB arch reg freg () Liveness]
liveBB = (BB arch reg freg () NLiveness -> BB arch reg freg () Liveness)
-> [BB arch reg freg () NLiveness]
-> [BB arch reg freg () Liveness]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((NLiveness -> Liveness)
-> BB arch reg freg () NLiveness -> BB arch reg freg () Liveness
forall a b.
(a -> b) -> BB arch reg freg () a -> BB arch reg freg () b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NLiveness -> Liveness
liveness) ([BB arch reg freg () NLiveness] -> [BB arch reg freg () Liveness])
-> ([arch reg freg ()] -> [BB arch reg freg () NLiveness])
-> [arch reg freg ()]
-> [BB arch reg freg () Liveness]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [BB arch reg freg () ControlAnn] -> [BB arch reg freg () NLiveness]
forall {p :: * -> *}.
Copointed p =>
[p ControlAnn] -> [p NLiveness]
reconstructFlat ([BB arch reg freg () ControlAnn]
 -> [BB arch reg freg () NLiveness])
-> ([arch reg freg ()] -> [BB arch reg freg () ControlAnn])
-> [arch reg freg ()]
-> [BB arch reg freg () NLiveness]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [BB arch reg freg () ()] -> [BB arch reg freg () ControlAnn]
forall (arch :: * -> * -> * -> *) reg freg.
Arch arch reg freg =>
[BB arch reg freg () ()] -> [BB arch reg freg () ControlAnn]
cf ([BB arch reg freg () ()] -> [BB arch reg freg () ControlAnn])
-> ([arch reg freg ()] -> [BB arch reg freg () ()])
-> [arch reg freg ()]
-> [BB arch reg freg () ControlAnn]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [arch reg freg ()] -> [BB arch reg freg () ()]
forall a. [arch reg freg a] -> [BB arch reg freg a ()]
forall (arch :: * -> * -> * -> *) reg freg a.
Arch arch reg freg =>
[arch reg freg a] -> [BB arch reg freg a ()]
bb