X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=0329af8bb5625eadf9f1a242a84eda7a7734603b;hb=86193bcfc847f1a1f844508224489456f08d6b83;hp=09e2d2ff3ae54dc62d876a98e3b9a2e5c2dbfabe;hpb=24901afd71ec4776b2949f38c87103eb2cda2985;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 09e2d2f..0329af8 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -3,9 +3,9 @@ module VectMonad ( VM, noV, tryV, maybeV, orElseV, fixV, localV, closedV, initV, - cloneName, newLocalVar, newTyVar, + cloneName, newExportedVar, newLocalVar, newDummyVar, newTyVar, - Builtins(..), paDictTyCon, + Builtins(..), paDictTyCon, paDictDataCon, builtin, GlobalEnv(..), @@ -47,6 +47,7 @@ import FamInstEnv import Panic import Outputable import FastString +import SrcLoc ( noSrcSpan ) import Control.Monad ( liftM ) @@ -65,11 +66,15 @@ data Builtins = Builtins { , applyClosurePVar :: Var , lengthPAVar :: Var , replicatePAVar :: Var + , emptyPAVar :: Var } paDictTyCon :: Builtins -> TyCon paDictTyCon = classTyCon . paClass +paDictDataCon :: Builtins -> DataCon +paDictDataCon = classDataCon . paClass + initBuiltins :: DsM Builtins initBuiltins = do @@ -83,6 +88,7 @@ initBuiltins applyClosurePVar <- dsLookupGlobalId applyClosurePName lengthPAVar <- dsLookupGlobalId lengthPAName replicatePAVar <- dsLookupGlobalId replicatePAName + emptyPAVar <- dsLookupGlobalId emptyPAName return $ Builtins { parrayTyCon = parrayTyCon @@ -94,6 +100,7 @@ initBuiltins , applyClosurePVar = applyClosurePVar , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar + , emptyPAVar = emptyPAVar } data GlobalEnv = GlobalEnv { @@ -274,12 +281,25 @@ cloneName mk_occ name = liftM make (liftDs newUnique) (nameSrcSpan name) | otherwise = mkSystemName u occ_name +newExportedVar :: OccName -> Type -> VM Var +newExportedVar occ_name ty + = do + mod <- liftDs getModuleDs + u <- liftDs newUnique + + let name = mkExternalName u mod occ_name noSrcSpan + + return $ Id.mkExportedLocalId name ty + newLocalVar :: FastString -> Type -> VM Var newLocalVar fs ty = do u <- liftDs newUnique return $ mkSysLocal fs u ty +newDummyVar :: Type -> VM Var +newDummyVar = newLocalVar FSLIT("ds") + newTyVar :: FastString -> Kind -> VM Var newTyVar fs k = do