X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=56f5b8fa90db095b8acb0a046c5564fb95e64c8e;hb=7e8cba32c6f045dde3db8a9ddc9831ec8ab4ed43;hp=7a25c8ddd21f4183378e2b6e81d0997cf128cb0c;hpb=635ea064b13b3e172500e134bbc0fb25868dc4ec;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 7a25c8d..56f5b8f 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -2,7 +2,8 @@ module VectMonad ( Scope(..), VM, - noV, tryV, maybeV, traceMaybeV, orElseV, fixV, localV, closedV, initV, + noV, traceNoV, tryV, maybeV, traceMaybeV, orElseV, fixV, localV, closedV, + initV, cantVectorise, maybeCantVectorise, maybeCantVectoriseM, liftDs, cloneName, cloneId, cloneVar, newExportedVar, newLocalVar, newDummyVar, newTyVar, @@ -205,6 +206,25 @@ instance Monad VM where Yes genv' lenv' x -> runVM (f x) bi genv' lenv' No -> return No + +cantVectorise :: String -> SDoc -> a +cantVectorise s d = pgmError + . showSDocDump + $ vcat [text "*** Vectorisation error ***", + nest 4 $ sep [text s, nest 4 d]] + +maybeCantVectorise :: String -> SDoc -> Maybe a -> a +maybeCantVectorise s d Nothing = cantVectorise s d +maybeCantVectorise _ _ (Just x) = x + +maybeCantVectoriseM :: Monad m => String -> SDoc -> m (Maybe a) -> m a +maybeCantVectoriseM s d p + = do + r <- p + case r of + Just x -> return x + Nothing -> cantVectorise s d + noV :: VM a noV = VM $ \_ _ _ -> return No @@ -335,7 +355,7 @@ newLocalVar fs ty return $ mkSysLocal fs u ty newDummyVar :: Type -> VM Var -newDummyVar = newLocalVar (fsLit "ds") +newDummyVar = newLocalVar (fsLit "vv") newTyVar :: FastString -> Kind -> VM Var newTyVar fs k @@ -359,8 +379,8 @@ lookupVar v case r of Just e -> return (Local e) Nothing -> liftM Global - $ traceMaybeV "lookupVar" (ppr v) - (readGEnv $ \env -> lookupVarEnv (global_vars env) v) + . maybeCantVectoriseM "Variable not vectorised:" (ppr v) + . readGEnv $ \env -> lookupVarEnv (global_vars env) v lookupTyCon :: TyCon -> VM (Maybe TyCon) lookupTyCon tc