X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=dc26b4b69020c4ca2904c863eecca8e205f2d3c2;hb=35380dd876960a2e88e8743545615040f08b4f27;hp=10aa2b6a52437cd2d87e326c9b7653105eb3c0f8;hpb=398fb62067696bf39ab8f64405b39292b06511c3;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 10aa2b6..dc26b4b 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -1,7 +1,7 @@ module VectMonad ( VM, - noV, tryV, maybeV, orElseV, localV, initV, + noV, tryV, maybeV, orElseV, localV, closedV, initV, newLocalVar, newTyVar, Builtins(..), paDictTyCon, @@ -124,6 +124,9 @@ data LocalEnv = LocalEnv { -- Mapping from tyvars to their PA dictionaries , local_tyvar_pa :: VarEnv CoreExpr + + -- Hoisted bindings + , local_bindings :: [(Var, CoreExpr)] } @@ -141,6 +144,7 @@ initGlobalEnv info instEnvs famInstEnvs emptyLocalEnv = LocalEnv { local_vars = emptyVarEnv , local_tyvar_pa = emptyVarEnv + , local_bindings = [] } -- FIXME @@ -192,6 +196,14 @@ localV p = do setLEnv env return x +closedV :: VM a -> VM a +closedV p = do + env <- readLEnv id + setLEnv emptyLocalEnv + x <- p + setLEnv env + return x + liftDs :: DsM a -> VM a liftDs p = VM $ \bi genv lenv -> do { x <- p; return (Yes genv lenv x) }