projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Eliminate a global variable
[ghc-hetmet.git]
/
compiler
/
vectorise
/
VectBuiltIn.hs
diff --git
a/compiler/vectorise/VectBuiltIn.hs
b/compiler/vectorise/VectBuiltIn.hs
index
7dc84ee
..
c61343b
100644
(file)
--- a/
compiler/vectorise/VectBuiltIn.hs
+++ b/
compiler/vectorise/VectBuiltIn.hs
@@
-26,7
+26,7
@@
import TypeRep ( funTyCon )
import Type ( Type, mkTyConApp )
import TysPrim
import TysWiredIn ( unitTyCon, unitDataCon,
import Type ( Type, mkTyConApp )
import TysPrim
import TysWiredIn ( unitTyCon, unitDataCon,
- tupleTyCon,
+ tupleTyCon, tupleCon,
intTyCon, intTyConName, intTy,
doubleTyCon, doubleTyConName,
boolTyCon, boolTyConName, trueDataCon, falseDataCon,
intTyCon, intTyConName, intTy,
doubleTyCon, doubleTyConName,
boolTyCon, boolTyConName, trueDataCon, falseDataCon,
@@
-42,7
+42,7
@@
import Control.Monad ( liftM, zipWithM )
import Data.List ( unzip4 )
mAX_NDP_PROD :: Int
import Data.List ( unzip4 )
mAX_NDP_PROD :: Int
-mAX_NDP_PROD = 3
+mAX_NDP_PROD = 5
mAX_NDP_SUM :: Int
mAX_NDP_SUM = 3
mAX_NDP_SUM :: Int
mAX_NDP_SUM = 3
@@
-53,8
+53,17
@@
mAX_NDP_COMBINE = 2
mkNDPModule :: FastString -> Module
mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
mkNDPModule :: FastString -> Module
mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
-nDP_UARR, nDP_PARRAY, nDP_REPR, nDP_CLOSURE, nDP_UNBOXED, nDP_INSTANCES, nDP_COMBINATORS,
- nDP_PRELUDE_PARR, nDP_PRELUDE_INT, nDP_PRELUDE_DOUBLE :: Module
+nDP_UARR,
+ nDP_PARRAY,
+ nDP_REPR,
+ nDP_CLOSURE,
+ nDP_UNBOXED,
+ nDP_INSTANCES,
+ nDP_COMBINATORS,
+ nDP_PRELUDE_PARR,
+ nDP_PRELUDE_INT,
+ nDP_PRELUDE_DOUBLE,
+ nDP_PRELUDE_TUPLE :: Module
nDP_UARR = mkNDPModule FSLIT("Data.Array.Parallel.Unlifted.Flat.UArr")
nDP_PARRAY = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.PArray")
nDP_UARR = mkNDPModule FSLIT("Data.Array.Parallel.Unlifted.Flat.UArr")
nDP_PARRAY = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.PArray")
@@
-67,6
+76,7
@@
nDP_COMBINATORS = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Combinators")
nDP_PRELUDE_PARR = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.PArr")
nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Int")
nDP_PRELUDE_DOUBLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Double")
nDP_PRELUDE_PARR = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.PArr")
nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Int")
nDP_PRELUDE_DOUBLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Double")
+nDP_PRELUDE_TUPLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Tuple")
data Builtins = Builtins {
parrayTyCon :: TyCon
data Builtins = Builtins {
parrayTyCon :: TyCon
@@
-200,20
+210,31
@@
initBuiltinVars _
= do
uvars <- zipWithM externalVar umods ufs
vvars <- zipWithM externalVar vmods vfs
= do
uvars <- zipWithM externalVar umods ufs
vvars <- zipWithM externalVar vmods vfs
+ cvars <- zipWithM externalVar cmods cfs
return $ [(v,v) | v <- map dataConWorkId defaultDataConWorkers]
return $ [(v,v) | v <- map dataConWorkId defaultDataConWorkers]
+ ++ zip (map dataConWorkId cons) cvars
++ zip uvars vvars
where
(umods, ufs, vmods, vfs) = unzip4 preludeVars
++ zip uvars vvars
where
(umods, ufs, vmods, vfs) = unzip4 preludeVars
+ (cons, cmods, cfs) = unzip3 preludeDataCons
+
defaultDataConWorkers :: [DataCon]
defaultDataConWorkers = [trueDataCon, falseDataCon, unitDataCon]
defaultDataConWorkers :: [DataCon]
defaultDataConWorkers = [trueDataCon, falseDataCon, unitDataCon]
+preludeDataCons :: [(DataCon, Module, FastString)]
+preludeDataCons
+ = [mk_tup n nDP_PRELUDE_TUPLE (mkFastString $ "tup" ++ show n) | n <- [2..3]]
+ where
+ mk_tup n mod name = (tupleCon Boxed n, mod, name)
+
preludeVars :: [(Module, FastString, Module, FastString)]
preludeVars
= [
mk gHC_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA")
, mk gHC_PARR FSLIT("zipWithP") nDP_COMBINATORS FSLIT("zipWithPA")
, mk gHC_PARR FSLIT("zipP") nDP_COMBINATORS FSLIT("zipPA")
preludeVars :: [(Module, FastString, Module, FastString)]
preludeVars
= [
mk gHC_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA")
, mk gHC_PARR FSLIT("zipWithP") nDP_COMBINATORS FSLIT("zipWithPA")
, mk gHC_PARR FSLIT("zipP") nDP_COMBINATORS FSLIT("zipPA")
+ , mk gHC_PARR FSLIT("unzipP") nDP_COMBINATORS FSLIT("unzipPA")
, mk gHC_PARR FSLIT("filterP") nDP_COMBINATORS FSLIT("filterPA")
, mk gHC_PARR FSLIT("lengthP") nDP_COMBINATORS FSLIT("lengthPA")
, mk gHC_PARR FSLIT("replicateP") nDP_COMBINATORS FSLIT("replicatePA")
, mk gHC_PARR FSLIT("filterP") nDP_COMBINATORS FSLIT("filterPA")
, mk gHC_PARR FSLIT("lengthP") nDP_COMBINATORS FSLIT("lengthPA")
, mk gHC_PARR FSLIT("replicateP") nDP_COMBINATORS FSLIT("replicatePA")
@@
-226,6
+247,7
@@
preludeVars
, mk nDP_PRELUDE_INT FSLIT("plus") nDP_PRELUDE_INT FSLIT("plusV")
, mk nDP_PRELUDE_INT FSLIT("minus") nDP_PRELUDE_INT FSLIT("minusV")
, mk nDP_PRELUDE_INT FSLIT("mult") nDP_PRELUDE_INT FSLIT("multV")
, mk nDP_PRELUDE_INT FSLIT("plus") nDP_PRELUDE_INT FSLIT("plusV")
, mk nDP_PRELUDE_INT FSLIT("minus") nDP_PRELUDE_INT FSLIT("minusV")
, mk nDP_PRELUDE_INT FSLIT("mult") nDP_PRELUDE_INT FSLIT("multV")
+ , mk nDP_PRELUDE_INT FSLIT("intDiv") nDP_PRELUDE_INT FSLIT("intDivV")
, mk nDP_PRELUDE_INT FSLIT("sumP") nDP_PRELUDE_INT FSLIT("sumPA")
, mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA")
, mk nDP_PRELUDE_INT FSLIT("sumP") nDP_PRELUDE_INT FSLIT("sumPA")
, mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA")
@@
-239,6
+261,7
@@
preludeVars
, mk nDP_PRELUDE_DOUBLE FSLIT("plus") nDP_PRELUDE_DOUBLE FSLIT("plusV")
, mk nDP_PRELUDE_DOUBLE FSLIT("minus") nDP_PRELUDE_DOUBLE FSLIT("minusV")
, mk nDP_PRELUDE_DOUBLE FSLIT("mult") nDP_PRELUDE_DOUBLE FSLIT("multV")
, mk nDP_PRELUDE_DOUBLE FSLIT("plus") nDP_PRELUDE_DOUBLE FSLIT("plusV")
, mk nDP_PRELUDE_DOUBLE FSLIT("minus") nDP_PRELUDE_DOUBLE FSLIT("minusV")
, mk nDP_PRELUDE_DOUBLE FSLIT("mult") nDP_PRELUDE_DOUBLE FSLIT("multV")
+ , mk nDP_PRELUDE_DOUBLE FSLIT("divide") nDP_PRELUDE_DOUBLE FSLIT("divideV")
, mk nDP_PRELUDE_DOUBLE FSLIT("sumP") nDP_PRELUDE_DOUBLE FSLIT("sumPA")
, mk nDP_PRELUDE_DOUBLE FSLIT("minIndexP")
nDP_PRELUDE_DOUBLE FSLIT("minIndexPA")
, mk nDP_PRELUDE_DOUBLE FSLIT("sumP") nDP_PRELUDE_DOUBLE FSLIT("sumPA")
, mk nDP_PRELUDE_DOUBLE FSLIT("minIndexP")
nDP_PRELUDE_DOUBLE FSLIT("minIndexPA")
@@
-308,7
+331,7
@@
builtinPAs bi
where
mk name mod fs = (name, mod, fs)
where
mk name mod fs = (name, mod, fs)
- tups = map mk_tup [2..3]
+ tups = map mk_tup [2..mAX_NDP_PROD]
mk_tup n = mk (tyConName $ tupleTyCon Boxed n)
nDP_INSTANCES
(mkFastString $ "dPA_" ++ show n)
mk_tup n = mk (tyConName $ tupleTyCon Boxed n)
nDP_INSTANCES
(mkFastString $ "dPA_" ++ show n)