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