module Asm.L ( mkLive, liveBB ) where import Asm.Ar import Asm.BB import CF import LR mkLive :: (Arch arch reg freg f2) => [arch reg freg f2 ()] -> [arch reg freg f2 Liveness] mkLive :: forall (arch :: * -> * -> * -> * -> *) reg freg f2. Arch arch reg freg f2 => [arch reg freg f2 ()] -> [arch reg freg f2 Liveness] mkLive = (BB arch reg freg f2 () Liveness -> [arch reg freg f2 Liveness]) -> [BB arch reg freg f2 () Liveness] -> [arch reg freg f2 Liveness] forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap BB arch reg freg f2 () Liveness -> [arch reg freg f2 Liveness] forall (arch :: * -> * -> * -> * -> *) reg freg f2reg. Arch arch reg freg f2reg => BB arch reg freg f2reg () Liveness -> [arch reg freg f2reg Liveness] expand([BB arch reg freg f2 () Liveness] -> [arch reg freg f2 Liveness]) -> ([arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness]) -> [arch reg freg f2 ()] -> [arch reg freg f2 Liveness] forall b c a. (b -> c) -> (a -> b) -> a -> c . [arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness] forall (arch :: * -> * -> * -> * -> *) reg freg f2. Arch arch reg freg f2 => [arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness] liveBB liveBB :: (Arch arch reg freg f2) => [arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness] liveBB :: forall (arch :: * -> * -> * -> * -> *) reg freg f2. Arch arch reg freg f2 => [arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness] liveBB = (BB arch reg freg f2 () NLiveness -> BB arch reg freg f2 () Liveness) -> [BB arch reg freg f2 () NLiveness] -> [BB arch reg freg f2 () 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 f2 () NLiveness -> BB arch reg freg f2 () Liveness forall a b. (a -> b) -> BB arch reg freg f2 () a -> BB arch reg freg f2 () b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap NLiveness -> Liveness liveness) ([BB arch reg freg f2 () NLiveness] -> [BB arch reg freg f2 () Liveness]) -> ([arch reg freg f2 ()] -> [BB arch reg freg f2 () NLiveness]) -> [arch reg freg f2 ()] -> [BB arch reg freg f2 () Liveness] forall b c a. (b -> c) -> (a -> b) -> a -> c . [BB arch reg freg f2 () ControlAnn] -> [BB arch reg freg f2 () NLiveness] forall {p :: * -> *}. Copointed p => [p ControlAnn] -> [p NLiveness] reconstructFlat ([BB arch reg freg f2 () ControlAnn] -> [BB arch reg freg f2 () NLiveness]) -> ([arch reg freg f2 ()] -> [BB arch reg freg f2 () ControlAnn]) -> [arch reg freg f2 ()] -> [BB arch reg freg f2 () NLiveness] forall b c a. (b -> c) -> (a -> b) -> a -> c . [BB arch reg freg f2 () ()] -> [BB arch reg freg f2 () ControlAnn] forall (arch :: * -> * -> * -> * -> *) reg freg f2reg. Arch arch reg freg f2reg => [BB arch reg freg f2reg () ()] -> [BB arch reg freg f2reg () ControlAnn] cf ([BB arch reg freg f2 () ()] -> [BB arch reg freg f2 () ControlAnn]) -> ([arch reg freg f2 ()] -> [BB arch reg freg f2 () ()]) -> [arch reg freg f2 ()] -> [BB arch reg freg f2 () ControlAnn] forall b c a. (b -> c) -> (a -> b) -> a -> c . [arch reg freg f2 ()] -> [BB arch reg freg f2 () ()] forall a. [arch reg freg f2 a] -> [BB arch reg freg f2 a ()] forall (arch :: * -> * -> * -> * -> *) reg freg f2reg a. Arch arch reg freg f2reg => [arch reg freg f2reg a] -> [BB arch reg freg f2reg a ()] bb