7dfc0b0733ee959e512ce4b594258b9dd0083589
[ghc.git] / compiler / basicTypes / MkId.hs
1 {-
2 (c) The University of Glasgow 2006
3 (c) The AQUA Project, Glasgow University, 1998
4
5
6 This module contains definitions for the IdInfo for things that
7 have a standard form, namely:
8
9 - data constructors
10 - record selectors
11 - method and superclass selectors
12 - primitive operations
13 -}
14
15 {-# LANGUAGE CPP #-}
16
17 module MkId (
18 mkDictFunId, mkDictFunTy, mkDictSelId, mkDictSelRhs,
19
20 mkPrimOpId, mkFCallId,
21
22 wrapNewTypeBody, unwrapNewTypeBody,
23 wrapFamInstBody, unwrapFamInstScrut,
24 wrapTypeUnbranchedFamInstBody, unwrapTypeUnbranchedFamInstScrut,
25
26 DataConBoxer(..), mkDataConRep, mkDataConWorkId,
27
28 -- And some particular Ids; see below for why they are wired in
29 wiredInIds, ghcPrimIds,
30 unsafeCoerceName, unsafeCoerceId, realWorldPrimId,
31 voidPrimId, voidArgId,
32 nullAddrId, seqId, lazyId, lazyIdKey, runRWId,
33 coercionTokenId, magicDictId, coerceId,
34 proxyHashId,
35
36 -- Re-export error Ids
37 module PrelRules
38 ) where
39
40 #include "HsVersions.h"
41
42 import Rules
43 import TysPrim
44 import TysWiredIn
45 import PrelRules
46 import Type
47 import FamInstEnv
48 import Coercion
49 import TcType
50 import MkCore
51 import CoreUtils ( exprType, mkCast )
52 import CoreUnfold
53 import Literal
54 import TyCon
55 import CoAxiom
56 import Class
57 import NameSet
58 import VarSet
59 import Name
60 import PrimOp
61 import ForeignCall
62 import DataCon
63 import Id
64 import IdInfo
65 import Demand
66 import CoreSyn
67 import Unique
68 import UniqSupply
69 import PrelNames
70 import BasicTypes hiding ( SuccessFlag(..) )
71 import Util
72 import Pair
73 import DynFlags
74 import Outputable
75 import FastString
76 import ListSetOps
77 import qualified GHC.LanguageExtensions as LangExt
78
79 import Data.Maybe ( maybeToList )
80
81 {-
82 ************************************************************************
83 * *
84 \subsection{Wired in Ids}
85 * *
86 ************************************************************************
87
88 Note [Wired-in Ids]
89 ~~~~~~~~~~~~~~~~~~~
90 There are several reasons why an Id might appear in the wiredInIds:
91
92 (1) The ghcPrimIds are wired in because they can't be defined in
93 Haskell at all, although the can be defined in Core. They have
94 compulsory unfoldings, so they are always inlined and they have
95 no definition site. Their home module is GHC.Prim, so they
96 also have a description in primops.txt.pp, where they are called
97 'pseudoops'.
98
99 (2) The 'error' function, eRROR_ID, is wired in because we don't yet have
100 a way to express in an interface file that the result type variable
101 is 'open'; that is can be unified with an unboxed type
102
103 [The interface file format now carry such information, but there's
104 no way yet of expressing at the definition site for these
105 error-reporting functions that they have an 'open'
106 result type. -- sof 1/99]
107
108 (3) Other error functions (rUNTIME_ERROR_ID) are wired in (a) because
109 the desugarer generates code that mentions them directly, and
110 (b) for the same reason as eRROR_ID
111
112 (4) lazyId is wired in because the wired-in version overrides the
113 strictness of the version defined in GHC.Base
114
115 In cases (2-4), the function has a definition in a library module, and
116 can be called; but the wired-in version means that the details are
117 never read from that module's interface file; instead, the full definition
118 is right here.
119 -}
120
121 wiredInIds :: [Id]
122 wiredInIds
123 = [lazyId, dollarId, oneShotId, runRWId]
124 ++ errorIds -- Defined in MkCore
125 ++ ghcPrimIds
126
127 -- These Ids are exported from GHC.Prim
128 ghcPrimIds :: [Id]
129 ghcPrimIds
130 = [ -- These can't be defined in Haskell, but they have
131 -- perfectly reasonable unfoldings in Core
132 realWorldPrimId,
133 voidPrimId,
134 unsafeCoerceId,
135 nullAddrId,
136 seqId,
137 magicDictId,
138 coerceId,
139 proxyHashId
140 ]
141
142 {-
143 ************************************************************************
144 * *
145 \subsection{Data constructors}
146 * *
147 ************************************************************************
148
149 The wrapper for a constructor is an ordinary top-level binding that evaluates
150 any strict args, unboxes any args that are going to be flattened, and calls
151 the worker.
152
153 We're going to build a constructor that looks like:
154
155 data (Data a, C b) => T a b = T1 !a !Int b
156
157 T1 = /\ a b ->
158 \d1::Data a, d2::C b ->
159 \p q r -> case p of { p ->
160 case q of { q ->
161 Con T1 [a,b] [p,q,r]}}
162
163 Notice that
164
165 * d2 is thrown away --- a context in a data decl is used to make sure
166 one *could* construct dictionaries at the site the constructor
167 is used, but the dictionary isn't actually used.
168
169 * We have to check that we can construct Data dictionaries for
170 the types a and Int. Once we've done that we can throw d1 away too.
171
172 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
173 all that matters is that the arguments are evaluated. "seq" is
174 very careful to preserve evaluation order, which we don't need
175 to be here.
176
177 You might think that we could simply give constructors some strictness
178 info, like PrimOps, and let CoreToStg do the let-to-case transformation.
179 But we don't do that because in the case of primops and functions strictness
180 is a *property* not a *requirement*. In the case of constructors we need to
181 do something active to evaluate the argument.
182
183 Making an explicit case expression allows the simplifier to eliminate
184 it in the (common) case where the constructor arg is already evaluated.
185
186 Note [Wrappers for data instance tycons]
187 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188 In the case of data instances, the wrapper also applies the coercion turning
189 the representation type into the family instance type to cast the result of
190 the wrapper. For example, consider the declarations
191
192 data family Map k :: * -> *
193 data instance Map (a, b) v = MapPair (Map a (Pair b v))
194
195 The tycon to which the datacon MapPair belongs gets a unique internal
196 name of the form :R123Map, and we call it the representation tycon.
197 In contrast, Map is the family tycon (accessible via
198 tyConFamInst_maybe). A coercion allows you to move between
199 representation and family type. It is accessible from :R123Map via
200 tyConFamilyCoercion_maybe and has kind
201
202 Co123Map a b v :: {Map (a, b) v ~ :R123Map a b v}
203
204 The wrapper and worker of MapPair get the types
205
206 -- Wrapper
207 $WMapPair :: forall a b v. Map a (Map a b v) -> Map (a, b) v
208 $WMapPair a b v = MapPair a b v `cast` sym (Co123Map a b v)
209
210 -- Worker
211 MapPair :: forall a b v. Map a (Map a b v) -> :R123Map a b v
212
213 This coercion is conditionally applied by wrapFamInstBody.
214
215 It's a bit more complicated if the data instance is a GADT as well!
216
217 data instance T [a] where
218 T1 :: forall b. b -> T [Maybe b]
219
220 Hence we translate to
221
222 -- Wrapper
223 $WT1 :: forall b. b -> T [Maybe b]
224 $WT1 b v = T1 (Maybe b) b (Maybe b) v
225 `cast` sym (Co7T (Maybe b))
226
227 -- Worker
228 T1 :: forall c b. (c ~ Maybe b) => b -> :R7T c
229
230 -- Coercion from family type to representation type
231 Co7T a :: T [a] ~ :R7T a
232
233 Note [Newtype datacons]
234 ~~~~~~~~~~~~~~~~~~~~~~~
235 The "data constructor" for a newtype should always be vanilla. At one
236 point this wasn't true, because the newtype arising from
237 class C a => D a
238 looked like
239 newtype T:D a = D:D (C a)
240 so the data constructor for T:C had a single argument, namely the
241 predicate (C a). But now we treat that as an ordinary argument, not
242 part of the theta-type, so all is well.
243
244
245 ************************************************************************
246 * *
247 \subsection{Dictionary selectors}
248 * *
249 ************************************************************************
250
251 Selecting a field for a dictionary. If there is just one field, then
252 there's nothing to do.
253
254 Dictionary selectors may get nested forall-types. Thus:
255
256 class Foo a where
257 op :: forall b. Ord b => a -> b -> b
258
259 Then the top-level type for op is
260
261 op :: forall a. Foo a =>
262 forall b. Ord b =>
263 a -> b -> b
264
265 This is unlike ordinary record selectors, which have all the for-alls
266 at the outside. When dealing with classes it's very convenient to
267 recover the original type signature from the class op selector.
268 -}
269
270 mkDictSelId :: Name -- Name of one of the *value* selectors
271 -- (dictionary superclass or method)
272 -> Class -> Id
273 mkDictSelId name clas
274 = mkGlobalId (ClassOpId clas) name sel_ty info
275 where
276 tycon = classTyCon clas
277 sel_names = map idName (classAllSelIds clas)
278 new_tycon = isNewTyCon tycon
279 [data_con] = tyConDataCons tycon
280 tyvars = dataConUnivTyVars data_con
281 arg_tys = dataConRepArgTys data_con -- Includes the dictionary superclasses
282 val_index = assoc "MkId.mkDictSelId" (sel_names `zip` [0..]) name
283
284 sel_ty = mkSpecForAllTys tyvars (mkFunTy (mkClassPred clas (mkTyVarTys tyvars))
285 (getNth arg_tys val_index))
286
287 base_info = noCafIdInfo
288 `setArityInfo` 1
289 `setStrictnessInfo` strict_sig
290
291 info | new_tycon
292 = base_info `setInlinePragInfo` alwaysInlinePragma
293 `setUnfoldingInfo` mkInlineUnfolding (Just 1) (mkDictSelRhs clas val_index)
294 -- See Note [Single-method classes] in TcInstDcls
295 -- for why alwaysInlinePragma
296
297 | otherwise
298 = base_info `setRuleInfo` mkRuleInfo [rule]
299 -- Add a magic BuiltinRule, but no unfolding
300 -- so that the rule is always available to fire.
301 -- See Note [ClassOp/DFun selection] in TcInstDcls
302
303 n_ty_args = length tyvars
304
305 -- This is the built-in rule that goes
306 -- op (dfT d1 d2) ---> opT d1 d2
307 rule = BuiltinRule { ru_name = fsLit "Class op " `appendFS`
308 occNameFS (getOccName name)
309 , ru_fn = name
310 , ru_nargs = n_ty_args + 1
311 , ru_try = dictSelRule val_index n_ty_args }
312
313 -- The strictness signature is of the form U(AAAVAAAA) -> T
314 -- where the V depends on which item we are selecting
315 -- It's worth giving one, so that absence info etc is generated
316 -- even if the selector isn't inlined
317
318 strict_sig = mkClosedStrictSig [arg_dmd] topRes
319 arg_dmd | new_tycon = evalDmd
320 | otherwise = mkManyUsedDmd $
321 mkProdDmd [ if name == sel_name then evalDmd else absDmd
322 | sel_name <- sel_names ]
323
324 mkDictSelRhs :: Class
325 -> Int -- 0-indexed selector among (superclasses ++ methods)
326 -> CoreExpr
327 mkDictSelRhs clas val_index
328 = mkLams tyvars (Lam dict_id rhs_body)
329 where
330 tycon = classTyCon clas
331 new_tycon = isNewTyCon tycon
332 [data_con] = tyConDataCons tycon
333 tyvars = dataConUnivTyVars data_con
334 arg_tys = dataConRepArgTys data_con -- Includes the dictionary superclasses
335
336 the_arg_id = getNth arg_ids val_index
337 pred = mkClassPred clas (mkTyVarTys tyvars)
338 dict_id = mkTemplateLocal 1 pred
339 arg_ids = mkTemplateLocalsNum 2 arg_tys
340
341 rhs_body | new_tycon = unwrapNewTypeBody tycon (mkTyVarTys tyvars) (Var dict_id)
342 | otherwise = Case (Var dict_id) dict_id (idType the_arg_id)
343 [(DataAlt data_con, arg_ids, varToCoreExpr the_arg_id)]
344 -- varToCoreExpr needed for equality superclass selectors
345 -- sel a b d = case x of { MkC _ (g:a~b) _ -> CO g }
346
347 dictSelRule :: Int -> Arity -> RuleFun
348 -- Tries to persuade the argument to look like a constructor
349 -- application, using exprIsConApp_maybe, and then selects
350 -- from it
351 -- sel_i t1..tk (D t1..tk op1 ... opm) = opi
352 --
353 dictSelRule val_index n_ty_args _ id_unf _ args
354 | (dict_arg : _) <- drop n_ty_args args
355 , Just (_, _, con_args) <- exprIsConApp_maybe id_unf dict_arg
356 = Just (getNth con_args val_index)
357 | otherwise
358 = Nothing
359
360 {-
361 ************************************************************************
362 * *
363 Data constructors
364 * *
365 ************************************************************************
366 -}
367
368 mkDataConWorkId :: Name -> DataCon -> Id
369 mkDataConWorkId wkr_name data_con
370 | isNewTyCon tycon
371 = mkGlobalId (DataConWrapId data_con) wkr_name nt_wrap_ty nt_work_info
372 | otherwise
373 = mkGlobalId (DataConWorkId data_con) wkr_name alg_wkr_ty wkr_info
374
375 where
376 tycon = dataConTyCon data_con
377
378 ----------- Workers for data types --------------
379 alg_wkr_ty = dataConRepType data_con
380 wkr_arity = dataConRepArity data_con
381 wkr_info = noCafIdInfo
382 `setArityInfo` wkr_arity
383 `setStrictnessInfo` wkr_sig
384 `setUnfoldingInfo` evaldUnfolding -- Record that it's evaluated,
385 -- even if arity = 0
386
387 wkr_sig = mkClosedStrictSig (replicate wkr_arity topDmd) (dataConCPR data_con)
388 -- Note [Data-con worker strictness]
389 -- Notice that we do *not* say the worker is strict
390 -- even if the data constructor is declared strict
391 -- e.g. data T = MkT !(Int,Int)
392 -- Why? Because the *wrapper* is strict (and its unfolding has case
393 -- expressions that do the evals) but the *worker* itself is not.
394 -- If we pretend it is strict then when we see
395 -- case x of y -> $wMkT y
396 -- the simplifier thinks that y is "sure to be evaluated" (because
397 -- $wMkT is strict) and drops the case. No, $wMkT is not strict.
398 --
399 -- When the simplifer sees a pattern
400 -- case e of MkT x -> ...
401 -- it uses the dataConRepStrictness of MkT to mark x as evaluated;
402 -- but that's fine... dataConRepStrictness comes from the data con
403 -- not from the worker Id.
404
405 ----------- Workers for newtypes --------------
406 (nt_tvs, _, nt_arg_tys, _) = dataConSig data_con
407 res_ty_args = mkTyVarTys nt_tvs
408 nt_wrap_ty = dataConUserType data_con
409 nt_work_info = noCafIdInfo -- The NoCaf-ness is set by noCafIdInfo
410 `setArityInfo` 1 -- Arity 1
411 `setInlinePragInfo` alwaysInlinePragma
412 `setUnfoldingInfo` newtype_unf
413 id_arg1 = mkTemplateLocal 1 (head nt_arg_tys)
414 newtype_unf = ASSERT2( isVanillaDataCon data_con &&
415 isSingleton nt_arg_tys, ppr data_con )
416 -- Note [Newtype datacons]
417 mkCompulsoryUnfolding $
418 mkLams nt_tvs $ Lam id_arg1 $
419 wrapNewTypeBody tycon res_ty_args (Var id_arg1)
420
421 dataConCPR :: DataCon -> DmdResult
422 dataConCPR con
423 | isDataTyCon tycon -- Real data types only; that is,
424 -- not unboxed tuples or newtypes
425 , null (dataConExTyVars con) -- No existentials
426 , wkr_arity > 0
427 , wkr_arity <= mAX_CPR_SIZE
428 = if is_prod then vanillaCprProdRes (dataConRepArity con)
429 else cprSumRes (dataConTag con)
430 | otherwise
431 = topRes
432 where
433 is_prod = isProductTyCon tycon
434 tycon = dataConTyCon con
435 wkr_arity = dataConRepArity con
436
437 mAX_CPR_SIZE :: Arity
438 mAX_CPR_SIZE = 10
439 -- We do not treat very big tuples as CPR-ish:
440 -- a) for a start we get into trouble because there aren't
441 -- "enough" unboxed tuple types (a tiresome restriction,
442 -- but hard to fix),
443 -- b) more importantly, big unboxed tuples get returned mainly
444 -- on the stack, and are often then allocated in the heap
445 -- by the caller. So doing CPR for them may in fact make
446 -- things worse.
447
448 {-
449 -------------------------------------------------
450 -- Data constructor representation
451 --
452 -- This is where we decide how to wrap/unwrap the
453 -- constructor fields
454 --
455 --------------------------------------------------
456 -}
457
458 type Unboxer = Var -> UniqSM ([Var], CoreExpr -> CoreExpr)
459 -- Unbox: bind rep vars by decomposing src var
460
461 data Boxer = UnitBox | Boxer (TCvSubst -> UniqSM ([Var], CoreExpr))
462 -- Box: build src arg using these rep vars
463
464 newtype DataConBoxer = DCB ([Type] -> [Var] -> UniqSM ([Var], [CoreBind]))
465 -- Bind these src-level vars, returning the
466 -- rep-level vars to bind in the pattern
467
468 mkDataConRep :: DynFlags
469 -> FamInstEnvs
470 -> Name
471 -> Maybe [HsImplBang]
472 -- See Note [Bangs on imported data constructors]
473 -> DataCon
474 -> UniqSM DataConRep
475 mkDataConRep dflags fam_envs wrap_name mb_bangs data_con
476 | not wrapper_reqd
477 = return NoDataConRep
478
479 | otherwise
480 = do { wrap_args <- mapM newLocal wrap_arg_tys
481 ; wrap_body <- mk_rep_app (wrap_args `zip` dropList eq_spec unboxers)
482 initial_wrap_app
483
484 ; let wrap_id = mkGlobalId (DataConWrapId data_con) wrap_name wrap_ty wrap_info
485 wrap_info = noCafIdInfo
486 `setArityInfo` wrap_arity
487 -- It's important to specify the arity, so that partial
488 -- applications are treated as values
489 `setInlinePragInfo` alwaysInlinePragma
490 `setUnfoldingInfo` wrap_unf
491 `setStrictnessInfo` wrap_sig
492 -- We need to get the CAF info right here because TidyPgm
493 -- does not tidy the IdInfo of implicit bindings (like the wrapper)
494 -- so it not make sure that the CAF info is sane
495
496 wrap_sig = mkClosedStrictSig wrap_arg_dmds (dataConCPR data_con)
497 wrap_arg_dmds = map mk_dmd arg_ibangs
498 mk_dmd str | isBanged str = evalDmd
499 | otherwise = topDmd
500 -- The Cpr info can be important inside INLINE rhss, where the
501 -- wrapper constructor isn't inlined.
502 -- And the argument strictness can be important too; we
503 -- may not inline a contructor when it is partially applied.
504 -- For example:
505 -- data W = C !Int !Int !Int
506 -- ...(let w = C x in ...(w p q)...)...
507 -- we want to see that w is strict in its two arguments
508
509 wrap_unf = mkInlineUnfolding (Just wrap_arity) wrap_rhs
510 wrap_tvs = (univ_tvs `minusList` map eqSpecTyVar eq_spec) ++ ex_tvs
511 wrap_rhs = mkLams wrap_tvs $
512 mkLams wrap_args $
513 wrapFamInstBody tycon res_ty_args $
514 wrap_body
515
516 ; return (DCR { dcr_wrap_id = wrap_id
517 , dcr_boxer = mk_boxer boxers
518 , dcr_arg_tys = rep_tys
519 , dcr_stricts = rep_strs
520 , dcr_bangs = arg_ibangs }) }
521
522 where
523 (univ_tvs, ex_tvs, eq_spec, theta, orig_arg_tys, _orig_res_ty)
524 = dataConFullSig data_con
525 res_ty_args = substTyVars (mkTvSubstPrs (map eqSpecPair eq_spec)) univ_tvs
526
527 tycon = dataConTyCon data_con -- The representation TyCon (not family)
528 wrap_ty = dataConUserType data_con
529 ev_tys = eqSpecPreds eq_spec ++ theta
530 all_arg_tys = ev_tys ++ orig_arg_tys
531 ev_ibangs = map (const HsLazy) ev_tys
532 orig_bangs = dataConSrcBangs data_con
533
534 wrap_arg_tys = theta ++ orig_arg_tys
535 wrap_arity = length wrap_arg_tys
536 -- The wrap_args are the arguments *other than* the eq_spec
537 -- Because we are going to apply the eq_spec args manually in the
538 -- wrapper
539
540 arg_ibangs =
541 case mb_bangs of
542 Nothing -> zipWith (dataConSrcToImplBang dflags fam_envs)
543 orig_arg_tys orig_bangs
544 Just bangs -> bangs
545
546 (rep_tys_w_strs, wrappers)
547 = unzip (zipWith dataConArgRep all_arg_tys (ev_ibangs ++ arg_ibangs))
548
549 (unboxers, boxers) = unzip wrappers
550 (rep_tys, rep_strs) = unzip (concat rep_tys_w_strs)
551
552 wrapper_reqd = not (isNewTyCon tycon) -- Newtypes have only a worker
553 && (any isBanged (ev_ibangs ++ arg_ibangs)
554 -- Some forcing/unboxing (includes eq_spec)
555 || isFamInstTyCon tycon -- Cast result
556 || (not $ null eq_spec)) -- GADT
557
558 initial_wrap_app = Var (dataConWorkId data_con)
559 `mkTyApps` res_ty_args
560 `mkVarApps` ex_tvs
561 `mkCoApps` map (mkReflCo Nominal . eqSpecType) eq_spec
562
563 mk_boxer :: [Boxer] -> DataConBoxer
564 mk_boxer boxers = DCB (\ ty_args src_vars ->
565 do { let (ex_vars, term_vars) = splitAtList ex_tvs src_vars
566 subst1 = zipTvSubst univ_tvs ty_args
567 subst2 = extendTCvSubstList subst1 ex_tvs
568 (mkTyVarTys ex_vars)
569 ; (rep_ids, binds) <- go subst2 boxers term_vars
570 ; return (ex_vars ++ rep_ids, binds) } )
571
572 go _ [] src_vars = ASSERT2( null src_vars, ppr data_con ) return ([], [])
573 go subst (UnitBox : boxers) (src_var : src_vars)
574 = do { (rep_ids2, binds) <- go subst boxers src_vars
575 ; return (src_var : rep_ids2, binds) }
576 go subst (Boxer boxer : boxers) (src_var : src_vars)
577 = do { (rep_ids1, arg) <- boxer subst
578 ; (rep_ids2, binds) <- go subst boxers src_vars
579 ; return (rep_ids1 ++ rep_ids2, NonRec src_var arg : binds) }
580 go _ (_:_) [] = pprPanic "mk_boxer" (ppr data_con)
581
582 mk_rep_app :: [(Id,Unboxer)] -> CoreExpr -> UniqSM CoreExpr
583 mk_rep_app [] con_app
584 = return con_app
585 mk_rep_app ((wrap_arg, unboxer) : prs) con_app
586 = do { (rep_ids, unbox_fn) <- unboxer wrap_arg
587 ; expr <- mk_rep_app prs (mkVarApps con_app rep_ids)
588 ; return (unbox_fn expr) }
589
590 {-
591 Note [Bangs on imported data constructors]
592 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
593
594 We pass Maybe [HsImplBang] to mkDataConRep to make use of HsImplBangs
595 from imported modules.
596
597 - Nothing <=> use HsSrcBangs
598 - Just bangs <=> use HsImplBangs
599
600 For imported types we can't work it all out from the HsSrcBangs,
601 because we want to be very sure to follow what the original module
602 (where the data type was declared) decided, and that depends on what
603 flags were enabled when it was compiled. So we record the decisions in
604 the interface file.
605
606 The HsImplBangs passed are in 1-1 correspondence with the
607 dataConOrigArgTys of the DataCon.
608
609 -}
610
611 -------------------------
612 newLocal :: Type -> UniqSM Var
613 newLocal ty = do { uniq <- getUniqueM
614 ; return (mkSysLocalOrCoVar (fsLit "dt") uniq ty) }
615
616 -- | Unpack/Strictness decisions from source module
617 dataConSrcToImplBang
618 :: DynFlags
619 -> FamInstEnvs
620 -> Type
621 -> HsSrcBang
622 -> HsImplBang
623
624 dataConSrcToImplBang dflags fam_envs arg_ty
625 (HsSrcBang ann unpk NoSrcStrict)
626 | xopt LangExt.StrictData dflags -- StrictData => strict field
627 = dataConSrcToImplBang dflags fam_envs arg_ty
628 (HsSrcBang ann unpk SrcStrict)
629 | otherwise -- no StrictData => lazy field
630 = HsLazy
631
632 dataConSrcToImplBang _ _ _ (HsSrcBang _ _ SrcLazy)
633 = HsLazy
634
635 dataConSrcToImplBang dflags fam_envs arg_ty
636 (HsSrcBang _ unpk_prag SrcStrict)
637 | not (gopt Opt_OmitInterfacePragmas dflags) -- Don't unpack if -fomit-iface-pragmas
638 -- Don't unpack if we aren't optimising; rather arbitrarily,
639 -- we use -fomit-iface-pragmas as the indication
640 , let mb_co = topNormaliseType_maybe fam_envs arg_ty
641 -- Unwrap type families and newtypes
642 arg_ty' = case mb_co of { Just (_,ty) -> ty; Nothing -> arg_ty }
643 , isUnpackableType dflags fam_envs arg_ty'
644 , (rep_tys, _) <- dataConArgUnpack arg_ty'
645 , case unpk_prag of
646 NoSrcUnpack ->
647 gopt Opt_UnboxStrictFields dflags
648 || (gopt Opt_UnboxSmallStrictFields dflags
649 && length rep_tys <= 1) -- See Note [Unpack one-wide fields]
650 srcUnpack -> isSrcUnpacked srcUnpack
651 = case mb_co of
652 Nothing -> HsUnpack Nothing
653 Just (co,_) -> HsUnpack (Just co)
654
655 | otherwise -- Record the strict-but-no-unpack decision
656 = HsStrict
657
658
659 -- | Wrappers/Workers and representation following Unpack/Strictness
660 -- decisions
661 dataConArgRep
662 :: Type
663 -> HsImplBang
664 -> ([(Type,StrictnessMark)] -- Rep types
665 ,(Unboxer,Boxer))
666
667 dataConArgRep arg_ty HsLazy
668 = ([(arg_ty, NotMarkedStrict)], (unitUnboxer, unitBoxer))
669
670 dataConArgRep arg_ty HsStrict
671 = ([(arg_ty, MarkedStrict)], (seqUnboxer, unitBoxer))
672
673 dataConArgRep arg_ty (HsUnpack Nothing)
674 | (rep_tys, wrappers) <- dataConArgUnpack arg_ty
675 = (rep_tys, wrappers)
676
677 dataConArgRep _ (HsUnpack (Just co))
678 | let co_rep_ty = pSnd (coercionKind co)
679 , (rep_tys, wrappers) <- dataConArgUnpack co_rep_ty
680 = (rep_tys, wrapCo co co_rep_ty wrappers)
681
682
683 -------------------------
684 wrapCo :: Coercion -> Type -> (Unboxer, Boxer) -> (Unboxer, Boxer)
685 wrapCo co rep_ty (unbox_rep, box_rep) -- co :: arg_ty ~ rep_ty
686 = (unboxer, boxer)
687 where
688 unboxer arg_id = do { rep_id <- newLocal rep_ty
689 ; (rep_ids, rep_fn) <- unbox_rep rep_id
690 ; let co_bind = NonRec rep_id (Var arg_id `Cast` co)
691 ; return (rep_ids, Let co_bind . rep_fn) }
692 boxer = Boxer $ \ subst ->
693 do { (rep_ids, rep_expr)
694 <- case box_rep of
695 UnitBox -> do { rep_id <- newLocal (TcType.substTy subst rep_ty)
696 ; return ([rep_id], Var rep_id) }
697 Boxer boxer -> boxer subst
698 ; let sco = substCoUnchecked subst co
699 ; return (rep_ids, rep_expr `Cast` mkSymCo sco) }
700
701 ------------------------
702 seqUnboxer :: Unboxer
703 seqUnboxer v = return ([v], \e -> Case (Var v) v (exprType e) [(DEFAULT, [], e)])
704
705 unitUnboxer :: Unboxer
706 unitUnboxer v = return ([v], \e -> e)
707
708 unitBoxer :: Boxer
709 unitBoxer = UnitBox
710
711 -------------------------
712 dataConArgUnpack
713 :: Type
714 -> ( [(Type, StrictnessMark)] -- Rep types
715 , (Unboxer, Boxer) )
716
717 dataConArgUnpack arg_ty
718 | Just (tc, tc_args) <- splitTyConApp_maybe arg_ty
719 , Just con <- tyConSingleAlgDataCon_maybe tc
720 -- NB: check for an *algebraic* data type
721 -- A recursive newtype might mean that
722 -- 'arg_ty' is a newtype
723 , let rep_tys = dataConInstArgTys con tc_args
724 = ASSERT( isVanillaDataCon con )
725 ( rep_tys `zip` dataConRepStrictness con
726 ,( \ arg_id ->
727 do { rep_ids <- mapM newLocal rep_tys
728 ; let unbox_fn body
729 = Case (Var arg_id) arg_id (exprType body)
730 [(DataAlt con, rep_ids, body)]
731 ; return (rep_ids, unbox_fn) }
732 , Boxer $ \ subst ->
733 do { rep_ids <- mapM (newLocal . TcType.substTyUnchecked subst) rep_tys
734 ; return (rep_ids, Var (dataConWorkId con)
735 `mkTyApps` (substTysUnchecked subst tc_args)
736 `mkVarApps` rep_ids ) } ) )
737 | otherwise
738 = pprPanic "dataConArgUnpack" (ppr arg_ty)
739 -- An interface file specified Unpacked, but we couldn't unpack it
740
741 isUnpackableType :: DynFlags -> FamInstEnvs -> Type -> Bool
742 -- True if we can unpack the UNPACK the argument type
743 -- See Note [Recursive unboxing]
744 -- We look "deeply" inside rather than relying on the DataCons
745 -- we encounter on the way, because otherwise we might well
746 -- end up relying on ourselves!
747 isUnpackableType dflags fam_envs ty
748 | Just (tc, _) <- splitTyConApp_maybe ty
749 , Just con <- tyConSingleAlgDataCon_maybe tc
750 , isVanillaDataCon con
751 = ok_con_args (unitNameSet (getName tc)) con
752 | otherwise
753 = False
754 where
755 ok_arg tcs (ty, bang) = not (attempt_unpack bang) || ok_ty tcs norm_ty
756 where
757 norm_ty = topNormaliseType fam_envs ty
758 ok_ty tcs ty
759 | Just (tc, _) <- splitTyConApp_maybe ty
760 , let tc_name = getName tc
761 = not (tc_name `elemNameSet` tcs)
762 && case tyConSingleAlgDataCon_maybe tc of
763 Just con | isVanillaDataCon con
764 -> ok_con_args (tcs `extendNameSet` getName tc) con
765 _ -> True
766 | otherwise
767 = True
768
769 ok_con_args tcs con
770 = all (ok_arg tcs) (dataConOrigArgTys con `zip` dataConSrcBangs con)
771 -- NB: dataConSrcBangs gives the *user* request;
772 -- We'd get a black hole if we used dataConImplBangs
773
774 attempt_unpack (HsSrcBang _ SrcUnpack NoSrcStrict)
775 = xopt LangExt.StrictData dflags
776 attempt_unpack (HsSrcBang _ SrcUnpack SrcStrict)
777 = True
778 attempt_unpack (HsSrcBang _ NoSrcUnpack SrcStrict)
779 = True -- Be conservative
780 attempt_unpack (HsSrcBang _ NoSrcUnpack NoSrcStrict)
781 = xopt LangExt.StrictData dflags -- Be conservative
782 attempt_unpack _ = False
783
784 {-
785 Note [Unpack one-wide fields]
786 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
787 The flag UnboxSmallStrictFields ensures that any field that can
788 (safely) be unboxed to a word-sized unboxed field, should be so unboxed.
789 For example:
790
791 data A = A Int#
792 newtype B = B A
793 data C = C !B
794 data D = D !C
795 data E = E !()
796 data F = F !D
797 data G = G !F !F
798
799 All of these should have an Int# as their representation, except
800 G which should have two Int#s.
801
802 However
803
804 data T = T !(S Int)
805 data S = S !a
806
807 Here we can represent T with an Int#.
808
809 Note [Recursive unboxing]
810 ~~~~~~~~~~~~~~~~~~~~~~~~~
811 Consider
812 data R = MkR {-# UNPACK #-} !S Int
813 data S = MkS {-# UNPACK #-} !Int
814 The representation arguments of MkR are the *representation* arguments
815 of S (plus Int); the rep args of MkS are Int#. This is all fine.
816
817 But be careful not to try to unbox this!
818 data T = MkT {-# UNPACK #-} !T Int
819 Because then we'd get an infinite number of arguments.
820
821 Here is a more complicated case:
822 data S = MkS {-# UNPACK #-} !T Int
823 data T = MkT {-# UNPACK #-} !S Int
824 Each of S and T must decide independently whether to unpack
825 and they had better not both say yes. So they must both say no.
826
827 Also behave conservatively when there is no UNPACK pragma
828 data T = MkS !T Int
829 with -funbox-strict-fields or -funbox-small-strict-fields
830 we need to behave as if there was an UNPACK pragma there.
831
832 But it's the *argument* type that matters. This is fine:
833 data S = MkS S !Int
834 because Int is non-recursive.
835
836 ************************************************************************
837 * *
838 Wrapping and unwrapping newtypes and type families
839 * *
840 ************************************************************************
841 -}
842
843 wrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
844 -- The wrapper for the data constructor for a newtype looks like this:
845 -- newtype T a = MkT (a,Int)
846 -- MkT :: forall a. (a,Int) -> T a
847 -- MkT = /\a. \(x:(a,Int)). x `cast` sym (CoT a)
848 -- where CoT is the coercion TyCon associated with the newtype
849 --
850 -- The call (wrapNewTypeBody T [a] e) returns the
851 -- body of the wrapper, namely
852 -- e `cast` (CoT [a])
853 --
854 -- If a coercion constructor is provided in the newtype, then we use
855 -- it, otherwise the wrap/unwrap are both no-ops
856 --
857 -- If the we are dealing with a newtype *instance*, we have a second coercion
858 -- identifying the family instance with the constructor of the newtype
859 -- instance. This coercion is applied in any case (ie, composed with the
860 -- coercion constructor of the newtype or applied by itself).
861
862 wrapNewTypeBody tycon args result_expr
863 = ASSERT( isNewTyCon tycon )
864 wrapFamInstBody tycon args $
865 mkCast result_expr (mkSymCo co)
866 where
867 co = mkUnbranchedAxInstCo Representational (newTyConCo tycon) args []
868
869 -- When unwrapping, we do *not* apply any family coercion, because this will
870 -- be done via a CoPat by the type checker. We have to do it this way as
871 -- computing the right type arguments for the coercion requires more than just
872 -- a spliting operation (cf, TcPat.tcConPat).
873
874 unwrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
875 unwrapNewTypeBody tycon args result_expr
876 = ASSERT( isNewTyCon tycon )
877 mkCast result_expr (mkUnbranchedAxInstCo Representational (newTyConCo tycon) args [])
878
879 -- If the type constructor is a representation type of a data instance, wrap
880 -- the expression into a cast adjusting the expression type, which is an
881 -- instance of the representation type, to the corresponding instance of the
882 -- family instance type.
883 -- See Note [Wrappers for data instance tycons]
884 wrapFamInstBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
885 wrapFamInstBody tycon args body
886 | Just co_con <- tyConFamilyCoercion_maybe tycon
887 = mkCast body (mkSymCo (mkUnbranchedAxInstCo Representational co_con args []))
888 | otherwise
889 = body
890
891 -- Same as `wrapFamInstBody`, but for type family instances, which are
892 -- represented by a `CoAxiom`, and not a `TyCon`
893 wrapTypeFamInstBody :: CoAxiom br -> Int -> [Type] -> [Coercion]
894 -> CoreExpr -> CoreExpr
895 wrapTypeFamInstBody axiom ind args cos body
896 = mkCast body (mkSymCo (mkAxInstCo Representational axiom ind args cos))
897
898 wrapTypeUnbranchedFamInstBody :: CoAxiom Unbranched -> [Type] -> [Coercion]
899 -> CoreExpr -> CoreExpr
900 wrapTypeUnbranchedFamInstBody axiom
901 = wrapTypeFamInstBody axiom 0
902
903 unwrapFamInstScrut :: TyCon -> [Type] -> CoreExpr -> CoreExpr
904 unwrapFamInstScrut tycon args scrut
905 | Just co_con <- tyConFamilyCoercion_maybe tycon
906 = mkCast scrut (mkUnbranchedAxInstCo Representational co_con args []) -- data instances only
907 | otherwise
908 = scrut
909
910 unwrapTypeFamInstScrut :: CoAxiom br -> Int -> [Type] -> [Coercion]
911 -> CoreExpr -> CoreExpr
912 unwrapTypeFamInstScrut axiom ind args cos scrut
913 = mkCast scrut (mkAxInstCo Representational axiom ind args cos)
914
915 unwrapTypeUnbranchedFamInstScrut :: CoAxiom Unbranched -> [Type] -> [Coercion]
916 -> CoreExpr -> CoreExpr
917 unwrapTypeUnbranchedFamInstScrut axiom
918 = unwrapTypeFamInstScrut axiom 0
919
920 {-
921 ************************************************************************
922 * *
923 \subsection{Primitive operations}
924 * *
925 ************************************************************************
926 -}
927
928 mkPrimOpId :: PrimOp -> Id
929 mkPrimOpId prim_op
930 = id
931 where
932 (tyvars,arg_tys,res_ty, arity, strict_sig) = primOpSig prim_op
933 ty = mkSpecForAllTys tyvars (mkFunTys arg_tys res_ty)
934 name = mkWiredInName gHC_PRIM (primOpOcc prim_op)
935 (mkPrimOpIdUnique (primOpTag prim_op))
936 (AnId id) UserSyntax
937 id = mkGlobalId (PrimOpId prim_op) name ty info
938
939 info = noCafIdInfo
940 `setRuleInfo` mkRuleInfo (maybeToList $ primOpRules name prim_op)
941 `setArityInfo` arity
942 `setStrictnessInfo` strict_sig
943 `setInlinePragInfo` neverInlinePragma
944 -- We give PrimOps a NOINLINE pragma so that we don't
945 -- get silly warnings from Desugar.dsRule (the inline_shadows_rule
946 -- test) about a RULE conflicting with a possible inlining
947 -- cf Trac #7287
948
949 -- For each ccall we manufacture a separate CCallOpId, giving it
950 -- a fresh unique, a type that is correct for this particular ccall,
951 -- and a CCall structure that gives the correct details about calling
952 -- convention etc.
953 --
954 -- The *name* of this Id is a local name whose OccName gives the full
955 -- details of the ccall, type and all. This means that the interface
956 -- file reader can reconstruct a suitable Id
957
958 mkFCallId :: DynFlags -> Unique -> ForeignCall -> Type -> Id
959 mkFCallId dflags uniq fcall ty
960 = ASSERT( isEmptyVarSet (tyCoVarsOfType ty) )
961 -- A CCallOpId should have no free type variables;
962 -- when doing substitutions won't substitute over it
963 mkGlobalId (FCallId fcall) name ty info
964 where
965 occ_str = showSDoc dflags (braces (ppr fcall <+> ppr ty))
966 -- The "occurrence name" of a ccall is the full info about the
967 -- ccall; it is encoded, but may have embedded spaces etc!
968
969 name = mkFCallName uniq occ_str
970
971 info = noCafIdInfo
972 `setArityInfo` arity
973 `setStrictnessInfo` strict_sig
974
975 (bndrs, _) = tcSplitPiTys ty
976 arity = count isIdLikeBinder bndrs
977
978 strict_sig = mkClosedStrictSig (replicate arity topDmd) topRes
979 -- the call does not claim to be strict in its arguments, since they
980 -- may be lifted (foreign import prim) and the called code doesn't
981 -- necessarily force them. See Trac #11076.
982 {-
983 ************************************************************************
984 * *
985 \subsection{DictFuns and default methods}
986 * *
987 ************************************************************************
988
989 Note [Dict funs and default methods]
990 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
991 Dict funs and default methods are *not* ImplicitIds. Their definition
992 involves user-written code, so we can't figure out their strictness etc
993 based on fixed info, as we can for constructors and record selectors (say).
994
995 NB: See also Note [Exported LocalIds] in Id
996 -}
997
998 mkDictFunId :: Name -- Name to use for the dict fun;
999 -> [TyVar]
1000 -> ThetaType
1001 -> Class
1002 -> [Type]
1003 -> Id
1004 -- Implements the DFun Superclass Invariant (see TcInstDcls)
1005 -- See Note [Dict funs and default methods]
1006
1007 mkDictFunId dfun_name tvs theta clas tys
1008 = mkExportedLocalId (DFunId is_nt)
1009 dfun_name
1010 dfun_ty
1011 where
1012 is_nt = isNewTyCon (classTyCon clas)
1013 dfun_ty = mkDictFunTy tvs theta clas tys
1014
1015 mkDictFunTy :: [TyVar] -> ThetaType -> Class -> [Type] -> Type
1016 mkDictFunTy tvs theta clas tys
1017 = mkSpecSigmaTy tvs theta (mkClassPred clas tys)
1018
1019 {-
1020 ************************************************************************
1021 * *
1022 \subsection{Un-definable}
1023 * *
1024 ************************************************************************
1025
1026 These Ids can't be defined in Haskell. They could be defined in
1027 unfoldings in the wired-in GHC.Prim interface file, but we'd have to
1028 ensure that they were definitely, definitely inlined, because there is
1029 no curried identifier for them. That's what mkCompulsoryUnfolding
1030 does. If we had a way to get a compulsory unfolding from an interface
1031 file, we could do that, but we don't right now.
1032
1033 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
1034 just gets expanded into a type coercion wherever it occurs. Hence we
1035 add it as a built-in Id with an unfolding here.
1036
1037 The type variables we use here are "open" type variables: this means
1038 they can unify with both unlifted and lifted types. Hence we provide
1039 another gun with which to shoot yourself in the foot.
1040 -}
1041
1042 lazyIdName, unsafeCoerceName, nullAddrName, seqName,
1043 realWorldName, voidPrimIdName, coercionTokenName,
1044 magicDictName, coerceName, proxyName, dollarName, oneShotName,
1045 runRWName :: Name
1046 unsafeCoerceName = mkWiredInIdName gHC_PRIM (fsLit "unsafeCoerce#") unsafeCoerceIdKey unsafeCoerceId
1047 nullAddrName = mkWiredInIdName gHC_PRIM (fsLit "nullAddr#") nullAddrIdKey nullAddrId
1048 seqName = mkWiredInIdName gHC_PRIM (fsLit "seq") seqIdKey seqId
1049 realWorldName = mkWiredInIdName gHC_PRIM (fsLit "realWorld#") realWorldPrimIdKey realWorldPrimId
1050 voidPrimIdName = mkWiredInIdName gHC_PRIM (fsLit "void#") voidPrimIdKey voidPrimId
1051 lazyIdName = mkWiredInIdName gHC_MAGIC (fsLit "lazy") lazyIdKey lazyId
1052 coercionTokenName = mkWiredInIdName gHC_PRIM (fsLit "coercionToken#") coercionTokenIdKey coercionTokenId
1053 magicDictName = mkWiredInIdName gHC_PRIM (fsLit "magicDict") magicDictKey magicDictId
1054 coerceName = mkWiredInIdName gHC_PRIM (fsLit "coerce") coerceKey coerceId
1055 proxyName = mkWiredInIdName gHC_PRIM (fsLit "proxy#") proxyHashKey proxyHashId
1056 dollarName = mkWiredInIdName gHC_BASE (fsLit "$") dollarIdKey dollarId
1057 oneShotName = mkWiredInIdName gHC_MAGIC (fsLit "oneShot") oneShotKey oneShotId
1058 runRWName = mkWiredInIdName gHC_MAGIC (fsLit "runRW#") runRWKey runRWId
1059
1060 dollarId :: Id -- Note [dollarId magic]
1061 dollarId = pcMiscPrelId dollarName ty
1062 (noCafIdInfo `setUnfoldingInfo` unf)
1063 where
1064 fun_ty = mkFunTy alphaTy openBetaTy
1065 ty = mkSpecForAllTys [levity2TyVar, alphaTyVar, openBetaTyVar] $
1066 mkFunTy fun_ty fun_ty
1067 unf = mkInlineUnfolding (Just 2) rhs
1068 [f,x] = mkTemplateLocals [fun_ty, alphaTy]
1069 rhs = mkLams [levity2TyVar, alphaTyVar, openBetaTyVar, f, x] $
1070 App (Var f) (Var x)
1071
1072 ------------------------------------------------
1073 -- proxy# :: forall a. Proxy# a
1074 proxyHashId :: Id
1075 proxyHashId
1076 = pcMiscPrelId proxyName ty
1077 (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings]
1078 where
1079 ty = mkSpecForAllTys [kv, tv] (mkProxyPrimTy k t)
1080 kv = kKiVar
1081 k = mkTyVarTy kv
1082 [tv] = mkTemplateTyVars [k]
1083 t = mkTyVarTy tv
1084
1085 ------------------------------------------------
1086 -- unsafeCoerce# :: forall a b. a -> b
1087 unsafeCoerceId :: Id
1088 unsafeCoerceId
1089 = pcMiscPrelId unsafeCoerceName ty info
1090 where
1091 info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1092 `setUnfoldingInfo` mkCompulsoryUnfolding rhs
1093
1094 ty = mkSpecForAllTys [ levity1TyVar, levity2TyVar
1095 , openAlphaTyVar, openBetaTyVar ]
1096 (mkFunTy openAlphaTy openBetaTy)
1097
1098 [x] = mkTemplateLocals [openAlphaTy]
1099 rhs = mkLams [ levity1TyVar, levity2TyVar
1100 , openAlphaTyVar, openBetaTyVar
1101 , x] $
1102 Cast (Var x) (mkUnsafeCo Representational openAlphaTy openBetaTy)
1103
1104 ------------------------------------------------
1105 nullAddrId :: Id
1106 -- nullAddr# :: Addr#
1107 -- The reason is is here is because we don't provide
1108 -- a way to write this literal in Haskell.
1109 nullAddrId = pcMiscPrelId nullAddrName addrPrimTy info
1110 where
1111 info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1112 `setUnfoldingInfo` mkCompulsoryUnfolding (Lit nullAddrLit)
1113
1114 ------------------------------------------------
1115 seqId :: Id -- See Note [seqId magic]
1116 seqId = pcMiscPrelId seqName ty info
1117 where
1118 info = noCafIdInfo `setInlinePragInfo` inline_prag
1119 `setUnfoldingInfo` mkCompulsoryUnfolding rhs
1120 `setRuleInfo` mkRuleInfo [seq_cast_rule]
1121
1122 inline_prag
1123 = alwaysInlinePragma `setInlinePragmaActivation` ActiveAfter "0" 0
1124 -- Make 'seq' not inline-always, so that simpleOptExpr
1125 -- (see CoreSubst.simple_app) won't inline 'seq' on the
1126 -- LHS of rules. That way we can have rules for 'seq';
1127 -- see Note [seqId magic]
1128
1129 ty = mkSpecForAllTys [alphaTyVar,betaTyVar]
1130 (mkFunTy alphaTy (mkFunTy betaTy betaTy))
1131
1132 [x,y] = mkTemplateLocals [alphaTy, betaTy]
1133 rhs = mkLams [alphaTyVar,betaTyVar,x,y] (Case (Var x) x betaTy [(DEFAULT, [], Var y)])
1134
1135 -- See Note [Built-in RULES for seq]
1136 -- NB: ru_nargs = 3, not 4, to match the code in
1137 -- Simplify.rebuildCase which tries to apply this rule
1138 seq_cast_rule = BuiltinRule { ru_name = fsLit "seq of cast"
1139 , ru_fn = seqName
1140 , ru_nargs = 3
1141 , ru_try = match_seq_of_cast }
1142
1143 match_seq_of_cast :: RuleFun
1144 -- See Note [Built-in RULES for seq]
1145 match_seq_of_cast _ _ _ [Type _, Type res_ty, Cast scrut co]
1146 = Just (fun `App` scrut)
1147 where
1148 fun = Lam x $ Lam y $
1149 Case (Var x) x res_ty [(DEFAULT,[],Var y)]
1150 -- Generate a Case directly, not a call to seq, which
1151 -- might be ill-kinded if res_ty is unboxed
1152 [x,y] = mkTemplateLocals [scrut_ty, res_ty]
1153 scrut_ty = pFst (coercionKind co)
1154
1155 match_seq_of_cast _ _ _ _ = Nothing
1156
1157 ------------------------------------------------
1158 lazyId :: Id -- See Note [lazyId magic]
1159 lazyId = pcMiscPrelId lazyIdName ty info
1160 where
1161 info = noCafIdInfo
1162 ty = mkSpecForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
1163
1164 oneShotId :: Id -- See Note [The oneShot function]
1165 oneShotId = pcMiscPrelId oneShotName ty info
1166 where
1167 info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1168 `setUnfoldingInfo` mkCompulsoryUnfolding rhs
1169 ty = mkSpecForAllTys [ levity1TyVar, levity2TyVar
1170 , openAlphaTyVar, openBetaTyVar ]
1171 (mkFunTy fun_ty fun_ty)
1172 fun_ty = mkFunTy alphaTy betaTy
1173 [body, x] = mkTemplateLocals [fun_ty, openAlphaTy]
1174 x' = setOneShotLambda x
1175 rhs = mkLams [ levity1TyVar, levity2TyVar
1176 , openAlphaTyVar, openBetaTyVar
1177 , body, x'] $
1178 Var body `App` Var x
1179
1180 runRWId :: Id -- See Note [runRW magic] in this module
1181 runRWId = pcMiscPrelId runRWName ty info
1182 where
1183 info = noCafIdInfo `setInlinePragInfo` neverInlinePragma
1184 `setStrictnessInfo` strict_sig
1185 `setArityInfo` 1
1186 strict_sig = mkClosedStrictSig [strictApply1Dmd] topRes
1187 -- Important to express its strictness,
1188 -- since it is not inlined until CorePrep
1189 -- Also see Note [runRW arg] in CorePrep
1190
1191 -- State# RealWorld
1192 stateRW = mkTyConApp statePrimTyCon [realWorldTy]
1193 -- (# State# RealWorld, o #)
1194 ret_ty = mkTupleTy Unboxed [stateRW, openAlphaTy]
1195 -- State# RealWorld -> (# State# RealWorld, o #)
1196 arg_ty = stateRW `mkFunTy` ret_ty
1197 -- (State# RealWorld -> (# State# RealWorld, o #))
1198 -- -> (# State# RealWorld, o #)
1199 ty = mkSpecForAllTys [levity1TyVar, openAlphaTyVar] $
1200 arg_ty `mkFunTy` ret_ty
1201
1202 --------------------------------------------------------------------------------
1203 magicDictId :: Id -- See Note [magicDictId magic]
1204 magicDictId = pcMiscPrelId magicDictName ty info
1205 where
1206 info = noCafIdInfo `setInlinePragInfo` neverInlinePragma
1207 ty = mkSpecForAllTys [alphaTyVar] alphaTy
1208
1209 --------------------------------------------------------------------------------
1210
1211 coerceId :: Id
1212 coerceId = pcMiscPrelId coerceName ty info
1213 where
1214 info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1215 `setUnfoldingInfo` mkCompulsoryUnfolding rhs
1216 eqRTy = mkTyConApp coercibleTyCon [ liftedTypeKind
1217 , alphaTy, betaTy ]
1218 eqRPrimTy = mkTyConApp eqReprPrimTyCon [ liftedTypeKind
1219 , liftedTypeKind
1220 , alphaTy, betaTy ]
1221 ty = mkSpecForAllTys [alphaTyVar, betaTyVar] $
1222 mkFunTys [eqRTy, alphaTy] betaTy
1223
1224 [eqR,x,eq] = mkTemplateLocals [eqRTy, alphaTy, eqRPrimTy]
1225 rhs = mkLams [alphaTyVar, betaTyVar, eqR, x] $
1226 mkWildCase (Var eqR) eqRTy betaTy $
1227 [(DataAlt coercibleDataCon, [eq], Cast (Var x) (mkCoVarCo eq))]
1228
1229 {-
1230 Note [dollarId magic]
1231 ~~~~~~~~~~~~~~~~~~~~~
1232 The only reason that ($) is wired in is so that its type can be
1233 forall (a:*, b:Open). (a->b) -> a -> b
1234 That is, the return type can be unboxed. E.g. this is OK
1235 foo $ True where foo :: Bool -> Int#
1236 because ($) doesn't inspect or move the result of the call to foo.
1237 See Trac #8739.
1238
1239 There is a special typing rule for ($) in TcExpr, so the type of ($)
1240 isn't looked at there, BUT Lint subsequently (and rightly) complains
1241 if sees ($) applied to Int# (say), unless we give it a wired-in type
1242 as we do here.
1243
1244 Note [Unsafe coerce magic]
1245 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1246 We define a *primitive*
1247 GHC.Prim.unsafeCoerce#
1248 and then in the base library we define the ordinary function
1249 Unsafe.Coerce.unsafeCoerce :: forall (a:*) (b:*). a -> b
1250 unsafeCoerce x = unsafeCoerce# x
1251
1252 Notice that unsafeCoerce has a civilized (albeit still dangerous)
1253 polymorphic type, whose type args have kind *. So you can't use it on
1254 unboxed values (unsafeCoerce 3#).
1255
1256 In contrast unsafeCoerce# is even more dangerous because you *can* use
1257 it on unboxed things, (unsafeCoerce# 3#) :: Int. Its type is
1258 forall (a:OpenKind) (b:OpenKind). a -> b
1259
1260 Note [seqId magic]
1261 ~~~~~~~~~~~~~~~~~~
1262 'GHC.Prim.seq' is special in several ways.
1263
1264 a) In source Haskell its second arg can have an unboxed type
1265 x `seq` (v +# w)
1266 But see Note [Typing rule for seq] in TcExpr, which
1267 explains why we give seq itself an ordinary type
1268 seq :: forall a b. a -> b -> b
1269 and treat it as a language construct from a typing point of view.
1270
1271 b) Its fixity is set in LoadIface.ghcPrimIface
1272
1273 c) It has quite a bit of desugaring magic.
1274 See DsUtils.hs Note [Desugaring seq (1)] and (2) and (3)
1275
1276 d) There is some special rule handing: Note [User-defined RULES for seq]
1277
1278 Note [User-defined RULES for seq]
1279 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1280 Roman found situations where he had
1281 case (f n) of _ -> e
1282 where he knew that f (which was strict in n) would terminate if n did.
1283 Notice that the result of (f n) is discarded. So it makes sense to
1284 transform to
1285 case n of _ -> e
1286
1287 Rather than attempt some general analysis to support this, I've added
1288 enough support that you can do this using a rewrite rule:
1289
1290 RULE "f/seq" forall n. seq (f n) = seq n
1291
1292 You write that rule. When GHC sees a case expression that discards
1293 its result, it mentally transforms it to a call to 'seq' and looks for
1294 a RULE. (This is done in Simplify.rebuildCase.) As usual, the
1295 correctness of the rule is up to you.
1296
1297 VERY IMPORTANT: to make this work, we give the RULE an arity of 1, not 2.
1298 If we wrote
1299 RULE "f/seq" forall n e. seq (f n) e = seq n e
1300 with rule arity 2, then two bad things would happen:
1301
1302 - The magical desugaring done in Note [seqId magic] item (c)
1303 for saturated application of 'seq' would turn the LHS into
1304 a case expression!
1305
1306 - The code in Simplify.rebuildCase would need to actually supply
1307 the value argument, which turns out to be awkward.
1308
1309 Note [Built-in RULES for seq]
1310 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1311 We also have the following built-in rule for seq
1312
1313 seq (x `cast` co) y = seq x y
1314
1315 This eliminates unnecessary casts and also allows other seq rules to
1316 match more often. Notably,
1317
1318 seq (f x `cast` co) y --> seq (f x) y
1319
1320 and now a user-defined rule for seq (see Note [User-defined RULES for seq])
1321 may fire.
1322
1323
1324 Note [lazyId magic]
1325 ~~~~~~~~~~~~~~~~~~~
1326 lazy :: forall a?. a? -> a? (i.e. works for unboxed types too)
1327
1328 Used to lazify pseq: pseq a b = a `seq` lazy b
1329
1330 Also, no strictness: by being a built-in Id, all the info about lazyId comes from here,
1331 not from GHC.Base.hi. This is important, because the strictness
1332 analyser will spot it as strict!
1333
1334 Also no unfolding in lazyId: it gets "inlined" by a HACK in CorePrep.
1335 It's very important to do this inlining *after* unfoldings are exposed
1336 in the interface file. Otherwise, the unfolding for (say) pseq in the
1337 interface file will not mention 'lazy', so if we inline 'pseq' we'll totally
1338 miss the very thing that 'lazy' was there for in the first place.
1339 See Trac #3259 for a real world example.
1340
1341 lazyId is defined in GHC.Base, so we don't *have* to inline it. If it
1342 appears un-applied, we'll end up just calling it.
1343
1344 Note [runRW magic]
1345 ~~~~~~~~~~~~~~~~~~
1346 Some definitions, for instance @runST@, must have careful control over float out
1347 of the bindings in their body. Consider this use of @runST@,
1348
1349 f x = runST ( \ s -> let (a, s') = newArray# 100 [] s
1350 (_, s'') = fill_in_array_or_something a x s'
1351 in freezeArray# a s'' )
1352
1353 If we inline @runST@, we'll get:
1354
1355 f x = let (a, s') = newArray# 100 [] realWorld#{-NB-}
1356 (_, s'') = fill_in_array_or_something a x s'
1357 in freezeArray# a s''
1358
1359 And now if we allow the @newArray#@ binding to float out to become a CAF,
1360 we end up with a result that is totally and utterly wrong:
1361
1362 f = let (a, s') = newArray# 100 [] realWorld#{-NB-} -- YIKES!!!
1363 in \ x ->
1364 let (_, s'') = fill_in_array_or_something a x s'
1365 in freezeArray# a s''
1366
1367 All calls to @f@ will share a {\em single} array! Clearly this is nonsense and
1368 must be prevented.
1369
1370 This is what @runRW#@ gives us: by being inlined extremely late in the
1371 optimization (right before lowering to STG, in CorePrep), we can ensure that
1372 no further floating will occur. This allows us to safely inline things like
1373 @runST@, which are otherwise needlessly expensive (see #10678 and #5916).
1374
1375 While the definition of @GHC.Magic.runRW#@, we override its type in @MkId@
1376 to be open-kinded,
1377
1378 runRW# :: forall (lev :: Levity). (o :: TYPE lev)
1379 => (State# RealWorld -> (# State# RealWorld, o #))
1380 -> (# State# RealWorld, o #)
1381
1382
1383 Note [The oneShot function]
1384 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1385 In the context of making left-folds fuse somewhat okish (see ticket #7994
1386 and Note [Left folds via right fold]) it was determined that it would be useful
1387 if library authors could explicitly tell the compiler that a certain lambda is
1388 called at most once. The oneShot function allows that.
1389
1390 'oneShot' is open kinded, i.e. the type variables can refer to unlifted
1391 types as well (Trac #10744); e.g.
1392 oneShot (\x:Int# -> x +# 1#)
1393
1394 Like most magic functions it has a compulsary unfolding, so there is no need
1395 for a real definition somewhere. We have one in GHC.Magic for the convenience
1396 of putting the documentation there.
1397
1398 It uses `setOneShotLambda` on the lambda's binder. That is the whole magic:
1399
1400 A typical call looks like
1401 oneShot (\y. e)
1402 after unfolding the definition `oneShot = \f \x[oneshot]. f x` we get
1403 (\f \x[oneshot]. f x) (\y. e)
1404 --> \x[oneshot]. ((\y.e) x)
1405 --> \x[oneshot] e[x/y]
1406 which is what we want.
1407
1408 It is only effective if the one-shot info survives as long as possible; in
1409 particular it must make it into the interface in unfoldings. See Note [Preserve
1410 OneShotInfo] in CoreTidy.
1411
1412 Also see https://ghc.haskell.org/trac/ghc/wiki/OneShot.
1413
1414
1415 Note [magicDictId magic]
1416 ~~~~~~~~~~~~~~~~~~~~~~~~~
1417 The identifier `magicDict` is just a place-holder, which is used to
1418 implement a primitve that we cannot define in Haskell but we can write
1419 in Core. It is declared with a place-holder type:
1420
1421 magicDict :: forall a. a
1422
1423 The intention is that the identifier will be used in a very specific way,
1424 to create dictionaries for classes with a single method. Consider a class
1425 like this:
1426
1427 class C a where
1428 f :: T a
1429
1430 We are going to use `magicDict`, in conjunction with a built-in Prelude
1431 rule, to cast values of type `T a` into dictionaries for `C a`. To do
1432 this, we define a function like this in the library:
1433
1434 data WrapC a b = WrapC (C a => Proxy a -> b)
1435
1436 withT :: (C a => Proxy a -> b)
1437 -> T a -> Proxy a -> b
1438 withT f x y = magicDict (WrapC f) x y
1439
1440 The purpose of `WrapC` is to avoid having `f` instantiated.
1441 Also, it avoids impredicativity, because `magicDict`'s type
1442 cannot be instantiated with a forall. The field of `WrapC` contains
1443 a `Proxy` parameter which is used to link the type of the constraint,
1444 `C a`, with the type of the `Wrap` value being made.
1445
1446 Next, we add a built-in Prelude rule (see prelude/PrelRules.hs),
1447 which will replace the RHS of this definition with the appropriate
1448 definition in Core. The rewrite rule works as follows:
1449
1450 magicDict @t (wrap @a @b f) x y
1451 ---->
1452 f (x `cast` co a) y
1453
1454 The `co` coercion is the newtype-coercion extracted from the type-class.
1455 The type class is obtain by looking at the type of wrap.
1456
1457
1458 -------------------------------------------------------------
1459 @realWorld#@ used to be a magic literal, \tr{void#}. If things get
1460 nasty as-is, change it back to a literal (@Literal@).
1461
1462 voidArgId is a Local Id used simply as an argument in functions
1463 where we just want an arg to avoid having a thunk of unlifted type.
1464 E.g.
1465 x = \ void :: Void# -> (# p, q #)
1466
1467 This comes up in strictness analysis
1468
1469 Note [evaldUnfoldings]
1470 ~~~~~~~~~~~~~~~~~~~~~~
1471 The evaldUnfolding makes it look that some primitive value is
1472 evaluated, which in turn makes Simplify.interestingArg return True,
1473 which in turn makes INLINE things applied to said value likely to be
1474 inlined.
1475 -}
1476
1477 realWorldPrimId :: Id -- :: State# RealWorld
1478 realWorldPrimId = pcMiscPrelId realWorldName realWorldStatePrimTy
1479 (noCafIdInfo `setUnfoldingInfo` evaldUnfolding -- Note [evaldUnfoldings]
1480 `setOneShotInfo` stateHackOneShot)
1481
1482 voidPrimId :: Id -- Global constant :: Void#
1483 voidPrimId = pcMiscPrelId voidPrimIdName voidPrimTy
1484 (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings]
1485
1486 voidArgId :: Id -- Local lambda-bound :: Void#
1487 voidArgId = mkSysLocal (fsLit "void") voidArgIdKey voidPrimTy
1488
1489 coercionTokenId :: Id -- :: () ~ ()
1490 coercionTokenId -- Used to replace Coercion terms when we go to STG
1491 = pcMiscPrelId coercionTokenName
1492 (mkTyConApp eqPrimTyCon [liftedTypeKind, liftedTypeKind, unitTy, unitTy])
1493 noCafIdInfo
1494
1495 pcMiscPrelId :: Name -> Type -> IdInfo -> Id
1496 pcMiscPrelId name ty info
1497 = mkVanillaGlobalWithInfo name ty info
1498 -- We lie and say the thing is imported; otherwise, we get into
1499 -- a mess with dependency analysis; e.g., core2stg may heave in
1500 -- random calls to GHCbase.unpackPS__. If GHCbase is the module
1501 -- being compiled, then it's just a matter of luck if the definition
1502 -- will be in "the right place" to be in scope.