X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=68966a1570dee9b9c207b8d128909428a2393a0d;hb=9d899efe741906ad957cf3ad84122f62c73a9de6;hp=797342b7e18a5431d29ca45f217b0ef882880d73;hpb=8776493a75bc44c37cddebfef778356d17d81bd6;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 797342b..68966a1 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -31,6 +31,7 @@ import Type import Var import VarEnv import Id +import OccName import Name import NameEnv @@ -120,6 +121,9 @@ data GlobalEnv = GlobalEnv { -- instances -- , global_fam_inst_env :: FamInstEnvs + + -- Hoisted bindings + , global_bindings :: [(Var, CoreExpr)] } data LocalEnv = LocalEnv { @@ -130,9 +134,6 @@ data LocalEnv = LocalEnv { -- Mapping from tyvars to their PA dictionaries , local_tyvar_pa :: VarEnv CoreExpr - - -- Hoisted bindings - , local_bindings :: [(Var, CoreExpr)] } @@ -145,12 +146,12 @@ initGlobalEnv info instEnvs famInstEnvs , global_tycon_pa = emptyNameEnv , global_inst_env = instEnvs , global_fam_inst_env = famInstEnvs + , global_bindings = [] } emptyLocalEnv = LocalEnv { local_vars = emptyVarEnv , local_tyvar_pa = emptyVarEnv - , local_bindings = [] } -- FIXME @@ -240,6 +241,16 @@ getInstEnv = readGEnv global_inst_env getFamInstEnv :: VM FamInstEnvs getFamInstEnv = readGEnv global_fam_inst_env +cloneName :: (OccName -> OccName) -> Name -> VM Name +cloneName mk_occ name = liftM make (liftDs newUnique) + where + occ_name = mk_occ (nameOccName name) + + make u | isExternalName name = mkExternalName u (nameModule name) + occ_name + (nameSrcSpan name) + | otherwise = mkSystemName u occ_name + newLocalVar :: FastString -> Type -> VM Var newLocalVar fs ty = do @@ -252,8 +263,14 @@ newTyVar fs k u <- liftDs newUnique return $ mkTyVar (mkSysTvName u fs) k -defGlobalVar :: Var -> CoreExpr -> VM () -defGlobalVar v e = updGEnv $ \env -> env { global_vars = extendVarEnv (global_vars env) v e } +defGlobalVar :: Var -> Var -> VM () +defGlobalVar v v' = updGEnv $ \env -> + env { global_vars = extendVarEnv (global_vars env) v (Var v') + , global_exported_vars = upd (global_exported_vars env) + } + where + upd env | isExportedId v = extendVarEnv env v (v, v') + | otherwise = env lookupVar :: Var -> VM (Scope CoreExpr (CoreExpr, CoreExpr)) lookupVar v