projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Collect hoisted vectorised functions
[ghc-hetmet.git]
/
compiler
/
vectorise
/
VectMonad.hs
diff --git
a/compiler/vectorise/VectMonad.hs
b/compiler/vectorise/VectMonad.hs
index
10aa2b6
..
dc26b4b
100644
(file)
--- a/
compiler/vectorise/VectMonad.hs
+++ b/
compiler/vectorise/VectMonad.hs
@@
-1,7
+1,7
@@
module VectMonad (
VM,
module VectMonad (
VM,
- noV, tryV, maybeV, orElseV, localV, initV,
+ noV, tryV, maybeV, orElseV, localV, closedV, initV,
newLocalVar, newTyVar,
Builtins(..), paDictTyCon,
newLocalVar, newTyVar,
Builtins(..), paDictTyCon,
@@
-124,6
+124,9
@@
data LocalEnv = LocalEnv {
-- Mapping from tyvars to their PA dictionaries
, local_tyvar_pa :: VarEnv CoreExpr
-- 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
emptyLocalEnv = LocalEnv {
local_vars = emptyVarEnv
, local_tyvar_pa = emptyVarEnv
+ , local_bindings = []
}
-- FIXME
}
-- FIXME
@@
-192,6
+196,14
@@
localV p = do
setLEnv env
return x
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) }
liftDs :: DsM a -> VM a
liftDs p = VM $ \bi genv lenv -> do { x <- p; return (Yes genv lenv x) }