projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make sure some TyCons always vectorise to themselves
[ghc-hetmet.git]
/
compiler
/
vectorise
/
VectBuiltIn.hs
diff --git
a/compiler/vectorise/VectBuiltIn.hs
b/compiler/vectorise/VectBuiltIn.hs
index
cea139d
..
19df7cc
100644
(file)
--- a/
compiler/vectorise/VectBuiltIn.hs
+++ b/
compiler/vectorise/VectBuiltIn.hs
@@
-6,7
+6,7
@@
-- for details
module VectBuiltIn (
-- for details
module VectBuiltIn (
- Builtins(..), sumTyCon, prodTyCon,
+ Builtins(..), sumTyCon, prodTyCon, combinePAVar,
initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs,
primMethod, primPArray
initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs,
primMethod, primPArray
@@
-45,6
+45,9
@@
mAX_NDP_PROD = 3
mAX_NDP_SUM :: Int
mAX_NDP_SUM = 3
mAX_NDP_SUM :: Int
mAX_NDP_SUM = 3
+mAX_NDP_COMBINE :: Int
+mAX_NDP_COMBINE = 2
+
mkNDPModule :: FastString -> Module
mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
mkNDPModule :: FastString -> Module
mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
@@
-62,6
+65,7
@@
data Builtins = Builtins {
, prTyCon :: TyCon
, prDataCon :: DataCon
, parrayIntPrimTyCon :: TyCon
, prTyCon :: TyCon
, prDataCon :: DataCon
, parrayIntPrimTyCon :: TyCon
+ , parrayBoolPrimTyCon :: TyCon
, voidTyCon :: TyCon
, wrapTyCon :: TyCon
, sumTyCons :: Array Int TyCon
, voidTyCon :: TyCon
, wrapTyCon :: TyCon
, sumTyCons :: Array Int TyCon
@@
-74,11
+78,13
@@
data Builtins = Builtins {
, applyClosurePVar :: Var
, replicatePAIntPrimVar :: Var
, upToPAIntPrimVar :: Var
, applyClosurePVar :: Var
, replicatePAIntPrimVar :: Var
, upToPAIntPrimVar :: Var
+ , selectPAIntPrimVar :: Var
+ , truesPABoolPrimVar :: Var
, lengthPAVar :: Var
, replicatePAVar :: Var
, emptyPAVar :: Var
, lengthPAVar :: Var
, replicatePAVar :: Var
, emptyPAVar :: Var
- -- , packPAVar :: Var
- -- , combinePAVar :: Var
+ , packPAVar :: Var
+ , combinePAVars :: Array Int Var
, liftingContext :: Var
}
, liftingContext :: Var
}
@@
-93,6
+99,11
@@
prodTyCon n bi
| n >= 0 && n <= mAX_NDP_PROD = tupleTyCon Boxed n
| otherwise = pprPanic "prodTyCon" (ppr n)
| n >= 0 && n <= mAX_NDP_PROD = tupleTyCon Boxed n
| otherwise = pprPanic "prodTyCon" (ppr n)
+combinePAVar :: Int -> Builtins -> Var
+combinePAVar n bi
+ | n >= 2 && n <= mAX_NDP_COMBINE = combinePAVars bi ! n
+ | otherwise = pprPanic "combinePAVar" (ppr n)
+
initBuiltins :: DsM Builtins
initBuiltins
= do
initBuiltins :: DsM Builtins
initBuiltins
= do
@@
-103,6
+114,7
@@
initBuiltins
prTyCon <- externalTyCon nDP_PARRAY FSLIT("PR")
let [prDataCon] = tyConDataCons prTyCon
parrayIntPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Int#")
prTyCon <- externalTyCon nDP_PARRAY FSLIT("PR")
let [prDataCon] = tyConDataCons prTyCon
parrayIntPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Int#")
+ parrayBoolPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Bool#")
closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->")
voidTyCon <- externalTyCon nDP_REPR FSLIT("Void")
closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->")
voidTyCon <- externalTyCon nDP_REPR FSLIT("Void")
@@
-120,11
+132,17
@@
initBuiltins
applyClosurePVar <- externalVar nDP_CLOSURE FSLIT("$:^")
replicatePAIntPrimVar <- externalVar nDP_PRIM FSLIT("replicatePA_Int#")
upToPAIntPrimVar <- externalVar nDP_PRIM FSLIT("upToPA_Int#")
applyClosurePVar <- externalVar nDP_CLOSURE FSLIT("$:^")
replicatePAIntPrimVar <- externalVar nDP_PRIM FSLIT("replicatePA_Int#")
upToPAIntPrimVar <- externalVar nDP_PRIM FSLIT("upToPA_Int#")
+ selectPAIntPrimVar <- externalVar nDP_PRIM FSLIT("selectPA_Int#")
+ truesPABoolPrimVar <- externalVar nDP_PRIM FSLIT("truesPA_Bool#")
lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA")
replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA")
emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA")
lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA")
replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA")
emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA")
- -- packPAVar <- dsLookupGlobalId packPAName
- -- combinePAVar <- dsLookupGlobalId combinePAName
+ packPAVar <- externalVar nDP_PARRAY FSLIT("packPA")
+
+ combines <- mapM (externalVar nDP_PARRAY)
+ [mkFastString ("combine" ++ show i ++ "PA")
+ | i <- [2..mAX_NDP_COMBINE]]
+ let combinePAVars = listArray (2, mAX_NDP_COMBINE) combines
liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy)
newUnique
liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy)
newUnique
@@
-137,6
+155,7
@@
initBuiltins
, prTyCon = prTyCon
, prDataCon = prDataCon
, parrayIntPrimTyCon = parrayIntPrimTyCon
, prTyCon = prTyCon
, prDataCon = prDataCon
, parrayIntPrimTyCon = parrayIntPrimTyCon
+ , parrayBoolPrimTyCon = parrayBoolPrimTyCon
, voidTyCon = voidTyCon
, wrapTyCon = wrapTyCon
, sumTyCons = sumTyCons
, voidTyCon = voidTyCon
, wrapTyCon = wrapTyCon
, sumTyCons = sumTyCons
@@
-149,16
+168,22
@@
initBuiltins
, applyClosurePVar = applyClosurePVar
, replicatePAIntPrimVar = replicatePAIntPrimVar
, upToPAIntPrimVar = upToPAIntPrimVar
, applyClosurePVar = applyClosurePVar
, replicatePAIntPrimVar = replicatePAIntPrimVar
, upToPAIntPrimVar = upToPAIntPrimVar
+ , selectPAIntPrimVar = selectPAIntPrimVar
+ , truesPABoolPrimVar = truesPABoolPrimVar
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
, emptyPAVar = emptyPAVar
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
, emptyPAVar = emptyPAVar
- -- , packPAVar = packPAVar
- -- , combinePAVar = combinePAVar
+ , packPAVar = packPAVar
+ , combinePAVars = combinePAVars
, liftingContext = liftingContext
}
initBuiltinTyCons :: Builtins -> [(Name, TyCon)]
, liftingContext = liftingContext
}
initBuiltinTyCons :: Builtins -> [(Name, TyCon)]
-initBuiltinTyCons bi = [(tyConName funTyCon, closureTyCon bi)]
+initBuiltinTyCons bi = (tyConName funTyCon, closureTyCon bi)
+ : [(tyConName tc, tc) | tc <- defaultTyCons]
+
+defaultTyCons :: [TyCon]
+defaultTyCons = [intTyCon]
initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)]
initBuiltinDicts ps
initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)]
initBuiltinDicts ps