X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=a991b8c4f902567eb1aaa856905f51a7b0eee2ac;hb=8bae351221fbd5eabe562641499c14d379816875;hp=86b1cb7e82e52d24013badfeb58351d4e72b9e44;hpb=ce39c447ab47ac1616cea079210c7651f486f425;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 86b1cb7..a991b8c 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -39,6 +39,7 @@ import Id import OccName import Name import NameEnv +import TysPrim ( intPrimTy ) import DsMonad import PrelNames @@ -69,6 +70,7 @@ data Builtins = Builtins { , lengthPAVar :: Var , replicatePAVar :: Var , emptyPAVar :: Var + , liftingContext :: Var } paDictTyCon :: Builtins -> TyCon @@ -92,6 +94,9 @@ initBuiltins replicatePAVar <- dsLookupGlobalId replicatePAName emptyPAVar <- dsLookupGlobalId emptyPAName + liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy) + newUnique + return $ Builtins { parrayTyCon = parrayTyCon , paClass = paClass @@ -103,6 +108,7 @@ initBuiltins , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar , emptyPAVar = emptyPAVar + , liftingContext = liftingContext } data GlobalEnv = GlobalEnv { @@ -213,6 +219,9 @@ instance Monad VM where noV :: VM a noV = VM $ \_ _ _ -> return No +traceNoV :: String -> SDoc -> VM a +traceNoV s d = pprTrace s d noV + tryV :: VM a -> VM (Maybe a) tryV (VM p) = VM $ \bi genv lenv -> do @@ -224,6 +233,9 @@ tryV (VM p) = VM $ \bi genv lenv -> maybeV :: VM (Maybe a) -> VM a maybeV p = maybe noV return =<< p +traceMaybeV :: String -> SDoc -> VM (Maybe a) -> VM a +traceMaybeV s d p = maybe (traceNoV s d) return =<< p + orElseV :: VM a -> VM a -> VM a orElseV p q = maybe q return =<< tryV p @@ -336,7 +348,8 @@ lookupVar v case r of Just e -> return (Local e) Nothing -> liftM Global - $ maybeV (readGEnv $ \env -> lookupVarEnv (global_vars env) v) + $ traceMaybeV "lookupVar" (ppr v) + (readGEnv $ \env -> lookupVarEnv (global_vars env) v) lookupTyCon :: TyCon -> VM (Maybe TyCon) lookupTyCon tc @@ -393,7 +406,7 @@ lookupInst cls tys where inst_tys' = [ty | Right ty <- inst_tys] noFlexiVar = all isRight inst_tys - _other -> noV + _other -> traceNoV "lookupInst" (ppr cls <+> ppr tys) } where isRight (Left _) = False