Fix warnings
[ghc-hetmet.git] / compiler / vectorise / Vectorise / Builtins / Prelude.hs
1
2 -- WARNING: This module is a temporary kludge.  It will soon go away entirely (once 
3 --   VECTORISE SCALAR pragmas are fully implemented.)
4
5 -- | Mapping of prelude functions to vectorised versions.
6 --     Functions like filterP currently have a working but naive version in GHC.PArr
7 --     During vectorisation we replace these by calls to filterPA, which are
8 --     defined in dph-common Data.Array.Parallel.Lifted.Combinators
9 --
10 --     As renamer only sees the GHC.PArr functions, if you want to add a new function
11 --     to the vectoriser there has to be a definition for it in GHC.PArr, even though
12 --     it will never be used at runtime.
13 --
14 module Vectorise.Builtins.Prelude
15         ( preludeVars
16         , preludeScalars)
17 where
18 import Vectorise.Builtins.Modules
19 import PrelNames
20 import Module
21 import FastString
22
23
24 preludeVars :: Modules
25         -> [( Module, FastString        --   Maps the original variable to the one in the DPH 
26             , Module, FastString)]      --   packages that it should be rewritten to.
27 preludeVars (Modules { dph_Combinators    = _dph_Combinators
28                      , dph_Prelude_Int    = dph_Prelude_Int
29                      , dph_Prelude_Word8  = dph_Prelude_Word8
30                      -- , dph_Prelude_Double = dph_Prelude_Double
31                      , dph_Prelude_Bool   = dph_Prelude_Bool 
32                      })
33
34   = [ 
35     -- Map scalar functions to versions using closures. 
36       mk' dph_Prelude_Int "div"         "divV"
37     , mk' dph_Prelude_Int "mod"         "modV"
38     , mk' dph_Prelude_Int "sqrt"        "sqrtV"
39     , mk' dph_Prelude_Int "enumFromToP" "enumFromToPA"
40     ]
41     ++ vars_Ord dph_Prelude_Int
42     ++ vars_Num dph_Prelude_Int
43
44     ++ vars_Ord dph_Prelude_Word8
45     ++ vars_Num dph_Prelude_Word8
46     ++
47     [ mk' dph_Prelude_Word8 "div"     "divV"
48     , mk' dph_Prelude_Word8 "mod"     "modV"
49     , mk' dph_Prelude_Word8 "fromInt" "fromIntV"
50     , mk' dph_Prelude_Word8 "toInt"   "toIntV"
51     ]
52
53     -- ++ vars_Ord        dph_Prelude_Double
54     -- ++ vars_Num        dph_Prelude_Double
55     -- ++ vars_Fractional dph_Prelude_Double
56     -- ++ vars_Floating   dph_Prelude_Double
57     -- ++ vars_RealFrac   dph_Prelude_Double
58     ++
59     [ mk dph_Prelude_Bool  (fsLit "andP")  dph_Prelude_Bool (fsLit "andPA")
60     , mk dph_Prelude_Bool  (fsLit "orP")   dph_Prelude_Bool (fsLit "orPA")
61
62     , mk gHC_CLASSES (fsLit "not")         dph_Prelude_Bool (fsLit "notV")
63     , mk gHC_CLASSES (fsLit "&&")          dph_Prelude_Bool (fsLit "andV")
64     , mk gHC_CLASSES (fsLit "||")          dph_Prelude_Bool (fsLit "orV")
65     ]
66   where
67     mk  = (,,,)
68     mk' mod v v' = mk mod (fsLit v) mod (fsLit v')
69
70     vars_Ord mod 
71      = [ mk' mod "=="        "eqV"
72        , mk' mod "/="        "neqV"
73        , mk' mod "<="        "leV"
74        , mk' mod "<"         "ltV"
75        , mk' mod ">="        "geV"
76        , mk' mod ">"         "gtV"
77        , mk' mod "min"       "minV"
78        , mk' mod "max"       "maxV"
79        , mk' mod "minimumP"  "minimumPA"
80        , mk' mod "maximumP"  "maximumPA"
81        , mk' mod "minIndexP" "minIndexPA"
82        , mk' mod "maxIndexP" "maxIndexPA"
83        ]
84
85     vars_Num mod 
86      = [ mk' mod "+"        "plusV"
87        , mk' mod "-"        "minusV"
88        , mk' mod "*"        "multV"
89        , mk' mod "negate"   "negateV"
90        , mk' mod "abs"      "absV"
91        , mk' mod "sumP"     "sumPA"
92        , mk' mod "productP" "productPA"
93        ]
94
95     -- vars_Fractional mod 
96     --  = [ mk' mod "/"     "divideV"
97     --    , mk' mod "recip" "recipV"
98     --    ]
99     -- 
100     -- vars_Floating mod 
101     --  = [ mk' mod "pi"      "pi"
102     --    , mk' mod "exp"     "expV"
103     --    , mk' mod "sqrt"    "sqrtV"
104     --    , mk' mod "log"     "logV"
105     --    , mk' mod "sin"     "sinV"
106     --    , mk' mod "tan"     "tanV"
107     --    , mk' mod "cos"     "cosV"
108     --    , mk' mod "asin"    "asinV"
109     --    , mk' mod "atan"    "atanV"
110     --    , mk' mod "acos"    "acosV"
111     --    , mk' mod "sinh"    "sinhV"
112     --    , mk' mod "tanh"    "tanhV"
113     --    , mk' mod "cosh"    "coshV"
114     --    , mk' mod "asinh"   "asinhV"
115     --    , mk' mod "atanh"   "atanhV"
116     --    , mk' mod "acosh"   "acoshV"
117     --    , mk' mod "**"      "powV"
118     --    , mk' mod "logBase" "logBaseV"
119     --    ]
120     -- 
121     -- vars_RealFrac mod
122     --  = [ mk' mod "fromInt"  "fromIntV"
123     --    , mk' mod "truncate" "truncateV"
124     --    , mk' mod "round"    "roundV"
125     --    , mk' mod "ceiling"  "ceilingV"
126     --    , mk' mod "floor"    "floorV"
127     --    ]
128     -- 
129 preludeScalars :: Modules -> [(Module, FastString)]
130 preludeScalars (Modules { dph_Prelude_Int    = dph_Prelude_Int
131                         , dph_Prelude_Word8  = dph_Prelude_Word8
132                         , dph_Prelude_Double = dph_Prelude_Double
133                         })
134   = [ mk dph_Prelude_Int "div"
135     , mk dph_Prelude_Int "mod"
136     , mk dph_Prelude_Int "sqrt"
137     ]
138     ++ scalars_Ord dph_Prelude_Int
139     ++ scalars_Num dph_Prelude_Int
140
141     ++ scalars_Ord dph_Prelude_Word8
142     ++ scalars_Num dph_Prelude_Word8
143     ++
144     [ mk dph_Prelude_Word8 "div"
145     , mk dph_Prelude_Word8 "mod"
146     , mk dph_Prelude_Word8 "fromInt"
147     , mk dph_Prelude_Word8 "toInt"
148     ]
149
150     ++ scalars_Ord dph_Prelude_Double
151     ++ scalars_Num dph_Prelude_Double
152     ++ scalars_Fractional dph_Prelude_Double
153     ++ scalars_Floating dph_Prelude_Double
154     ++ scalars_RealFrac dph_Prelude_Double
155   where
156     mk mod s = (mod, fsLit s)
157
158     scalars_Ord mod 
159      = [ mk mod "=="
160        , mk mod "/="
161        , mk mod "<="
162        , mk mod "<"
163        , mk mod ">="
164        , mk mod ">"
165        , mk mod "min"
166        , mk mod "max"
167        ]
168
169     scalars_Num mod 
170      = [ mk mod "+"
171        , mk mod "-"
172        , mk mod "*"
173        , mk mod "negate"
174        , mk mod "abs"
175        ]
176
177     scalars_Fractional mod 
178      = [ mk mod "/"
179        , mk mod "recip"
180        ]
181
182     scalars_Floating mod 
183      = [ mk mod "pi"
184        , mk mod "exp"
185        , mk mod "sqrt"
186        , mk mod "log"
187        , mk mod "sin"
188        , mk mod "tan"
189        , mk mod "cos"
190        , mk mod "asin"
191        , mk mod "atan"
192        , mk mod "acos"
193        , mk mod "sinh"
194        , mk mod "tanh"
195        , mk mod "cosh"
196        , mk mod "asinh"
197        , mk mod "atanh"
198        , mk mod "acosh"
199        , mk mod "**"
200        , mk mod "logBase"
201        ]
202
203     scalars_RealFrac mod 
204      = [ mk mod "fromInt"
205        , mk mod "truncate"
206        , mk mod "round"
207        , mk mod "ceiling"
208        , mk mod "floor"
209        ]