4137c1c8500e3405fa879881a65b02209702748e
[ghc.git] / compiler / coreSyn / CoreUtils.hs
1 {-
2 (c) The University of Glasgow 2006
3 (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4
5
6 Utility functions on @Core@ syntax
7 -}
8
9 {-# LANGUAGE CPP #-}
10
11 -- | Commonly useful utilites for manipulating the Core language
12 module CoreUtils (
13 -- * Constructing expressions
14 mkCast,
15 mkTick, mkTicks, mkTickNoHNF, tickHNFArgs,
16 bindNonRec, needsCaseBinding,
17 mkAltExpr,
18
19 -- * Taking expressions apart
20 findDefault, addDefault, findAlt, isDefaultAlt,
21 mergeAlts, trimConArgs,
22 filterAlts, combineIdenticalAlts, refineDefaultAlt,
23
24 -- * Properties of expressions
25 exprType, coreAltType, coreAltsType, isExprLevPoly,
26 exprIsDupable, exprIsTrivial, getIdFromTrivialExpr, exprIsBottom,
27 getIdFromTrivialExpr_maybe,
28 exprIsCheap, exprIsExpandable, exprIsCheapX, CheapAppFun,
29 exprIsHNF, exprOkForSpeculation, exprOkForSideEffects, exprIsWorkFree,
30 exprIsBig, exprIsConLike,
31 rhsIsStatic, isCheapApp, isExpandableApp,
32 exprIsTickedString, exprIsTickedString_maybe,
33 exprIsTopLevelBindable,
34 altsAreExhaustive,
35
36 -- * Equality
37 cheapEqExpr, cheapEqExpr', eqExpr,
38 diffExpr, diffBinds,
39
40 -- * Eta reduction
41 tryEtaReduce,
42
43 -- * Manipulating data constructors and types
44 exprToType, exprToCoercion_maybe,
45 applyTypeToArgs, applyTypeToArg,
46 dataConRepInstPat, dataConRepFSInstPat,
47 isEmptyTy,
48
49 -- * Working with ticks
50 stripTicksTop, stripTicksTopE, stripTicksTopT,
51 stripTicksE, stripTicksT,
52
53 -- * StaticPtr
54 collectMakeStaticArgs,
55
56 -- * Join points
57 isJoinBind
58 ) where
59
60 #include "HsVersions.h"
61
62 import GhcPrelude
63
64 import CoreSyn
65 import PrelNames ( makeStaticName )
66 import PprCore
67 import CoreFVs( exprFreeVars )
68 import Var
69 import SrcLoc
70 import VarEnv
71 import VarSet
72 import Name
73 import Literal
74 import DataCon
75 import PrimOp
76 import Id
77 import IdInfo
78 import PrelNames( absentErrorIdKey )
79 import Type
80 import TyCoRep( TyBinder(..) )
81 import Coercion
82 import TyCon
83 import Unique
84 import Outputable
85 import TysPrim
86 import DynFlags
87 import FastString
88 import Maybes
89 import ListSetOps ( minusList )
90 import BasicTypes ( Arity, isConLike )
91 import Platform
92 import Util
93 import Pair
94 import Data.ByteString ( ByteString )
95 import Data.Function ( on )
96 import Data.List
97 import Data.Ord ( comparing )
98 import OrdList
99 import qualified Data.Set as Set
100 import UniqSet
101
102 {-
103 ************************************************************************
104 * *
105 \subsection{Find the type of a Core atom/expression}
106 * *
107 ************************************************************************
108 -}
109
110 exprType :: CoreExpr -> Type
111 -- ^ Recover the type of a well-typed Core expression. Fails when
112 -- applied to the actual 'CoreSyn.Type' expression as it cannot
113 -- really be said to have a type
114 exprType (Var var) = idType var
115 exprType (Lit lit) = literalType lit
116 exprType (Coercion co) = coercionType co
117 exprType (Let bind body)
118 | NonRec tv rhs <- bind -- See Note [Type bindings]
119 , Type ty <- rhs = substTyWithUnchecked [tv] [ty] (exprType body)
120 | otherwise = exprType body
121 exprType (Case _ _ ty _) = ty
122 exprType (Cast _ co) = pSnd (coercionKind co)
123 exprType (Tick _ e) = exprType e
124 exprType (Lam binder expr) = mkLamType binder (exprType expr)
125 exprType e@(App _ _)
126 = case collectArgs e of
127 (fun, args) -> applyTypeToArgs e (exprType fun) args
128
129 exprType other = pprTrace "exprType" (pprCoreExpr other) alphaTy
130
131 coreAltType :: CoreAlt -> Type
132 -- ^ Returns the type of the alternatives right hand side
133 coreAltType (_,bs,rhs)
134 | any bad_binder bs = expandTypeSynonyms ty
135 | otherwise = ty -- Note [Existential variables and silly type synonyms]
136 where
137 ty = exprType rhs
138 free_tvs = tyCoVarsOfType ty
139 bad_binder b = b `elemVarSet` free_tvs
140
141 coreAltsType :: [CoreAlt] -> Type
142 -- ^ Returns the type of the first alternative, which should be the same as for all alternatives
143 coreAltsType (alt:_) = coreAltType alt
144 coreAltsType [] = panic "corAltsType"
145
146 -- | Is this expression levity polymorphic? This should be the
147 -- same as saying (isKindLevPoly . typeKind . exprType) but
148 -- much faster.
149 isExprLevPoly :: CoreExpr -> Bool
150 isExprLevPoly = go
151 where
152 go (Var _) = False -- no levity-polymorphic binders
153 go (Lit _) = False -- no levity-polymorphic literals
154 go e@(App f _) | not (go_app f) = False
155 | otherwise = check_type e
156 go (Lam _ _) = False
157 go (Let _ e) = go e
158 go e@(Case {}) = check_type e -- checking type is fast
159 go e@(Cast {}) = check_type e
160 go (Tick _ e) = go e
161 go e@(Type {}) = pprPanic "isExprLevPoly ty" (ppr e)
162 go (Coercion {}) = False -- this case can happen in SetLevels
163
164 check_type = isTypeLevPoly . exprType -- slow approach
165
166 -- if the function is a variable (common case), check its
167 -- levityInfo. This might mean we don't need to look up and compute
168 -- on the type. Spec of these functions: return False if there is
169 -- no possibility, ever, of this expression becoming levity polymorphic,
170 -- no matter what it's applied to; return True otherwise.
171 -- returning True is always safe. See also Note [Levity info] in
172 -- IdInfo
173 go_app (Var id) = not (isNeverLevPolyId id)
174 go_app (Lit _) = False
175 go_app (App f _) = go_app f
176 go_app (Lam _ e) = go_app e
177 go_app (Let _ e) = go_app e
178 go_app (Case _ _ ty _) = resultIsLevPoly ty
179 go_app (Cast _ co) = resultIsLevPoly (pSnd $ coercionKind co)
180 go_app (Tick _ e) = go_app e
181 go_app e@(Type {}) = pprPanic "isExprLevPoly app ty" (ppr e)
182 go_app e@(Coercion {}) = pprPanic "isExprLevPoly app co" (ppr e)
183
184
185 {-
186 Note [Type bindings]
187 ~~~~~~~~~~~~~~~~~~~~
188 Core does allow type bindings, although such bindings are
189 not much used, except in the output of the desugarer.
190 Example:
191 let a = Int in (\x:a. x)
192 Given this, exprType must be careful to substitute 'a' in the
193 result type (Trac #8522).
194
195 Note [Existential variables and silly type synonyms]
196 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
197 Consider
198 data T = forall a. T (Funny a)
199 type Funny a = Bool
200 f :: T -> Bool
201 f (T x) = x
202
203 Now, the type of 'x' is (Funny a), where 'a' is existentially quantified.
204 That means that 'exprType' and 'coreAltsType' may give a result that *appears*
205 to mention an out-of-scope type variable. See Trac #3409 for a more real-world
206 example.
207
208 Various possibilities suggest themselves:
209
210 - Ignore the problem, and make Lint not complain about such variables
211
212 - Expand all type synonyms (or at least all those that discard arguments)
213 This is tricky, because at least for top-level things we want to
214 retain the type the user originally specified.
215
216 - Expand synonyms on the fly, when the problem arises. That is what
217 we are doing here. It's not too expensive, I think.
218
219 Note that there might be existentially quantified coercion variables, too.
220 -}
221
222 -- Not defined with applyTypeToArg because you can't print from CoreSyn.
223 applyTypeToArgs :: CoreExpr -> Type -> [CoreExpr] -> Type
224 -- ^ A more efficient version of 'applyTypeToArg' when we have several arguments.
225 -- The first argument is just for debugging, and gives some context
226 applyTypeToArgs e op_ty args
227 = go op_ty args
228 where
229 go op_ty [] = op_ty
230 go op_ty (Type ty : args) = go_ty_args op_ty [ty] args
231 go op_ty (Coercion co : args) = go_ty_args op_ty [mkCoercionTy co] args
232 go op_ty (_ : args) | Just (_, res_ty) <- splitFunTy_maybe op_ty
233 = go res_ty args
234 go _ _ = pprPanic "applyTypeToArgs" panic_msg
235
236 -- go_ty_args: accumulate type arguments so we can
237 -- instantiate all at once with piResultTys
238 go_ty_args op_ty rev_tys (Type ty : args)
239 = go_ty_args op_ty (ty:rev_tys) args
240 go_ty_args op_ty rev_tys (Coercion co : args)
241 = go_ty_args op_ty (mkCoercionTy co : rev_tys) args
242 go_ty_args op_ty rev_tys args
243 = go (piResultTys op_ty (reverse rev_tys)) args
244
245 panic_msg = vcat [ text "Expression:" <+> pprCoreExpr e
246 , text "Type:" <+> ppr op_ty
247 , text "Args:" <+> ppr args ]
248
249
250 {-
251 ************************************************************************
252 * *
253 \subsection{Attaching notes}
254 * *
255 ************************************************************************
256 -}
257
258 -- | Wrap the given expression in the coercion safely, dropping
259 -- identity coercions and coalescing nested coercions
260 mkCast :: CoreExpr -> CoercionR -> CoreExpr
261 mkCast e co
262 | ASSERT2( coercionRole co == Representational
263 , text "coercion" <+> ppr co <+> ptext (sLit "passed to mkCast")
264 <+> ppr e <+> text "has wrong role" <+> ppr (coercionRole co) )
265 isReflCo co
266 = e
267
268 mkCast (Coercion e_co) co
269 | isCoercionType (pSnd (coercionKind co))
270 -- The guard here checks that g has a (~#) on both sides,
271 -- otherwise decomposeCo fails. Can in principle happen
272 -- with unsafeCoerce
273 = Coercion (mkCoCast e_co co)
274
275 mkCast (Cast expr co2) co
276 = WARN(let { Pair from_ty _to_ty = coercionKind co;
277 Pair _from_ty2 to_ty2 = coercionKind co2} in
278 not (from_ty `eqType` to_ty2),
279 vcat ([ text "expr:" <+> ppr expr
280 , text "co2:" <+> ppr co2
281 , text "co:" <+> ppr co ]) )
282 mkCast expr (mkTransCo co2 co)
283
284 mkCast (Tick t expr) co
285 = Tick t (mkCast expr co)
286
287 mkCast expr co
288 = let Pair from_ty _to_ty = coercionKind co in
289 WARN( not (from_ty `eqType` exprType expr),
290 text "Trying to coerce" <+> text "(" <> ppr expr
291 $$ text "::" <+> ppr (exprType expr) <> text ")"
292 $$ ppr co $$ ppr (coercionType co) )
293 (Cast expr co)
294
295 -- | Wraps the given expression in the source annotation, dropping the
296 -- annotation if possible.
297 mkTick :: Tickish Id -> CoreExpr -> CoreExpr
298 mkTick t orig_expr = mkTick' id id orig_expr
299 where
300 -- Some ticks (cost-centres) can be split in two, with the
301 -- non-counting part having laxer placement properties.
302 canSplit = tickishCanSplit t && tickishPlace (mkNoCount t) /= tickishPlace t
303
304 mkTick' :: (CoreExpr -> CoreExpr) -- ^ apply after adding tick (float through)
305 -> (CoreExpr -> CoreExpr) -- ^ apply before adding tick (float with)
306 -> CoreExpr -- ^ current expression
307 -> CoreExpr
308 mkTick' top rest expr = case expr of
309
310 -- Cost centre ticks should never be reordered relative to each
311 -- other. Therefore we can stop whenever two collide.
312 Tick t2 e
313 | ProfNote{} <- t2, ProfNote{} <- t -> top $ Tick t $ rest expr
314
315 -- Otherwise we assume that ticks of different placements float
316 -- through each other.
317 | tickishPlace t2 /= tickishPlace t -> mkTick' (top . Tick t2) rest e
318
319 -- For annotations this is where we make sure to not introduce
320 -- redundant ticks.
321 | tickishContains t t2 -> mkTick' top rest e
322 | tickishContains t2 t -> orig_expr
323 | otherwise -> mkTick' top (rest . Tick t2) e
324
325 -- Ticks don't care about types, so we just float all ticks
326 -- through them. Note that it's not enough to check for these
327 -- cases top-level. While mkTick will never produce Core with type
328 -- expressions below ticks, such constructs can be the result of
329 -- unfoldings. We therefore make an effort to put everything into
330 -- the right place no matter what we start with.
331 Cast e co -> mkTick' (top . flip Cast co) rest e
332 Coercion co -> Coercion co
333
334 Lam x e
335 -- Always float through type lambdas. Even for non-type lambdas,
336 -- floating is allowed for all but the most strict placement rule.
337 | not (isRuntimeVar x) || tickishPlace t /= PlaceRuntime
338 -> mkTick' (top . Lam x) rest e
339
340 -- If it is both counting and scoped, we split the tick into its
341 -- two components, often allowing us to keep the counting tick on
342 -- the outside of the lambda and push the scoped tick inside.
343 -- The point of this is that the counting tick can probably be
344 -- floated, and the lambda may then be in a position to be
345 -- beta-reduced.
346 | canSplit
347 -> top $ Tick (mkNoScope t) $ rest $ Lam x $ mkTick (mkNoCount t) e
348
349 App f arg
350 -- Always float through type applications.
351 | not (isRuntimeArg arg)
352 -> mkTick' (top . flip App arg) rest f
353
354 -- We can also float through constructor applications, placement
355 -- permitting. Again we can split.
356 | isSaturatedConApp expr && (tickishPlace t==PlaceCostCentre || canSplit)
357 -> if tickishPlace t == PlaceCostCentre
358 then top $ rest $ tickHNFArgs t expr
359 else top $ Tick (mkNoScope t) $ rest $ tickHNFArgs (mkNoCount t) expr
360
361 Var x
362 | notFunction && tickishPlace t == PlaceCostCentre
363 -> orig_expr
364 | notFunction && canSplit
365 -> top $ Tick (mkNoScope t) $ rest expr
366 where
367 -- SCCs can be eliminated on variables provided the variable
368 -- is not a function. In these cases the SCC makes no difference:
369 -- the cost of evaluating the variable will be attributed to its
370 -- definition site. When the variable refers to a function, however,
371 -- an SCC annotation on the variable affects the cost-centre stack
372 -- when the function is called, so we must retain those.
373 notFunction = not (isFunTy (idType x))
374
375 Lit{}
376 | tickishPlace t == PlaceCostCentre
377 -> orig_expr
378
379 -- Catch-all: Annotate where we stand
380 _any -> top $ Tick t $ rest expr
381
382 mkTicks :: [Tickish Id] -> CoreExpr -> CoreExpr
383 mkTicks ticks expr = foldr mkTick expr ticks
384
385 isSaturatedConApp :: CoreExpr -> Bool
386 isSaturatedConApp e = go e []
387 where go (App f a) as = go f (a:as)
388 go (Var fun) args
389 = isConLikeId fun && idArity fun == valArgCount args
390 go (Cast f _) as = go f as
391 go _ _ = False
392
393 mkTickNoHNF :: Tickish Id -> CoreExpr -> CoreExpr
394 mkTickNoHNF t e
395 | exprIsHNF e = tickHNFArgs t e
396 | otherwise = mkTick t e
397
398 -- push a tick into the arguments of a HNF (call or constructor app)
399 tickHNFArgs :: Tickish Id -> CoreExpr -> CoreExpr
400 tickHNFArgs t e = push t e
401 where
402 push t (App f (Type u)) = App (push t f) (Type u)
403 push t (App f arg) = App (push t f) (mkTick t arg)
404 push _t e = e
405
406 -- | Strip ticks satisfying a predicate from top of an expression
407 stripTicksTop :: (Tickish Id -> Bool) -> Expr b -> ([Tickish Id], Expr b)
408 stripTicksTop p = go []
409 where go ts (Tick t e) | p t = go (t:ts) e
410 go ts other = (reverse ts, other)
411
412 -- | Strip ticks satisfying a predicate from top of an expression,
413 -- returning the remaining expression
414 stripTicksTopE :: (Tickish Id -> Bool) -> Expr b -> Expr b
415 stripTicksTopE p = go
416 where go (Tick t e) | p t = go e
417 go other = other
418
419 -- | Strip ticks satisfying a predicate from top of an expression,
420 -- returning the ticks
421 stripTicksTopT :: (Tickish Id -> Bool) -> Expr b -> [Tickish Id]
422 stripTicksTopT p = go []
423 where go ts (Tick t e) | p t = go (t:ts) e
424 go ts _ = ts
425
426 -- | Completely strip ticks satisfying a predicate from an
427 -- expression. Note this is O(n) in the size of the expression!
428 stripTicksE :: (Tickish Id -> Bool) -> Expr b -> Expr b
429 stripTicksE p expr = go expr
430 where go (App e a) = App (go e) (go a)
431 go (Lam b e) = Lam b (go e)
432 go (Let b e) = Let (go_bs b) (go e)
433 go (Case e b t as) = Case (go e) b t (map go_a as)
434 go (Cast e c) = Cast (go e) c
435 go (Tick t e)
436 | p t = go e
437 | otherwise = Tick t (go e)
438 go other = other
439 go_bs (NonRec b e) = NonRec b (go e)
440 go_bs (Rec bs) = Rec (map go_b bs)
441 go_b (b, e) = (b, go e)
442 go_a (c,bs,e) = (c,bs, go e)
443
444 stripTicksT :: (Tickish Id -> Bool) -> Expr b -> [Tickish Id]
445 stripTicksT p expr = fromOL $ go expr
446 where go (App e a) = go e `appOL` go a
447 go (Lam _ e) = go e
448 go (Let b e) = go_bs b `appOL` go e
449 go (Case e _ _ as) = go e `appOL` concatOL (map go_a as)
450 go (Cast e _) = go e
451 go (Tick t e)
452 | p t = t `consOL` go e
453 | otherwise = go e
454 go _ = nilOL
455 go_bs (NonRec _ e) = go e
456 go_bs (Rec bs) = concatOL (map go_b bs)
457 go_b (_, e) = go e
458 go_a (_, _, e) = go e
459
460 {-
461 ************************************************************************
462 * *
463 \subsection{Other expression construction}
464 * *
465 ************************************************************************
466 -}
467
468 bindNonRec :: Id -> CoreExpr -> CoreExpr -> CoreExpr
469 -- ^ @bindNonRec x r b@ produces either:
470 --
471 -- > let x = r in b
472 --
473 -- or:
474 --
475 -- > case r of x { _DEFAULT_ -> b }
476 --
477 -- depending on whether we have to use a @case@ or @let@
478 -- binding for the expression (see 'needsCaseBinding').
479 -- It's used by the desugarer to avoid building bindings
480 -- that give Core Lint a heart attack, although actually
481 -- the simplifier deals with them perfectly well. See
482 -- also 'MkCore.mkCoreLet'
483 bindNonRec bndr rhs body
484 | needsCaseBinding (idType bndr) rhs = Case rhs bndr (exprType body) [(DEFAULT, [], body)]
485 | otherwise = Let (NonRec bndr rhs) body
486
487 -- | Tests whether we have to use a @case@ rather than @let@ binding for this expression
488 -- as per the invariants of 'CoreExpr': see "CoreSyn#let_app_invariant"
489 needsCaseBinding :: Type -> CoreExpr -> Bool
490 needsCaseBinding ty rhs = isUnliftedType ty && not (exprOkForSpeculation rhs)
491 -- Make a case expression instead of a let
492 -- These can arise either from the desugarer,
493 -- or from beta reductions: (\x.e) (x +# y)
494
495 mkAltExpr :: AltCon -- ^ Case alternative constructor
496 -> [CoreBndr] -- ^ Things bound by the pattern match
497 -> [Type] -- ^ The type arguments to the case alternative
498 -> CoreExpr
499 -- ^ This guy constructs the value that the scrutinee must have
500 -- given that you are in one particular branch of a case
501 mkAltExpr (DataAlt con) args inst_tys
502 = mkConApp con (map Type inst_tys ++ varsToCoreExprs args)
503 mkAltExpr (LitAlt lit) [] []
504 = Lit lit
505 mkAltExpr (LitAlt _) _ _ = panic "mkAltExpr LitAlt"
506 mkAltExpr DEFAULT _ _ = panic "mkAltExpr DEFAULT"
507
508 {-
509 ************************************************************************
510 * *
511 Operations oer case alternatives
512 * *
513 ************************************************************************
514
515 The default alternative must be first, if it exists at all.
516 This makes it easy to find, though it makes matching marginally harder.
517 -}
518
519 -- | Extract the default case alternative
520 findDefault :: [(AltCon, [a], b)] -> ([(AltCon, [a], b)], Maybe b)
521 findDefault ((DEFAULT,args,rhs) : alts) = ASSERT( null args ) (alts, Just rhs)
522 findDefault alts = (alts, Nothing)
523
524 addDefault :: [(AltCon, [a], b)] -> Maybe b -> [(AltCon, [a], b)]
525 addDefault alts Nothing = alts
526 addDefault alts (Just rhs) = (DEFAULT, [], rhs) : alts
527
528 isDefaultAlt :: (AltCon, a, b) -> Bool
529 isDefaultAlt (DEFAULT, _, _) = True
530 isDefaultAlt _ = False
531
532 -- | Find the case alternative corresponding to a particular
533 -- constructor: panics if no such constructor exists
534 findAlt :: AltCon -> [(AltCon, a, b)] -> Maybe (AltCon, a, b)
535 -- A "Nothing" result *is* legitmiate
536 -- See Note [Unreachable code]
537 findAlt con alts
538 = case alts of
539 (deflt@(DEFAULT,_,_):alts) -> go alts (Just deflt)
540 _ -> go alts Nothing
541 where
542 go [] deflt = deflt
543 go (alt@(con1,_,_) : alts) deflt
544 = case con `cmpAltCon` con1 of
545 LT -> deflt -- Missed it already; the alts are in increasing order
546 EQ -> Just alt
547 GT -> ASSERT( not (con1 == DEFAULT) ) go alts deflt
548
549 {- Note [Unreachable code]
550 ~~~~~~~~~~~~~~~~~~~~~~~~~~
551 It is possible (although unusual) for GHC to find a case expression
552 that cannot match. For example:
553
554 data Col = Red | Green | Blue
555 x = Red
556 f v = case x of
557 Red -> ...
558 _ -> ...(case x of { Green -> e1; Blue -> e2 })...
559
560 Suppose that for some silly reason, x isn't substituted in the case
561 expression. (Perhaps there's a NOINLINE on it, or profiling SCC stuff
562 gets in the way; cf Trac #3118.) Then the full-lazines pass might produce
563 this
564
565 x = Red
566 lvl = case x of { Green -> e1; Blue -> e2 })
567 f v = case x of
568 Red -> ...
569 _ -> ...lvl...
570
571 Now if x gets inlined, we won't be able to find a matching alternative
572 for 'Red'. That's because 'lvl' is unreachable. So rather than crashing
573 we generate (error "Inaccessible alternative").
574
575 Similar things can happen (augmented by GADTs) when the Simplifier
576 filters down the matching alternatives in Simplify.rebuildCase.
577 -}
578
579 ---------------------------------
580 mergeAlts :: [(AltCon, a, b)] -> [(AltCon, a, b)] -> [(AltCon, a, b)]
581 -- ^ Merge alternatives preserving order; alternatives in
582 -- the first argument shadow ones in the second
583 mergeAlts [] as2 = as2
584 mergeAlts as1 [] = as1
585 mergeAlts (a1:as1) (a2:as2)
586 = case a1 `cmpAlt` a2 of
587 LT -> a1 : mergeAlts as1 (a2:as2)
588 EQ -> a1 : mergeAlts as1 as2 -- Discard a2
589 GT -> a2 : mergeAlts (a1:as1) as2
590
591
592 ---------------------------------
593 trimConArgs :: AltCon -> [CoreArg] -> [CoreArg]
594 -- ^ Given:
595 --
596 -- > case (C a b x y) of
597 -- > C b x y -> ...
598 --
599 -- We want to drop the leading type argument of the scrutinee
600 -- leaving the arguments to match against the pattern
601
602 trimConArgs DEFAULT args = ASSERT( null args ) []
603 trimConArgs (LitAlt _) args = ASSERT( null args ) []
604 trimConArgs (DataAlt dc) args = dropList (dataConUnivTyVars dc) args
605
606 filterAlts :: TyCon -- ^ Type constructor of scrutinee's type (used to prune possibilities)
607 -> [Type] -- ^ And its type arguments
608 -> [AltCon] -- ^ 'imposs_cons': constructors known to be impossible due to the form of the scrutinee
609 -> [(AltCon, [Var], a)] -- ^ Alternatives
610 -> ([AltCon], [(AltCon, [Var], a)])
611 -- Returns:
612 -- 1. Constructors that will never be encountered by the
613 -- *default* case (if any). A superset of imposs_cons
614 -- 2. The new alternatives, trimmed by
615 -- a) remove imposs_cons
616 -- b) remove constructors which can't match because of GADTs
617 --
618 -- NB: the final list of alternatives may be empty:
619 -- This is a tricky corner case. If the data type has no constructors,
620 -- which GHC allows, or if the imposs_cons covers all constructors (after taking
621 -- account of GADTs), then no alternatives can match.
622 --
623 -- If callers need to preserve the invariant that there is always at least one branch
624 -- in a "case" statement then they will need to manually add a dummy case branch that just
625 -- calls "error" or similar.
626 filterAlts _tycon inst_tys imposs_cons alts
627 = (imposs_deflt_cons, addDefault trimmed_alts maybe_deflt)
628 where
629 (alts_wo_default, maybe_deflt) = findDefault alts
630 alt_cons = [con | (con,_,_) <- alts_wo_default]
631
632 trimmed_alts = filterOut (impossible_alt inst_tys) alts_wo_default
633
634 imposs_cons_set = Set.fromList imposs_cons
635 imposs_deflt_cons =
636 imposs_cons ++ filterOut (`Set.member` imposs_cons_set) alt_cons
637 -- "imposs_deflt_cons" are handled
638 -- EITHER by the context,
639 -- OR by a non-DEFAULT branch in this case expression.
640
641 impossible_alt :: [Type] -> (AltCon, a, b) -> Bool
642 impossible_alt _ (con, _, _) | con `Set.member` imposs_cons_set = True
643 impossible_alt inst_tys (DataAlt con, _, _) = dataConCannotMatch inst_tys con
644 impossible_alt _ _ = False
645
646 -- | Refine the default alternative to a 'DataAlt', if there is a unique way to do so.
647 refineDefaultAlt :: [Unique] -- ^ Uniques for constructing new binders
648 -> TyCon -- ^ Type constructor of scrutinee's type
649 -> [Type] -- ^ Type arguments of scrutinee's type
650 -> [AltCon] -- ^ Constructors that cannot match the DEFAULT (if any)
651 -> [CoreAlt]
652 -> (Bool, [CoreAlt]) -- ^ 'True', if a default alt was replaced with a 'DataAlt'
653 refineDefaultAlt us tycon tys imposs_deflt_cons all_alts
654 | (DEFAULT,_,rhs) : rest_alts <- all_alts
655 , isAlgTyCon tycon -- It's a data type, tuple, or unboxed tuples.
656 , not (isNewTyCon tycon) -- We can have a newtype, if we are just doing an eval:
657 -- case x of { DEFAULT -> e }
658 -- and we don't want to fill in a default for them!
659 , Just all_cons <- tyConDataCons_maybe tycon
660 , let imposs_data_cons = mkUniqSet [con | DataAlt con <- imposs_deflt_cons]
661 -- We now know it's a data type, so we can use
662 -- UniqSet rather than Set (more efficient)
663 impossible con = con `elementOfUniqSet` imposs_data_cons
664 || dataConCannotMatch tys con
665 = case filterOut impossible all_cons of
666 -- Eliminate the default alternative
667 -- altogether if it can't match:
668 [] -> (False, rest_alts)
669
670 -- It matches exactly one constructor, so fill it in:
671 [con] -> (True, mergeAlts rest_alts [(DataAlt con, ex_tvs ++ arg_ids, rhs)])
672 -- We need the mergeAlts to keep the alternatives in the right order
673 where
674 (ex_tvs, arg_ids) = dataConRepInstPat us con tys
675
676 -- It matches more than one, so do nothing
677 _ -> (False, all_alts)
678
679 | debugIsOn, isAlgTyCon tycon, null (tyConDataCons tycon)
680 , not (isFamilyTyCon tycon || isAbstractTyCon tycon)
681 -- Check for no data constructors
682 -- This can legitimately happen for abstract types and type families,
683 -- so don't report that
684 = (False, all_alts)
685
686 | otherwise -- The common case
687 = (False, all_alts)
688
689 {- Note [Combine identical alternatives]
690 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
691 If several alternatives are identical, merge them into a single
692 DEFAULT alternative. I've occasionally seen this making a big
693 difference:
694
695 case e of =====> case e of
696 C _ -> f x D v -> ....v....
697 D v -> ....v.... DEFAULT -> f x
698 DEFAULT -> f x
699
700 The point is that we merge common RHSs, at least for the DEFAULT case.
701 [One could do something more elaborate but I've never seen it needed.]
702 To avoid an expensive test, we just merge branches equal to the *first*
703 alternative; this picks up the common cases
704 a) all branches equal
705 b) some branches equal to the DEFAULT (which occurs first)
706
707 The case where Combine Identical Alternatives transformation showed up
708 was like this (base/Foreign/C/Err/Error.hs):
709
710 x | p `is` 1 -> e1
711 | p `is` 2 -> e2
712 ...etc...
713
714 where @is@ was something like
715
716 p `is` n = p /= (-1) && p == n
717
718 This gave rise to a horrible sequence of cases
719
720 case p of
721 (-1) -> $j p
722 1 -> e1
723 DEFAULT -> $j p
724
725 and similarly in cascade for all the join points!
726
727 NB: it's important that all this is done in [InAlt], *before* we work
728 on the alternatives themselves, because Simplify.simplAlt may zap the
729 occurrence info on the binders in the alternatives, which in turn
730 defeats combineIdenticalAlts (see Trac #7360).
731
732 Note [Care with impossible-constructors when combining alternatives]
733 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
734 Suppose we have (Trac #10538)
735 data T = A | B | C | D
736
737 case x::T of (Imposs-default-cons {A,B})
738 DEFAULT -> e1
739 A -> e2
740 B -> e1
741
742 When calling combineIdentialAlts, we'll have computed that the
743 "impossible constructors" for the DEFAULT alt is {A,B}, since if x is
744 A or B we'll take the other alternatives. But suppose we combine B
745 into the DEFAULT, to get
746
747 case x::T of (Imposs-default-cons {A})
748 DEFAULT -> e1
749 A -> e2
750
751 Then we must be careful to trim the impossible constructors to just {A},
752 else we risk compiling 'e1' wrong!
753
754 Not only that, but we take care when there is no DEFAULT beforehand,
755 because we are introducing one. Consider
756
757 case x of (Imposs-default-cons {A,B,C})
758 A -> e1
759 B -> e2
760 C -> e1
761
762 Then when combining the A and C alternatives we get
763
764 case x of (Imposs-default-cons {B})
765 DEFAULT -> e1
766 B -> e2
767
768 Note that we have a new DEFAULT branch that we didn't have before. So
769 we need delete from the "impossible-default-constructors" all the
770 known-con alternatives that we have eliminated. (In Trac #11172 we
771 missed the first one.)
772
773 -}
774
775 combineIdenticalAlts :: [AltCon] -- Constructors that cannot match DEFAULT
776 -> [CoreAlt]
777 -> (Bool, -- True <=> something happened
778 [AltCon], -- New constructors that cannot match DEFAULT
779 [CoreAlt]) -- New alternatives
780 -- See Note [Combine identical alternatives]
781 -- True <=> we did some combining, result is a single DEFAULT alternative
782 combineIdenticalAlts imposs_deflt_cons ((con1,bndrs1,rhs1) : rest_alts)
783 | all isDeadBinder bndrs1 -- Remember the default
784 , not (null elim_rest) -- alternative comes first
785 = (True, imposs_deflt_cons', deflt_alt : filtered_rest)
786 where
787 (elim_rest, filtered_rest) = partition identical_to_alt1 rest_alts
788 deflt_alt = (DEFAULT, [], mkTicks (concat tickss) rhs1)
789
790 -- See Note [Care with impossible-constructors when combining alternatives]
791 imposs_deflt_cons' = imposs_deflt_cons `minusList` elim_cons
792 elim_cons = elim_con1 ++ map fstOf3 elim_rest
793 elim_con1 = case con1 of -- Don't forget con1!
794 DEFAULT -> [] -- See Note [
795 _ -> [con1]
796
797 cheapEqTicked e1 e2 = cheapEqExpr' tickishFloatable e1 e2
798 identical_to_alt1 (_con,bndrs,rhs)
799 = all isDeadBinder bndrs && rhs `cheapEqTicked` rhs1
800 tickss = map (stripTicksT tickishFloatable . thdOf3) elim_rest
801
802 combineIdenticalAlts imposs_cons alts
803 = (False, imposs_cons, alts)
804
805 {- *********************************************************************
806 * *
807 exprIsTrivial
808 * *
809 ************************************************************************
810
811 Note [exprIsTrivial]
812 ~~~~~~~~~~~~~~~~~~~~
813 @exprIsTrivial@ is true of expressions we are unconditionally happy to
814 duplicate; simple variables and constants, and type
815 applications. Note that primop Ids aren't considered
816 trivial unless
817
818 Note [Variables are trivial]
819 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
820 There used to be a gruesome test for (hasNoBinding v) in the
821 Var case:
822 exprIsTrivial (Var v) | hasNoBinding v = idArity v == 0
823 The idea here is that a constructor worker, like \$wJust, is
824 really short for (\x -> \$wJust x), because \$wJust has no binding.
825 So it should be treated like a lambda. Ditto unsaturated primops.
826 But now constructor workers are not "have-no-binding" Ids. And
827 completely un-applied primops and foreign-call Ids are sufficiently
828 rare that I plan to allow them to be duplicated and put up with
829 saturating them.
830
831 Note [Tick trivial]
832 ~~~~~~~~~~~~~~~~~~~
833 Ticks are only trivial if they are pure annotations. If we treat
834 "tick<n> x" as trivial, it will be inlined inside lambdas and the
835 entry count will be skewed, for example. Furthermore "scc<n> x" will
836 turn into just "x" in mkTick.
837
838 Note [Empty case is trivial]
839 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
840 The expression (case (x::Int) Bool of {}) is just a type-changing
841 case used when we are sure that 'x' will not return. See
842 Note [Empty case alternatives] in CoreSyn.
843
844 If the scrutinee is trivial, then so is the whole expression; and the
845 CoreToSTG pass in fact drops the case expression leaving only the
846 scrutinee.
847
848 Having more trivial expressions is good. Moreover, if we don't treat
849 it as trivial we may land up with let-bindings like
850 let v = case x of {} in ...
851 and after CoreToSTG that gives
852 let v = x in ...
853 and that confuses the code generator (Trac #11155). So best to kill
854 it off at source.
855 -}
856
857 exprIsTrivial :: CoreExpr -> Bool
858 exprIsTrivial (Var _) = True -- See Note [Variables are trivial]
859 exprIsTrivial (Type _) = True
860 exprIsTrivial (Coercion _) = True
861 exprIsTrivial (Lit lit) = litIsTrivial lit
862 exprIsTrivial (App e arg) = not (isRuntimeArg arg) && exprIsTrivial e
863 exprIsTrivial (Lam b e) = not (isRuntimeVar b) && exprIsTrivial e
864 exprIsTrivial (Tick t e) = not (tickishIsCode t) && exprIsTrivial e
865 -- See Note [Tick trivial]
866 exprIsTrivial (Cast e _) = exprIsTrivial e
867 exprIsTrivial (Case e _ _ []) = exprIsTrivial e -- See Note [Empty case is trivial]
868 exprIsTrivial _ = False
869
870 {-
871 Note [getIdFromTrivialExpr]
872 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
873 When substituting in a breakpoint we need to strip away the type cruft
874 from a trivial expression and get back to the Id. The invariant is
875 that the expression we're substituting was originally trivial
876 according to exprIsTrivial, AND the expression is not a literal.
877 See Note [substTickish] for how breakpoint substitution preserves
878 this extra invariant.
879
880 We also need this functionality in CorePrep to extract out Id of a
881 function which we are saturating. However, in this case we don't know
882 if the variable actually refers to a literal; thus we use
883 'getIdFromTrivialExpr_maybe' to handle this case. See test
884 T12076lit for an example where this matters.
885 -}
886
887 getIdFromTrivialExpr :: CoreExpr -> Id
888 getIdFromTrivialExpr e
889 = fromMaybe (pprPanic "getIdFromTrivialExpr" (ppr e))
890 (getIdFromTrivialExpr_maybe e)
891
892 getIdFromTrivialExpr_maybe :: CoreExpr -> Maybe Id
893 -- See Note [getIdFromTrivialExpr]
894 getIdFromTrivialExpr_maybe e = go e
895 where go (Var v) = Just v
896 go (App f t) | not (isRuntimeArg t) = go f
897 go (Tick t e) | not (tickishIsCode t) = go e
898 go (Cast e _) = go e
899 go (Lam b e) | not (isRuntimeVar b) = go e
900 go _ = Nothing
901
902 {-
903 exprIsBottom is a very cheap and cheerful function; it may return
904 False for bottoming expressions, but it never costs much to ask. See
905 also CoreArity.exprBotStrictness_maybe, but that's a bit more
906 expensive.
907 -}
908
909 exprIsBottom :: CoreExpr -> Bool
910 -- See Note [Bottoming expressions]
911 exprIsBottom e
912 | isEmptyTy (exprType e)
913 = True
914 | otherwise
915 = go 0 e
916 where
917 go n (Var v) = isBottomingId v && n >= idArity v
918 go n (App e a) | isTypeArg a = go n e
919 | otherwise = go (n+1) e
920 go n (Tick _ e) = go n e
921 go n (Cast e _) = go n e
922 go n (Let _ e) = go n e
923 go n (Lam v e) | isTyVar v = go n e
924 go _ (Case _ _ _ alts) = null alts
925 -- See Note [Empty case alternatives] in CoreSyn
926 go _ _ = False
927
928 {- Note [Bottoming expressions]
929 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
930 A bottoming expression is guaranteed to diverge, or raise an
931 exception. We can test for it in two different ways, and exprIsBottom
932 checks for both of these situations:
933
934 * Visibly-bottom computations. For example
935 (error Int "Hello")
936 is visibly bottom. The strictness analyser also finds out if
937 a function diverges or raises an exception, and puts that info
938 in its strictness signature.
939
940 * Empty types. If a type is empty, its only inhabitant is bottom.
941 For example:
942 data T
943 f :: T -> Bool
944 f = \(x:t). case x of Bool {}
945 Since T has no data constructors, the case alternatives are of course
946 empty. However note that 'x' is not bound to a visibly-bottom value;
947 it's the *type* that tells us it's going to diverge.
948
949 A GADT may also be empty even though it has constructors:
950 data T a where
951 T1 :: a -> T Bool
952 T2 :: T Int
953 ...(case (x::T Char) of {})...
954 Here (T Char) is uninhabited. A more realistic case is (Int ~ Bool),
955 which is likewise uninhabited.
956
957
958 ************************************************************************
959 * *
960 exprIsDupable
961 * *
962 ************************************************************************
963
964 Note [exprIsDupable]
965 ~~~~~~~~~~~~~~~~~~~~
966 @exprIsDupable@ is true of expressions that can be duplicated at a modest
967 cost in code size. This will only happen in different case
968 branches, so there's no issue about duplicating work.
969
970 That is, exprIsDupable returns True of (f x) even if
971 f is very very expensive to call.
972
973 Its only purpose is to avoid fruitless let-binding
974 and then inlining of case join points
975 -}
976
977 exprIsDupable :: DynFlags -> CoreExpr -> Bool
978 exprIsDupable dflags e
979 = isJust (go dupAppSize e)
980 where
981 go :: Int -> CoreExpr -> Maybe Int
982 go n (Type {}) = Just n
983 go n (Coercion {}) = Just n
984 go n (Var {}) = decrement n
985 go n (Tick _ e) = go n e
986 go n (Cast e _) = go n e
987 go n (App f a) | Just n' <- go n a = go n' f
988 go n (Lit lit) | litIsDupable dflags lit = decrement n
989 go _ _ = Nothing
990
991 decrement :: Int -> Maybe Int
992 decrement 0 = Nothing
993 decrement n = Just (n-1)
994
995 dupAppSize :: Int
996 dupAppSize = 8 -- Size of term we are prepared to duplicate
997 -- This is *just* big enough to make test MethSharing
998 -- inline enough join points. Really it should be
999 -- smaller, and could be if we fixed Trac #4960.
1000
1001 {-
1002 ************************************************************************
1003 * *
1004 exprIsCheap, exprIsExpandable
1005 * *
1006 ************************************************************************
1007
1008 Note [exprIsWorkFree]
1009 ~~~~~~~~~~~~~~~~~~~~~
1010 exprIsWorkFree is used when deciding whether to inline something; we
1011 don't inline it if doing so might duplicate work, by peeling off a
1012 complete copy of the expression. Here we do not want even to
1013 duplicate a primop (Trac #5623):
1014 eg let x = a #+ b in x +# x
1015 we do not want to inline/duplicate x
1016
1017 Previously we were a bit more liberal, which led to the primop-duplicating
1018 problem. However, being more conservative did lead to a big regression in
1019 one nofib benchmark, wheel-sieve1. The situation looks like this:
1020
1021 let noFactor_sZ3 :: GHC.Types.Int -> GHC.Types.Bool
1022 noFactor_sZ3 = case s_adJ of _ { GHC.Types.I# x_aRs ->
1023 case GHC.Prim.<=# x_aRs 2 of _ {
1024 GHC.Types.False -> notDivBy ps_adM qs_adN;
1025 GHC.Types.True -> lvl_r2Eb }}
1026 go = \x. ...(noFactor (I# y))....(go x')...
1027
1028 The function 'noFactor' is heap-allocated and then called. Turns out
1029 that 'notDivBy' is strict in its THIRD arg, but that is invisible to
1030 the caller of noFactor, which therefore cannot do w/w and
1031 heap-allocates noFactor's argument. At the moment (May 12) we are just
1032 going to put up with this, because the previous more aggressive inlining
1033 (which treated 'noFactor' as work-free) was duplicating primops, which
1034 in turn was making inner loops of array calculations runs slow (#5623)
1035
1036 Note [Case expressions are work-free]
1037 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1038 Are case-expressions work-free? Consider
1039 let v = case x of (p,q) -> p
1040 go = \y -> ...case v of ...
1041 Should we inline 'v' at its use site inside the loop? At the moment
1042 we do. I experimented with saying that case are *not* work-free, but
1043 that increased allocation slightly. It's a fairly small effect, and at
1044 the moment we go for the slightly more aggressive version which treats
1045 (case x of ....) as work-free if the alternatives are.
1046
1047 Moreover it improves arities of overloaded functions where
1048 there is only dictionary selection (no construction) involved
1049
1050 Note [exprIsCheap] See also Note [Interaction of exprIsCheap and lone variables]
1051 ~~~~~~~~~~~~~~~~~~ in CoreUnfold.hs
1052 @exprIsCheap@ looks at a Core expression and returns \tr{True} if
1053 it is obviously in weak head normal form, or is cheap to get to WHNF.
1054 [Note that that's not the same as exprIsDupable; an expression might be
1055 big, and hence not dupable, but still cheap.]
1056
1057 By ``cheap'' we mean a computation we're willing to:
1058 push inside a lambda, or
1059 inline at more than one place
1060 That might mean it gets evaluated more than once, instead of being
1061 shared. The main examples of things which aren't WHNF but are
1062 ``cheap'' are:
1063
1064 * case e of
1065 pi -> ei
1066 (where e, and all the ei are cheap)
1067
1068 * let x = e in b
1069 (where e and b are cheap)
1070
1071 * op x1 ... xn
1072 (where op is a cheap primitive operator)
1073
1074 * error "foo"
1075 (because we are happy to substitute it inside a lambda)
1076
1077 Notice that a variable is considered 'cheap': we can push it inside a lambda,
1078 because sharing will make sure it is only evaluated once.
1079
1080 Note [exprIsCheap and exprIsHNF]
1081 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1082 Note that exprIsHNF does not imply exprIsCheap. Eg
1083 let x = fac 20 in Just x
1084 This responds True to exprIsHNF (you can discard a seq), but
1085 False to exprIsCheap.
1086
1087 Note [Arguments and let-bindings exprIsCheapX]
1088 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1089 What predicate should we apply to the argument of an application, or the
1090 RHS of a let-binding?
1091
1092 We used to say "exprIsTrivial arg" due to concerns about duplicating
1093 nested constructor applications, but see #4978. So now we just recursively
1094 use exprIsCheapX.
1095
1096 We definitely want to treat let and app the same. The principle here is
1097 that
1098 let x = blah in f x
1099 should behave equivalently to
1100 f blah
1101
1102 This in turn means that the 'letrec g' does not prevent eta expansion
1103 in this (which it previously was):
1104 f = \x. let v = case x of
1105 True -> letrec g = \w. blah
1106 in g
1107 False -> \x. x
1108 in \w. v True
1109 -}
1110
1111 --------------------
1112 exprIsWorkFree :: CoreExpr -> Bool -- See Note [exprIsWorkFree]
1113 exprIsWorkFree = exprIsCheapX isWorkFreeApp
1114
1115 exprIsCheap :: CoreExpr -> Bool
1116 exprIsCheap = exprIsCheapX isCheapApp
1117
1118 exprIsCheapX :: CheapAppFun -> CoreExpr -> Bool
1119 exprIsCheapX ok_app e
1120 = ok e
1121 where
1122 ok e = go 0 e
1123
1124 -- n is the number of value arguments
1125 go n (Var v) = ok_app v n
1126 go _ (Lit {}) = True
1127 go _ (Type {}) = True
1128 go _ (Coercion {}) = True
1129 go n (Cast e _) = go n e
1130 go n (Case scrut _ _ alts) = ok scrut &&
1131 and [ go n rhs | (_,_,rhs) <- alts ]
1132 go n (Tick t e) | tickishCounts t = False
1133 | otherwise = go n e
1134 go n (Lam x e) | isRuntimeVar x = n==0 || go (n-1) e
1135 | otherwise = go n e
1136 go n (App f e) | isRuntimeArg e = go (n+1) f && ok e
1137 | otherwise = go n f
1138 go n (Let (NonRec _ r) e) = go n e && ok r
1139 go n (Let (Rec prs) e) = go n e && all (ok . snd) prs
1140
1141 -- Case: see Note [Case expressions are work-free]
1142 -- App, Let: see Note [Arguments and let-bindings exprIsCheapX]
1143
1144
1145 {- Note [exprIsExpandable]
1146 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1147 An expression is "expandable" if we are willing to duplicate it, if doing
1148 so might make a RULE or case-of-constructor fire. Consider
1149 let x = (a,b)
1150 y = build g
1151 in ....(case x of (p,q) -> rhs)....(foldr k z y)....
1152
1153 We don't inline 'x' or 'y' (see Note [Lone variables] in CoreUnfold),
1154 but we do want
1155
1156 * the case-expression to simplify
1157 (via exprIsConApp_maybe, exprIsLiteral_maybe)
1158
1159 * the foldr/build RULE to fire
1160 (by expanding the unfolding during rule matching)
1161
1162 So we classify the unfolding of a let-binding as "expandable" (via the
1163 uf_expandable field) if we want to do this kind of on-the-fly
1164 expansion. Specifically:
1165
1166 * True of constructor applications (K a b)
1167
1168 * True of applications of a "CONLIKE" Id; see Note [CONLIKE pragma] in BasicTypes.
1169 (NB: exprIsCheap might not be true of this)
1170
1171 * False of case-expressions. If we have
1172 let x = case ... in ...(case x of ...)...
1173 we won't simplify. We have to inline x. See Trac #14688.
1174
1175 * False of let-expressions (same reason); and in any case we
1176 float lets out of an RHS if doing so will reveal an expandable
1177 application (see SimplEnv.doFloatFromRhs).
1178
1179 * Take care: exprIsExpandable should /not/ be true of primops. I
1180 found this in test T5623a:
1181 let q = /\a. Ptr a (a +# b)
1182 in case q @ Float of Ptr v -> ...q...
1183
1184 q's inlining should not be expandable, else exprIsConApp_maybe will
1185 say that (q @ Float) expands to (Ptr a (a +# b)), and that will
1186 duplicate the (a +# b) primop, which we should not do lightly.
1187 (It's quite hard to trigger this bug, but T13155 does so for GHC 8.0.)
1188 -}
1189
1190 -------------------------------------
1191 exprIsExpandable :: CoreExpr -> Bool
1192 -- See Note [exprIsExpandable]
1193 exprIsExpandable e
1194 = ok e
1195 where
1196 ok e = go 0 e
1197
1198 -- n is the number of value arguments
1199 go n (Var v) = isExpandableApp v n
1200 go _ (Lit {}) = True
1201 go _ (Type {}) = True
1202 go _ (Coercion {}) = True
1203 go n (Cast e _) = go n e
1204 go n (Tick t e) | tickishCounts t = False
1205 | otherwise = go n e
1206 go n (Lam x e) | isRuntimeVar x = n==0 || go (n-1) e
1207 | otherwise = go n e
1208 go n (App f e) | isRuntimeArg e = go (n+1) f && ok e
1209 | otherwise = go n f
1210 go _ (Case {}) = False
1211 go _ (Let {}) = False
1212
1213
1214 -------------------------------------
1215 type CheapAppFun = Id -> Arity -> Bool
1216 -- Is an application of this function to n *value* args
1217 -- always cheap, assuming the arguments are cheap?
1218 -- True mainly of data constructors, partial applications;
1219 -- but with minor variations:
1220 -- isWorkFreeApp
1221 -- isCheapApp
1222 -- isExpandableApp
1223
1224 isWorkFreeApp :: CheapAppFun
1225 isWorkFreeApp fn n_val_args
1226 | n_val_args == 0 -- No value args
1227 = True
1228 | n_val_args < idArity fn -- Partial application
1229 = True
1230 | otherwise
1231 = case idDetails fn of
1232 DataConWorkId {} -> True
1233 _ -> False
1234
1235 isCheapApp :: CheapAppFun
1236 isCheapApp fn n_val_args
1237 | isWorkFreeApp fn n_val_args = True
1238 | isBottomingId fn = True -- See Note [isCheapApp: bottoming functions]
1239 | otherwise
1240 = case idDetails fn of
1241 DataConWorkId {} -> True -- Actually handled by isWorkFreeApp
1242 RecSelId {} -> n_val_args == 1 -- See Note [Record selection]
1243 ClassOpId {} -> n_val_args == 1
1244 PrimOpId op -> primOpIsCheap op
1245 _ -> False
1246 -- In principle we should worry about primops
1247 -- that return a type variable, since the result
1248 -- might be applied to something, but I'm not going
1249 -- to bother to check the number of args
1250
1251 isExpandableApp :: CheapAppFun
1252 isExpandableApp fn n_val_args
1253 | isWorkFreeApp fn n_val_args = True
1254 | otherwise
1255 = case idDetails fn of
1256 DataConWorkId {} -> True -- Actually handled by isWorkFreeApp
1257 RecSelId {} -> n_val_args == 1 -- See Note [Record selection]
1258 ClassOpId {} -> n_val_args == 1
1259 PrimOpId {} -> False
1260 _ | isBottomingId fn -> False
1261 -- See Note [isExpandableApp: bottoming functions]
1262 | isConLike (idRuleMatchInfo fn) -> True
1263 | all_args_are_preds -> True
1264 | otherwise -> False
1265
1266 where
1267 -- See if all the arguments are PredTys (implicit params or classes)
1268 -- If so we'll regard it as expandable; see Note [Expandable overloadings]
1269 all_args_are_preds = all_pred_args n_val_args (idType fn)
1270
1271 all_pred_args n_val_args ty
1272 | n_val_args == 0
1273 = True
1274
1275 | Just (bndr, ty) <- splitPiTy_maybe ty
1276 = caseBinder bndr
1277 (\_tv -> all_pred_args n_val_args ty)
1278 (\bndr_ty -> isPredTy bndr_ty && all_pred_args (n_val_args-1) ty)
1279
1280 | otherwise
1281 = False
1282
1283 {- Note [isCheapApp: bottoming functions]
1284 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1285 I'm not sure why we have a special case for bottoming
1286 functions in isCheapApp. Maybe we don't need it.
1287
1288 Note [isExpandableApp: bottoming functions]
1289 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1290 It's important that isExpandableApp does not respond True to bottoming
1291 functions. Recall undefined :: HasCallStack => a
1292 Suppose isExpandableApp responded True to (undefined d), and we had:
1293
1294 x = undefined <dict-expr>
1295
1296 Then Simplify.prepareRhs would ANF the RHS:
1297
1298 d = <dict-expr>
1299 x = undefined d
1300
1301 This is already bad: we gain nothing from having x bound to (undefined
1302 var), unlike the case for data constructors. Worse, we get the
1303 simplifier loop described in OccurAnal Note [Cascading inlines].
1304 Suppose x occurs just once; OccurAnal.occAnalNonRecRhs decides x will
1305 certainly_inline; so we end up inlining d right back into x; but in
1306 the end x doesn't inline because it is bottom (preInlineUnconditionally);
1307 so the process repeats.. We could elaborate the certainly_inline logic
1308 some more, but it's better just to treat bottoming bindings as
1309 non-expandable, because ANFing them is a bad idea in the first place.
1310
1311 Note [Record selection]
1312 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1313 I'm experimenting with making record selection
1314 look cheap, so we will substitute it inside a
1315 lambda. Particularly for dictionary field selection.
1316
1317 BUT: Take care with (sel d x)! The (sel d) might be cheap, but
1318 there's no guarantee that (sel d x) will be too. Hence (n_val_args == 1)
1319
1320 Note [Expandable overloadings]
1321 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1322 Suppose the user wrote this
1323 {-# RULE forall x. foo (negate x) = h x #-}
1324 f x = ....(foo (negate x))....
1325 He'd expect the rule to fire. But since negate is overloaded, we might
1326 get this:
1327 f = \d -> let n = negate d in \x -> ...foo (n x)...
1328 So we treat the application of a function (negate in this case) to a
1329 *dictionary* as expandable. In effect, every function is CONLIKE when
1330 it's applied only to dictionaries.
1331
1332
1333 ************************************************************************
1334 * *
1335 exprOkForSpeculation
1336 * *
1337 ************************************************************************
1338 -}
1339
1340 -----------------------------
1341 -- | 'exprOkForSpeculation' returns True of an expression that is:
1342 --
1343 -- * Safe to evaluate even if normal order eval might not
1344 -- evaluate the expression at all, or
1345 --
1346 -- * Safe /not/ to evaluate even if normal order would do so
1347 --
1348 -- It is usually called on arguments of unlifted type, but not always
1349 -- In particular, Simplify.rebuildCase calls it on lifted types
1350 -- when a 'case' is a plain 'seq'. See the example in
1351 -- Note [exprOkForSpeculation: case expressions] below
1352 --
1353 -- Precisely, it returns @True@ iff:
1354 -- a) The expression guarantees to terminate,
1355 -- b) soon,
1356 -- c) without causing a write side effect (e.g. writing a mutable variable)
1357 -- d) without throwing a Haskell exception
1358 -- e) without risking an unchecked runtime exception (array out of bounds,
1359 -- divide by zero)
1360 --
1361 -- For @exprOkForSideEffects@ the list is the same, but omitting (e).
1362 --
1363 -- Note that
1364 -- exprIsHNF implies exprOkForSpeculation
1365 -- exprOkForSpeculation implies exprOkForSideEffects
1366 --
1367 -- See Note [PrimOp can_fail and has_side_effects] in PrimOp
1368 -- and Note [Transformations affected by can_fail and has_side_effects]
1369 --
1370 -- As an example of the considerations in this test, consider:
1371 --
1372 -- > let x = case y# +# 1# of { r# -> I# r# }
1373 -- > in E
1374 --
1375 -- being translated to:
1376 --
1377 -- > case y# +# 1# of { r# ->
1378 -- > let x = I# r#
1379 -- > in E
1380 -- > }
1381 --
1382 -- We can only do this if the @y + 1@ is ok for speculation: it has no
1383 -- side effects, and can't diverge or raise an exception.
1384
1385 exprOkForSpeculation, exprOkForSideEffects :: CoreExpr -> Bool
1386 exprOkForSpeculation = expr_ok primOpOkForSpeculation
1387 exprOkForSideEffects = expr_ok primOpOkForSideEffects
1388
1389 expr_ok :: (PrimOp -> Bool) -> CoreExpr -> Bool
1390 expr_ok _ (Lit _) = True
1391 expr_ok _ (Type _) = True
1392 expr_ok _ (Coercion _) = True
1393
1394 expr_ok primop_ok (Var v) = app_ok primop_ok v []
1395 expr_ok primop_ok (Cast e _) = expr_ok primop_ok e
1396 expr_ok primop_ok (Lam b e)
1397 | isTyVar b = expr_ok primop_ok e
1398 | otherwise = True
1399
1400
1401 -- Tick annotations that *tick* cannot be speculated, because these
1402 -- are meant to identify whether or not (and how often) the particular
1403 -- source expression was evaluated at runtime.
1404 expr_ok primop_ok (Tick tickish e)
1405 | tickishCounts tickish = False
1406 | otherwise = expr_ok primop_ok e
1407
1408 expr_ok _ (Let {}) = False
1409 -- Lets can be stacked deeply, so just give up.
1410 -- In any case, the argument of exprOkForSpeculation is
1411 -- usually in a strict context, so any lets will have been
1412 -- floated away.
1413
1414 expr_ok primop_ok (Case scrut bndr _ alts)
1415 = -- See Note [exprOkForSpeculation: case expressions]
1416 expr_ok primop_ok scrut
1417 && isUnliftedType (idType bndr)
1418 && all (\(_,_,rhs) -> expr_ok primop_ok rhs) alts
1419 && altsAreExhaustive alts
1420
1421 expr_ok primop_ok other_expr
1422 = case collectArgs other_expr of
1423 (expr, args) | Var f <- stripTicksTopE (not . tickishCounts) expr
1424 -> app_ok primop_ok f args
1425 _ -> False
1426
1427 -----------------------------
1428 app_ok :: (PrimOp -> Bool) -> Id -> [CoreExpr] -> Bool
1429 app_ok primop_ok fun args
1430 = case idDetails fun of
1431 DFunId new_type -> not new_type
1432 -- DFuns terminate, unless the dict is implemented
1433 -- with a newtype in which case they may not
1434
1435 DataConWorkId {} -> True
1436 -- The strictness of the constructor has already
1437 -- been expressed by its "wrapper", so we don't need
1438 -- to take the arguments into account
1439
1440 PrimOpId op
1441 | isDivOp op
1442 , [arg1, Lit lit] <- args
1443 -> not (isZeroLit lit) && expr_ok primop_ok arg1
1444 -- Special case for dividing operations that fail
1445 -- In general they are NOT ok-for-speculation
1446 -- (which primop_ok will catch), but they ARE OK
1447 -- if the divisor is definitely non-zero.
1448 -- Often there is a literal divisor, and this
1449 -- can get rid of a thunk in an inner loop
1450
1451 | SeqOp <- op -- See Note [seq# and expr_ok]
1452 -> all (expr_ok primop_ok) args
1453
1454 | otherwise
1455 -> primop_ok op -- Check the primop itself
1456 && and (zipWith arg_ok arg_tys args) -- Check the arguments
1457
1458 _other -> isUnliftedType (idType fun) -- c.f. the Var case of exprIsHNF
1459 || idArity fun > n_val_args -- Partial apps
1460 || (n_val_args == 0 &&
1461 isEvaldUnfolding (idUnfolding fun)) -- Let-bound values
1462 where
1463 n_val_args = valArgCount args
1464 where
1465 (arg_tys, _) = splitPiTys (idType fun)
1466
1467 arg_ok :: TyBinder -> CoreExpr -> Bool
1468 arg_ok (Named _) _ = True -- A type argument
1469 arg_ok (Anon ty) arg -- A term argument
1470 | isUnliftedType ty = expr_ok primop_ok arg
1471 | otherwise = True -- See Note [Primops with lifted arguments]
1472
1473 -----------------------------
1474 altsAreExhaustive :: [Alt b] -> Bool
1475 -- True <=> the case alternatives are definiely exhaustive
1476 -- False <=> they may or may not be
1477 altsAreExhaustive []
1478 = False -- Should not happen
1479 altsAreExhaustive ((con1,_,_) : alts)
1480 = case con1 of
1481 DEFAULT -> True
1482 LitAlt {} -> False
1483 DataAlt c -> alts `lengthIs` (tyConFamilySize (dataConTyCon c) - 1)
1484 -- It is possible to have an exhaustive case that does not
1485 -- enumerate all constructors, notably in a GADT match, but
1486 -- we behave conservatively here -- I don't think it's important
1487 -- enough to deserve special treatment
1488
1489 -- | True of dyadic operators that can fail only if the second arg is zero!
1490 isDivOp :: PrimOp -> Bool
1491 -- This function probably belongs in PrimOp, or even in
1492 -- an automagically generated file.. but it's such a
1493 -- special case I thought I'd leave it here for now.
1494 isDivOp IntQuotOp = True
1495 isDivOp IntRemOp = True
1496 isDivOp WordQuotOp = True
1497 isDivOp WordRemOp = True
1498 isDivOp FloatDivOp = True
1499 isDivOp DoubleDivOp = True
1500 isDivOp _ = False
1501
1502 {- Note [exprOkForSpeculation: case expressions]
1503 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1504 exprOkForSpeculation accepts very special case expressions.
1505 Reason: (a ==# b) is ok-for-speculation, but the litEq rules
1506 in PrelRules convert it (a ==# 3#) to
1507 case a of { DEAFULT -> 0#; 3# -> 1# }
1508 for excellent reasons described in
1509 PrelRules Note [The litEq rule: converting equality to case].
1510 So, annoyingly, we want that case expression to be
1511 ok-for-speculation too. Bother.
1512
1513 But we restrict it sharply:
1514
1515 * We restrict it to unlifted scrutinees. Consider this:
1516 case x of y {
1517 DEFAULT -> ... (let v::Int# = case y of { True -> e1
1518 ; False -> e2 }
1519 in ...) ...
1520
1521 Does the RHS of v satisfy the let/app invariant? Previously we said
1522 yes, on the grounds that y is evaluated. But the binder-swap done
1523 by SetLevels would transform the inner alternative to
1524 DEFAULT -> ... (let v::Int# = case x of { ... }
1525 in ...) ....
1526 which does /not/ satisfy the let/app invariant, because x is
1527 not evaluated. See Note [Binder-swap during float-out]
1528 in SetLevels. To avoid this awkwardness it seems simpler
1529 to stick to unlifted scrutinees where the issue does not
1530 arise.
1531
1532 * We restrict it to exhaustive alternatives. A non-exhaustive
1533 case manifestly isn't ok-for-speculation. Consider
1534 case e of x { DEAFULT ->
1535 ...(case x of y
1536 A -> ...
1537 _ -> ...(case (case x of { B -> p; C -> p }) of
1538 I# r -> blah)...
1539 If SetLevesls considers the inner nested case as ok-for-speculation
1540 it can do case-floating (see Note [Floating cases] in SetLevels).
1541 So we'd float to:
1542 case e of x { DEAFULT ->
1543 case (case x of { B -> p; C -> p }) of I# r ->
1544 ...(case x of y
1545 A -> ...
1546 _ -> ...blah...)...
1547 which is utterly bogus (seg fault); see Trac #5453.
1548
1549 Similarly, this is a valid program (albeit a slightly dodgy one)
1550 let v = case x of { B -> ...; C -> ... }
1551 in case x of
1552 A -> ...
1553 _ -> ...v...v....
1554 Should v be considered ok-for-speculation? Its scrutinee may be
1555 evaluated, but the alternatives are incomplete so we should not
1556 evaluate it strictly.
1557
1558 Now, all this is for lifted types, but it'd be the same for any
1559 finite unlifted type. We don't have many of them, but we might
1560 add unlifted algebraic types in due course.
1561
1562 ----- Historical note: Trac #3717: --------
1563 foo :: Int -> Int
1564 foo 0 = 0
1565 foo n = (if n < 5 then 1 else 2) `seq` foo (n-1)
1566
1567 In earlier GHCs, we got this:
1568 T.$wfoo =
1569 \ (ww :: GHC.Prim.Int#) ->
1570 case ww of ds {
1571 __DEFAULT -> case (case <# ds 5 of _ {
1572 GHC.Types.False -> lvl1;
1573 GHC.Types.True -> lvl})
1574 of _ { __DEFAULT ->
1575 T.$wfoo (GHC.Prim.-# ds_XkE 1) };
1576 0 -> 0 }
1577
1578 Before join-points etc we could only get rid of two cases (which are
1579 redundant) by recognising that th e(case <# ds 5 of { ... }) is
1580 ok-for-speculation, even though it has /lifted/ type. But now join
1581 points do the job nicely.
1582 ------- End of historical note ------------
1583
1584
1585 Note [Primops with lifted arguments]
1586 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1587 Is this ok-for-speculation (see Trac #13027)?
1588 reallyUnsafePtrEq# a b
1589 Well, yes. The primop accepts lifted arguments and does not
1590 evaluate them. Indeed, in general primops are, well, primitive
1591 and do not perform evaluation.
1592
1593 There is one primop, dataToTag#, which does /require/ a lifted
1594 argument to be evaluated. To ensure this, CorePrep adds an
1595 eval if it can't see the argument is definitely evaluated
1596 (see [dataToTag magic] in CorePrep).
1597
1598 We make no attempt to guarantee that dataToTag#'s argument is
1599 evaluated here. Main reason: it's very fragile to test for the
1600 evaluatedness of a lifted argument. Consider
1601 case x of y -> let v = dataToTag# y in ...
1602
1603 where x/y have type Int, say. 'y' looks evaluated (by the enclosing
1604 case) so all is well. Now the FloatOut pass does a binder-swap (for
1605 very good reasons), changing to
1606 case x of y -> let v = dataToTag# x in ...
1607
1608 See also Note [dataToTag#] in primops.txt.pp.
1609
1610 Bottom line:
1611 * in exprOkForSpeculation we simply ignore all lifted arguments.
1612 * except see Note [seq# and expr_ok] for an exception
1613
1614
1615 Note [seq# and expr_ok]
1616 ~~~~~~~~~~~~~~~~~~~~~~~
1617 Recall that
1618 seq# :: forall a s . a -> State# s -> (# State# s, a #)
1619 must always evaluate its first argument. So it's really a
1620 counter-example to Note [Primops with lifted arguments]. In
1621 the case of seq# we must check the argument to seq#. Remember
1622 item (d) of the specification of exprOkForSpeculation:
1623
1624 -- Precisely, it returns @True@ iff:
1625 -- a) The expression guarantees to terminate,
1626 ...
1627 -- d) without throwing a Haskell exception
1628
1629 The lack of this special case caused Trac #5129 to go bad again.
1630 See comment:24 and following
1631
1632
1633 ************************************************************************
1634 * *
1635 exprIsHNF, exprIsConLike
1636 * *
1637 ************************************************************************
1638 -}
1639
1640 -- Note [exprIsHNF] See also Note [exprIsCheap and exprIsHNF]
1641 -- ~~~~~~~~~~~~~~~~
1642 -- | exprIsHNF returns true for expressions that are certainly /already/
1643 -- evaluated to /head/ normal form. This is used to decide whether it's ok
1644 -- to change:
1645 --
1646 -- > case x of _ -> e
1647 --
1648 -- into:
1649 --
1650 -- > e
1651 --
1652 -- and to decide whether it's safe to discard a 'seq'.
1653 --
1654 -- So, it does /not/ treat variables as evaluated, unless they say they are.
1655 -- However, it /does/ treat partial applications and constructor applications
1656 -- as values, even if their arguments are non-trivial, provided the argument
1657 -- type is lifted. For example, both of these are values:
1658 --
1659 -- > (:) (f x) (map f xs)
1660 -- > map (...redex...)
1661 --
1662 -- because 'seq' on such things completes immediately.
1663 --
1664 -- For unlifted argument types, we have to be careful:
1665 --
1666 -- > C (f x :: Int#)
1667 --
1668 -- Suppose @f x@ diverges; then @C (f x)@ is not a value. However this can't
1669 -- happen: see "CoreSyn#let_app_invariant". This invariant states that arguments of
1670 -- unboxed type must be ok-for-speculation (or trivial).
1671 exprIsHNF :: CoreExpr -> Bool -- True => Value-lambda, constructor, PAP
1672 exprIsHNF = exprIsHNFlike isDataConWorkId isEvaldUnfolding
1673
1674 -- | Similar to 'exprIsHNF' but includes CONLIKE functions as well as
1675 -- data constructors. Conlike arguments are considered interesting by the
1676 -- inliner.
1677 exprIsConLike :: CoreExpr -> Bool -- True => lambda, conlike, PAP
1678 exprIsConLike = exprIsHNFlike isConLikeId isConLikeUnfolding
1679
1680 -- | Returns true for values or value-like expressions. These are lambdas,
1681 -- constructors / CONLIKE functions (as determined by the function argument)
1682 -- or PAPs.
1683 --
1684 exprIsHNFlike :: (Var -> Bool) -> (Unfolding -> Bool) -> CoreExpr -> Bool
1685 exprIsHNFlike is_con is_con_unf = is_hnf_like
1686 where
1687 is_hnf_like (Var v) -- NB: There are no value args at this point
1688 = id_app_is_value v 0 -- Catches nullary constructors,
1689 -- so that [] and () are values, for example
1690 -- and (e.g.) primops that don't have unfoldings
1691 || is_con_unf (idUnfolding v)
1692 -- Check the thing's unfolding; it might be bound to a value
1693 -- We don't look through loop breakers here, which is a bit conservative
1694 -- but otherwise I worry that if an Id's unfolding is just itself,
1695 -- we could get an infinite loop
1696
1697 is_hnf_like (Lit _) = True
1698 is_hnf_like (Type _) = True -- Types are honorary Values;
1699 -- we don't mind copying them
1700 is_hnf_like (Coercion _) = True -- Same for coercions
1701 is_hnf_like (Lam b e) = isRuntimeVar b || is_hnf_like e
1702 is_hnf_like (Tick tickish e) = not (tickishCounts tickish)
1703 && is_hnf_like e
1704 -- See Note [exprIsHNF Tick]
1705 is_hnf_like (Cast e _) = is_hnf_like e
1706 is_hnf_like (App e a)
1707 | isValArg a = app_is_value e 1
1708 | otherwise = is_hnf_like e
1709 is_hnf_like (Let _ e) = is_hnf_like e -- Lazy let(rec)s don't affect us
1710 is_hnf_like _ = False
1711
1712 -- There is at least one value argument
1713 -- 'n' is number of value args to which the expression is applied
1714 app_is_value :: CoreExpr -> Int -> Bool
1715 app_is_value (Var f) nva = id_app_is_value f nva
1716 app_is_value (Tick _ f) nva = app_is_value f nva
1717 app_is_value (Cast f _) nva = app_is_value f nva
1718 app_is_value (App f a) nva
1719 | isValArg a = app_is_value f (nva + 1)
1720 | otherwise = app_is_value f nva
1721 app_is_value _ _ = False
1722
1723 id_app_is_value id n_val_args
1724 = is_con id
1725 || idArity id > n_val_args
1726 || id `hasKey` absentErrorIdKey -- See Note [aBSENT_ERROR_ID] in MkCore
1727 -- absentError behaves like an honorary data constructor
1728
1729
1730 {-
1731 Note [exprIsHNF Tick]
1732
1733 We can discard source annotations on HNFs as long as they aren't
1734 tick-like:
1735
1736 scc c (\x . e) => \x . e
1737 scc c (C x1..xn) => C x1..xn
1738
1739 So we regard these as HNFs. Tick annotations that tick are not
1740 regarded as HNF if the expression they surround is HNF, because the
1741 tick is there to tell us that the expression was evaluated, so we
1742 don't want to discard a seq on it.
1743 -}
1744
1745 -- | Can we bind this 'CoreExpr' at the top level?
1746 exprIsTopLevelBindable :: CoreExpr -> Type -> Bool
1747 -- See Note [CoreSyn top-level string literals]
1748 -- Precondition: exprType expr = ty
1749 -- Top-level literal strings can't even be wrapped in ticks
1750 -- see Note [CoreSyn top-level string literals] in CoreSyn
1751 exprIsTopLevelBindable expr ty
1752 = not (isUnliftedType ty)
1753 || exprIsTickedString expr
1754
1755 -- | Check if the expression is zero or more Ticks wrapped around a literal
1756 -- string.
1757 exprIsTickedString :: CoreExpr -> Bool
1758 exprIsTickedString = isJust . exprIsTickedString_maybe
1759
1760 -- | Extract a literal string from an expression that is zero or more Ticks
1761 -- wrapped around a literal string. Returns Nothing if the expression has a
1762 -- different shape.
1763 -- Used to "look through" Ticks in places that need to handle literal strings.
1764 exprIsTickedString_maybe :: CoreExpr -> Maybe ByteString
1765 exprIsTickedString_maybe (Lit (MachStr bs)) = Just bs
1766 exprIsTickedString_maybe (Tick t e)
1767 -- we don't tick literals with CostCentre ticks, compare to mkTick
1768 | tickishPlace t == PlaceCostCentre = Nothing
1769 | otherwise = exprIsTickedString_maybe e
1770 exprIsTickedString_maybe _ = Nothing
1771
1772 {-
1773 ************************************************************************
1774 * *
1775 Instantiating data constructors
1776 * *
1777 ************************************************************************
1778
1779 These InstPat functions go here to avoid circularity between DataCon and Id
1780 -}
1781
1782 dataConRepInstPat :: [Unique] -> DataCon -> [Type] -> ([TyVar], [Id])
1783 dataConRepFSInstPat :: [FastString] -> [Unique] -> DataCon -> [Type] -> ([TyVar], [Id])
1784
1785 dataConRepInstPat = dataConInstPat (repeat ((fsLit "ipv")))
1786 dataConRepFSInstPat = dataConInstPat
1787
1788 dataConInstPat :: [FastString] -- A long enough list of FSs to use for names
1789 -> [Unique] -- An equally long list of uniques, at least one for each binder
1790 -> DataCon
1791 -> [Type] -- Types to instantiate the universally quantified tyvars
1792 -> ([TyVar], [Id]) -- Return instantiated variables
1793 -- dataConInstPat arg_fun fss us con inst_tys returns a tuple
1794 -- (ex_tvs, arg_ids),
1795 --
1796 -- ex_tvs are intended to be used as binders for existential type args
1797 --
1798 -- arg_ids are indended to be used as binders for value arguments,
1799 -- and their types have been instantiated with inst_tys and ex_tys
1800 -- The arg_ids include both evidence and
1801 -- programmer-specified arguments (both after rep-ing)
1802 --
1803 -- Example.
1804 -- The following constructor T1
1805 --
1806 -- data T a where
1807 -- T1 :: forall b. Int -> b -> T(a,b)
1808 -- ...
1809 --
1810 -- has representation type
1811 -- forall a. forall a1. forall b. (a ~ (a1,b)) =>
1812 -- Int -> b -> T a
1813 --
1814 -- dataConInstPat fss us T1 (a1',b') will return
1815 --
1816 -- ([a1'', b''], [c :: (a1', b')~(a1'', b''), x :: Int, y :: b''])
1817 --
1818 -- where the double-primed variables are created with the FastStrings and
1819 -- Uniques given as fss and us
1820 dataConInstPat fss uniqs con inst_tys
1821 = ASSERT( univ_tvs `equalLength` inst_tys )
1822 (ex_bndrs, arg_ids)
1823 where
1824 univ_tvs = dataConUnivTyVars con
1825 ex_tvs = dataConExTyVars con
1826 arg_tys = dataConRepArgTys con
1827 arg_strs = dataConRepStrictness con -- 1-1 with arg_tys
1828 n_ex = length ex_tvs
1829
1830 -- split the Uniques and FastStrings
1831 (ex_uniqs, id_uniqs) = splitAt n_ex uniqs
1832 (ex_fss, id_fss) = splitAt n_ex fss
1833
1834 -- Make the instantiating substitution for universals
1835 univ_subst = zipTvSubst univ_tvs inst_tys
1836
1837 -- Make existential type variables, applying and extending the substitution
1838 (full_subst, ex_bndrs) = mapAccumL mk_ex_var univ_subst
1839 (zip3 ex_tvs ex_fss ex_uniqs)
1840
1841 mk_ex_var :: TCvSubst -> (TyVar, FastString, Unique) -> (TCvSubst, TyVar)
1842 mk_ex_var subst (tv, fs, uniq) = (Type.extendTvSubstWithClone subst tv
1843 new_tv
1844 , new_tv)
1845 where
1846 new_tv = mkTyVar (mkSysTvName uniq fs) kind
1847 kind = Type.substTyUnchecked subst (tyVarKind tv)
1848
1849 -- Make value vars, instantiating types
1850 arg_ids = zipWith4 mk_id_var id_uniqs id_fss arg_tys arg_strs
1851 mk_id_var uniq fs ty str
1852 = setCaseBndrEvald str $ -- See Note [Mark evaluated arguments]
1853 mkLocalIdOrCoVar name (Type.substTy full_subst ty)
1854 where
1855 name = mkInternalName uniq (mkVarOccFS fs) noSrcSpan
1856
1857 {-
1858 Note [Mark evaluated arguments]
1859 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1860 When pattern matching on a constructor with strict fields, the binder
1861 can have an 'evaldUnfolding'. Moreover, it *should* have one, so that
1862 when loading an interface file unfolding like:
1863 data T = MkT !Int
1864 f x = case x of { MkT y -> let v::Int# = case y of I# n -> n+1
1865 in ... }
1866 we don't want Lint to complain. The 'y' is evaluated, so the
1867 case in the RHS of the binding for 'v' is fine. But only if we
1868 *know* that 'y' is evaluated.
1869
1870 c.f. add_evals in Simplify.simplAlt
1871
1872 ************************************************************************
1873 * *
1874 Equality
1875 * *
1876 ************************************************************************
1877 -}
1878
1879 -- | A cheap equality test which bales out fast!
1880 -- If it returns @True@ the arguments are definitely equal,
1881 -- otherwise, they may or may not be equal.
1882 --
1883 -- See also 'exprIsBig'
1884 cheapEqExpr :: Expr b -> Expr b -> Bool
1885 cheapEqExpr = cheapEqExpr' (const False)
1886
1887 -- | Cheap expression equality test, can ignore ticks by type.
1888 cheapEqExpr' :: (Tickish Id -> Bool) -> Expr b -> Expr b -> Bool
1889 cheapEqExpr' ignoreTick = go_s
1890 where go_s = go `on` stripTicksTopE ignoreTick
1891 go (Var v1) (Var v2) = v1 == v2
1892 go (Lit lit1) (Lit lit2) = lit1 == lit2
1893 go (Type t1) (Type t2) = t1 `eqType` t2
1894 go (Coercion c1) (Coercion c2) = c1 `eqCoercion` c2
1895
1896 go (App f1 a1) (App f2 a2)
1897 = f1 `go_s` f2 && a1 `go_s` a2
1898
1899 go (Cast e1 t1) (Cast e2 t2)
1900 = e1 `go_s` e2 && t1 `eqCoercion` t2
1901
1902 go (Tick t1 e1) (Tick t2 e2)
1903 = t1 == t2 && e1 `go_s` e2
1904
1905 go _ _ = False
1906 {-# INLINE go #-}
1907 {-# INLINE cheapEqExpr' #-}
1908
1909 exprIsBig :: Expr b -> Bool
1910 -- ^ Returns @True@ of expressions that are too big to be compared by 'cheapEqExpr'
1911 exprIsBig (Lit _) = False
1912 exprIsBig (Var _) = False
1913 exprIsBig (Type _) = False
1914 exprIsBig (Coercion _) = False
1915 exprIsBig (Lam _ e) = exprIsBig e
1916 exprIsBig (App f a) = exprIsBig f || exprIsBig a
1917 exprIsBig (Cast e _) = exprIsBig e -- Hopefully coercions are not too big!
1918 exprIsBig (Tick _ e) = exprIsBig e
1919 exprIsBig _ = True
1920
1921 eqExpr :: InScopeSet -> CoreExpr -> CoreExpr -> Bool
1922 -- Compares for equality, modulo alpha
1923 eqExpr in_scope e1 e2
1924 = go (mkRnEnv2 in_scope) e1 e2
1925 where
1926 go env (Var v1) (Var v2)
1927 | rnOccL env v1 == rnOccR env v2
1928 = True
1929
1930 go _ (Lit lit1) (Lit lit2) = lit1 == lit2
1931 go env (Type t1) (Type t2) = eqTypeX env t1 t2
1932 go env (Coercion co1) (Coercion co2) = eqCoercionX env co1 co2
1933 go env (Cast e1 co1) (Cast e2 co2) = eqCoercionX env co1 co2 && go env e1 e2
1934 go env (App f1 a1) (App f2 a2) = go env f1 f2 && go env a1 a2
1935 go env (Tick n1 e1) (Tick n2 e2) = eqTickish env n1 n2 && go env e1 e2
1936
1937 go env (Lam b1 e1) (Lam b2 e2)
1938 = eqTypeX env (varType b1) (varType b2) -- False for Id/TyVar combination
1939 && go (rnBndr2 env b1 b2) e1 e2
1940
1941 go env (Let (NonRec v1 r1) e1) (Let (NonRec v2 r2) e2)
1942 = go env r1 r2 -- No need to check binder types, since RHSs match
1943 && go (rnBndr2 env v1 v2) e1 e2
1944
1945 go env (Let (Rec ps1) e1) (Let (Rec ps2) e2)
1946 = equalLength ps1 ps2
1947 && all2 (go env') rs1 rs2 && go env' e1 e2
1948 where
1949 (bs1,rs1) = unzip ps1
1950 (bs2,rs2) = unzip ps2
1951 env' = rnBndrs2 env bs1 bs2
1952
1953 go env (Case e1 b1 t1 a1) (Case e2 b2 t2 a2)
1954 | null a1 -- See Note [Empty case alternatives] in TrieMap
1955 = null a2 && go env e1 e2 && eqTypeX env t1 t2
1956 | otherwise
1957 = go env e1 e2 && all2 (go_alt (rnBndr2 env b1 b2)) a1 a2
1958
1959 go _ _ _ = False
1960
1961 -----------
1962 go_alt env (c1, bs1, e1) (c2, bs2, e2)
1963 = c1 == c2 && go (rnBndrs2 env bs1 bs2) e1 e2
1964
1965 eqTickish :: RnEnv2 -> Tickish Id -> Tickish Id -> Bool
1966 eqTickish env (Breakpoint lid lids) (Breakpoint rid rids)
1967 = lid == rid && map (rnOccL env) lids == map (rnOccR env) rids
1968 eqTickish _ l r = l == r
1969
1970 -- | Finds differences between core expressions, modulo alpha and
1971 -- renaming. Setting @top@ means that the @IdInfo@ of bindings will be
1972 -- checked for differences as well.
1973 diffExpr :: Bool -> RnEnv2 -> CoreExpr -> CoreExpr -> [SDoc]
1974 diffExpr _ env (Var v1) (Var v2) | rnOccL env v1 == rnOccR env v2 = []
1975 diffExpr _ _ (Lit lit1) (Lit lit2) | lit1 == lit2 = []
1976 diffExpr _ env (Type t1) (Type t2) | eqTypeX env t1 t2 = []
1977 diffExpr _ env (Coercion co1) (Coercion co2)
1978 | eqCoercionX env co1 co2 = []
1979 diffExpr top env (Cast e1 co1) (Cast e2 co2)
1980 | eqCoercionX env co1 co2 = diffExpr top env e1 e2
1981 diffExpr top env (Tick n1 e1) e2
1982 | not (tickishIsCode n1) = diffExpr top env e1 e2
1983 diffExpr top env e1 (Tick n2 e2)
1984 | not (tickishIsCode n2) = diffExpr top env e1 e2
1985 diffExpr top env (Tick n1 e1) (Tick n2 e2)
1986 | eqTickish env n1 n2 = diffExpr top env e1 e2
1987 -- The error message of failed pattern matches will contain
1988 -- generated names, which are allowed to differ.
1989 diffExpr _ _ (App (App (Var absent) _) _)
1990 (App (App (Var absent2) _) _)
1991 | isBottomingId absent && isBottomingId absent2 = []
1992 diffExpr top env (App f1 a1) (App f2 a2)
1993 = diffExpr top env f1 f2 ++ diffExpr top env a1 a2
1994 diffExpr top env (Lam b1 e1) (Lam b2 e2)
1995 | eqTypeX env (varType b1) (varType b2) -- False for Id/TyVar combination
1996 = diffExpr top (rnBndr2 env b1 b2) e1 e2
1997 diffExpr top env (Let bs1 e1) (Let bs2 e2)
1998 = let (ds, env') = diffBinds top env (flattenBinds [bs1]) (flattenBinds [bs2])
1999 in ds ++ diffExpr top env' e1 e2
2000 diffExpr top env (Case e1 b1 t1 a1) (Case e2 b2 t2 a2)
2001 | equalLength a1 a2 && not (null a1) || eqTypeX env t1 t2
2002 -- See Note [Empty case alternatives] in TrieMap
2003 = diffExpr top env e1 e2 ++ concat (zipWith diffAlt a1 a2)
2004 where env' = rnBndr2 env b1 b2
2005 diffAlt (c1, bs1, e1) (c2, bs2, e2)
2006 | c1 /= c2 = [text "alt-cons " <> ppr c1 <> text " /= " <> ppr c2]
2007 | otherwise = diffExpr top (rnBndrs2 env' bs1 bs2) e1 e2
2008 diffExpr _ _ e1 e2
2009 = [fsep [ppr e1, text "/=", ppr e2]]
2010
2011 -- | Finds differences between core bindings, see @diffExpr@.
2012 --
2013 -- The main problem here is that while we expect the binds to have the
2014 -- same order in both lists, this is not guaranteed. To do this
2015 -- properly we'd either have to do some sort of unification or check
2016 -- all possible mappings, which would be seriously expensive. So
2017 -- instead we simply match single bindings as far as we can. This
2018 -- leaves us just with mutually recursive and/or mismatching bindings,
2019 -- which we then speculatively match by ordering them. It's by no means
2020 -- perfect, but gets the job done well enough.
2021 diffBinds :: Bool -> RnEnv2 -> [(Var, CoreExpr)] -> [(Var, CoreExpr)]
2022 -> ([SDoc], RnEnv2)
2023 diffBinds top env binds1 = go (length binds1) env binds1
2024 where go _ env [] []
2025 = ([], env)
2026 go fuel env binds1 binds2
2027 -- No binds left to compare? Bail out early.
2028 | null binds1 || null binds2
2029 = (warn env binds1 binds2, env)
2030 -- Iterated over all binds without finding a match? Then
2031 -- try speculatively matching binders by order.
2032 | fuel == 0
2033 = if not $ env `inRnEnvL` fst (head binds1)
2034 then let env' = uncurry (rnBndrs2 env) $ unzip $
2035 zip (sort $ map fst binds1) (sort $ map fst binds2)
2036 in go (length binds1) env' binds1 binds2
2037 -- If we have already tried that, give up
2038 else (warn env binds1 binds2, env)
2039 go fuel env ((bndr1,expr1):binds1) binds2
2040 | let matchExpr (bndr,expr) =
2041 (not top || null (diffIdInfo env bndr bndr1)) &&
2042 null (diffExpr top (rnBndr2 env bndr1 bndr) expr1 expr)
2043 , (binds2l, (bndr2,_):binds2r) <- break matchExpr binds2
2044 = go (length binds1) (rnBndr2 env bndr1 bndr2)
2045 binds1 (binds2l ++ binds2r)
2046 | otherwise -- No match, so push back (FIXME O(n^2))
2047 = go (fuel-1) env (binds1++[(bndr1,expr1)]) binds2
2048 go _ _ _ _ = panic "diffBinds: impossible" -- GHC isn't smart enough
2049
2050 -- We have tried everything, but couldn't find a good match. So
2051 -- now we just return the comparison results when we pair up
2052 -- the binds in a pseudo-random order.
2053 warn env binds1 binds2 =
2054 concatMap (uncurry (diffBind env)) (zip binds1' binds2') ++
2055 unmatched "unmatched left-hand:" (drop l binds1') ++
2056 unmatched "unmatched right-hand:" (drop l binds2')
2057 where binds1' = sortBy (comparing fst) binds1
2058 binds2' = sortBy (comparing fst) binds2
2059 l = min (length binds1') (length binds2')
2060 unmatched _ [] = []
2061 unmatched txt bs = [text txt $$ ppr (Rec bs)]
2062 diffBind env (bndr1,expr1) (bndr2,expr2)
2063 | ds@(_:_) <- diffExpr top env expr1 expr2
2064 = locBind "in binding" bndr1 bndr2 ds
2065 | otherwise
2066 = diffIdInfo env bndr1 bndr2
2067
2068 -- | Find differences in @IdInfo@. We will especially check whether
2069 -- the unfoldings match, if present (see @diffUnfold@).
2070 diffIdInfo :: RnEnv2 -> Var -> Var -> [SDoc]
2071 diffIdInfo env bndr1 bndr2
2072 | arityInfo info1 == arityInfo info2
2073 && cafInfo info1 == cafInfo info2
2074 && oneShotInfo info1 == oneShotInfo info2
2075 && inlinePragInfo info1 == inlinePragInfo info2
2076 && occInfo info1 == occInfo info2
2077 && demandInfo info1 == demandInfo info2
2078 && callArityInfo info1 == callArityInfo info2
2079 && levityInfo info1 == levityInfo info2
2080 = locBind "in unfolding of" bndr1 bndr2 $
2081 diffUnfold env (unfoldingInfo info1) (unfoldingInfo info2)
2082 | otherwise
2083 = locBind "in Id info of" bndr1 bndr2
2084 [fsep [pprBndr LetBind bndr1, text "/=", pprBndr LetBind bndr2]]
2085 where info1 = idInfo bndr1; info2 = idInfo bndr2
2086
2087 -- | Find differences in unfoldings. Note that we will not check for
2088 -- differences of @IdInfo@ in unfoldings, as this is generally
2089 -- redundant, and can lead to an exponential blow-up in complexity.
2090 diffUnfold :: RnEnv2 -> Unfolding -> Unfolding -> [SDoc]
2091 diffUnfold _ NoUnfolding NoUnfolding = []
2092 diffUnfold _ BootUnfolding BootUnfolding = []
2093 diffUnfold _ (OtherCon cs1) (OtherCon cs2) | cs1 == cs2 = []
2094 diffUnfold env (DFunUnfolding bs1 c1 a1)
2095 (DFunUnfolding bs2 c2 a2)
2096 | c1 == c2 && equalLength bs1 bs2
2097 = concatMap (uncurry (diffExpr False env')) (zip a1 a2)
2098 where env' = rnBndrs2 env bs1 bs2
2099 diffUnfold env (CoreUnfolding t1 _ _ v1 cl1 wf1 x1 g1)
2100 (CoreUnfolding t2 _ _ v2 cl2 wf2 x2 g2)
2101 | v1 == v2 && cl1 == cl2
2102 && wf1 == wf2 && x1 == x2 && g1 == g2
2103 = diffExpr False env t1 t2
2104 diffUnfold _ uf1 uf2
2105 = [fsep [ppr uf1, text "/=", ppr uf2]]
2106
2107 -- | Add location information to diff messages
2108 locBind :: String -> Var -> Var -> [SDoc] -> [SDoc]
2109 locBind loc b1 b2 diffs = map addLoc diffs
2110 where addLoc d = d $$ nest 2 (parens (text loc <+> bindLoc))
2111 bindLoc | b1 == b2 = ppr b1
2112 | otherwise = ppr b1 <> char '/' <> ppr b2
2113
2114 {-
2115 ************************************************************************
2116 * *
2117 Eta reduction
2118 * *
2119 ************************************************************************
2120
2121 Note [Eta reduction conditions]
2122 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2123 We try for eta reduction here, but *only* if we get all the way to an
2124 trivial expression. We don't want to remove extra lambdas unless we
2125 are going to avoid allocating this thing altogether.
2126
2127 There are some particularly delicate points here:
2128
2129 * We want to eta-reduce if doing so leaves a trivial expression,
2130 *including* a cast. For example
2131 \x. f |> co --> f |> co
2132 (provided co doesn't mention x)
2133
2134 * Eta reduction is not valid in general:
2135 \x. bot /= bot
2136 This matters, partly for old-fashioned correctness reasons but,
2137 worse, getting it wrong can yield a seg fault. Consider
2138 f = \x.f x
2139 h y = case (case y of { True -> f `seq` True; False -> False }) of
2140 True -> ...; False -> ...
2141
2142 If we (unsoundly) eta-reduce f to get f=f, the strictness analyser
2143 says f=bottom, and replaces the (f `seq` True) with just
2144 (f `cast` unsafe-co). BUT, as thing stand, 'f' got arity 1, and it
2145 *keeps* arity 1 (perhaps also wrongly). So CorePrep eta-expands
2146 the definition again, so that it does not termninate after all.
2147 Result: seg-fault because the boolean case actually gets a function value.
2148 See Trac #1947.
2149
2150 So it's important to do the right thing.
2151
2152 * Note [Arity care]: we need to be careful if we just look at f's
2153 arity. Currently (Dec07), f's arity is visible in its own RHS (see
2154 Note [Arity robustness] in SimplEnv) so we must *not* trust the
2155 arity when checking that 'f' is a value. Otherwise we will
2156 eta-reduce
2157 f = \x. f x
2158 to
2159 f = f
2160 Which might change a terminating program (think (f `seq` e)) to a
2161 non-terminating one. So we check for being a loop breaker first.
2162
2163 However for GlobalIds we can look at the arity; and for primops we
2164 must, since they have no unfolding.
2165
2166 * Regardless of whether 'f' is a value, we always want to
2167 reduce (/\a -> f a) to f
2168 This came up in a RULE: foldr (build (/\a -> g a))
2169 did not match foldr (build (/\b -> ...something complex...))
2170 The type checker can insert these eta-expanded versions,
2171 with both type and dictionary lambdas; hence the slightly
2172 ad-hoc isDictId
2173
2174 * Never *reduce* arity. For example
2175 f = \xy. g x y
2176 Then if h has arity 1 we don't want to eta-reduce because then
2177 f's arity would decrease, and that is bad
2178
2179 These delicacies are why we don't use exprIsTrivial and exprIsHNF here.
2180 Alas.
2181
2182 Note [Eta reduction with casted arguments]
2183 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2184 Consider
2185 (\(x:t3). f (x |> g)) :: t3 -> t2
2186 where
2187 f :: t1 -> t2
2188 g :: t3 ~ t1
2189 This should be eta-reduced to
2190
2191 f |> (sym g -> t2)
2192
2193 So we need to accumulate a coercion, pushing it inward (past
2194 variable arguments only) thus:
2195 f (x |> co_arg) |> co --> (f |> (sym co_arg -> co)) x
2196 f (x:t) |> co --> (f |> (t -> co)) x
2197 f @ a |> co --> (f |> (forall a.co)) @ a
2198 f @ (g:t1~t2) |> co --> (f |> (t1~t2 => co)) @ (g:t1~t2)
2199 These are the equations for ok_arg.
2200
2201 It's true that we could also hope to eta reduce these:
2202 (\xy. (f x |> g) y)
2203 (\xy. (f x y) |> g)
2204 But the simplifier pushes those casts outwards, so we don't
2205 need to address that here.
2206 -}
2207
2208 tryEtaReduce :: [Var] -> CoreExpr -> Maybe CoreExpr
2209 tryEtaReduce bndrs body
2210 = go (reverse bndrs) body (mkRepReflCo (exprType body))
2211 where
2212 incoming_arity = count isId bndrs
2213
2214 go :: [Var] -- Binders, innermost first, types [a3,a2,a1]
2215 -> CoreExpr -- Of type tr
2216 -> Coercion -- Of type tr ~ ts
2217 -> Maybe CoreExpr -- Of type a1 -> a2 -> a3 -> ts
2218 -- See Note [Eta reduction with casted arguments]
2219 -- for why we have an accumulating coercion
2220 go [] fun co
2221 | ok_fun fun
2222 , let used_vars = exprFreeVars fun `unionVarSet` tyCoVarsOfCo co
2223 , not (any (`elemVarSet` used_vars) bndrs)
2224 = Just (mkCast fun co) -- Check for any of the binders free in the result
2225 -- including the accumulated coercion
2226
2227 go bs (Tick t e) co
2228 | tickishFloatable t
2229 = fmap (Tick t) $ go bs e co
2230 -- Float app ticks: \x -> Tick t (e x) ==> Tick t e
2231
2232 go (b : bs) (App fun arg) co
2233 | Just (co', ticks) <- ok_arg b arg co
2234 = fmap (flip (foldr mkTick) ticks) $ go bs fun co'
2235 -- Float arg ticks: \x -> e (Tick t x) ==> Tick t e
2236
2237 go _ _ _ = Nothing -- Failure!
2238
2239 ---------------
2240 -- Note [Eta reduction conditions]
2241 ok_fun (App fun (Type {})) = ok_fun fun
2242 ok_fun (Cast fun _) = ok_fun fun
2243 ok_fun (Tick _ expr) = ok_fun expr
2244 ok_fun (Var fun_id) = ok_fun_id fun_id || all ok_lam bndrs
2245 ok_fun _fun = False
2246
2247 ---------------
2248 ok_fun_id fun = fun_arity fun >= incoming_arity
2249
2250 ---------------
2251 fun_arity fun -- See Note [Arity care]
2252 | isLocalId fun
2253 , isStrongLoopBreaker (idOccInfo fun) = 0
2254 | arity > 0 = arity
2255 | isEvaldUnfolding (idUnfolding fun) = 1
2256 -- See Note [Eta reduction of an eval'd function]
2257 | otherwise = 0
2258 where
2259 arity = idArity fun
2260
2261 ---------------
2262 ok_lam v = isTyVar v || isEvVar v
2263
2264 ---------------
2265 ok_arg :: Var -- Of type bndr_t
2266 -> CoreExpr -- Of type arg_t
2267 -> Coercion -- Of kind (t1~t2)
2268 -> Maybe (Coercion -- Of type (arg_t -> t1 ~ bndr_t -> t2)
2269 -- (and similarly for tyvars, coercion args)
2270 , [Tickish Var])
2271 -- See Note [Eta reduction with casted arguments]
2272 ok_arg bndr (Type ty) co
2273 | Just tv <- getTyVar_maybe ty
2274 , bndr == tv = Just (mkHomoForAllCos [tv] co, [])
2275 ok_arg bndr (Var v) co
2276 | bndr == v = let reflCo = mkRepReflCo (idType bndr)
2277 in Just (mkFunCo Representational reflCo co, [])
2278 ok_arg bndr (Cast e co_arg) co
2279 | (ticks, Var v) <- stripTicksTop tickishFloatable e
2280 , bndr == v
2281 = Just (mkFunCo Representational (mkSymCo co_arg) co, ticks)
2282 -- The simplifier combines multiple casts into one,
2283 -- so we can have a simple-minded pattern match here
2284 ok_arg bndr (Tick t arg) co
2285 | tickishFloatable t, Just (co', ticks) <- ok_arg bndr arg co
2286 = Just (co', t:ticks)
2287
2288 ok_arg _ _ _ = Nothing
2289
2290 {-
2291 Note [Eta reduction of an eval'd function]
2292 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2293 In Haskell it is not true that f = \x. f x
2294 because f might be bottom, and 'seq' can distinguish them.
2295
2296 But it *is* true that f = f `seq` \x. f x
2297 and we'd like to simplify the latter to the former. This amounts
2298 to the rule that
2299 * when there is just *one* value argument,
2300 * f is not bottom
2301 we can eta-reduce \x. f x ===> f
2302
2303 This turned up in Trac #7542.
2304
2305
2306 ************************************************************************
2307 * *
2308 \subsection{Determining non-updatable right-hand-sides}
2309 * *
2310 ************************************************************************
2311
2312 Top-level constructor applications can usually be allocated
2313 statically, but they can't if the constructor, or any of the
2314 arguments, come from another DLL (because we can't refer to static
2315 labels in other DLLs).
2316
2317 If this happens we simply make the RHS into an updatable thunk,
2318 and 'execute' it rather than allocating it statically.
2319 -}
2320
2321 -- | This function is called only on *top-level* right-hand sides.
2322 -- Returns @True@ if the RHS can be allocated statically in the output,
2323 -- with no thunks involved at all.
2324 rhsIsStatic :: Platform
2325 -> (Name -> Bool) -- Which names are dynamic
2326 -> (Integer -> CoreExpr) -- Desugaring for integer literals (disgusting)
2327 -- C.f. Note [Disgusting computation of CafRefs]
2328 -- in TidyPgm
2329 -> CoreExpr -> Bool
2330 -- It's called (i) in TidyPgm.hasCafRefs to decide if the rhs is, or
2331 -- refers to, CAFs; (ii) in CoreToStg to decide whether to put an
2332 -- update flag on it and (iii) in DsExpr to decide how to expand
2333 -- list literals
2334 --
2335 -- The basic idea is that rhsIsStatic returns True only if the RHS is
2336 -- (a) a value lambda
2337 -- (b) a saturated constructor application with static args
2338 --
2339 -- BUT watch out for
2340 -- (i) Any cross-DLL references kill static-ness completely
2341 -- because they must be 'executed' not statically allocated
2342 -- ("DLL" here really only refers to Windows DLLs, on other platforms,
2343 -- this is not necessary)
2344 --
2345 -- (ii) We treat partial applications as redexes, because in fact we
2346 -- make a thunk for them that runs and builds a PAP
2347 -- at run-time. The only applications that are treated as
2348 -- static are *saturated* applications of constructors.
2349
2350 -- We used to try to be clever with nested structures like this:
2351 -- ys = (:) w ((:) w [])
2352 -- on the grounds that CorePrep will flatten ANF-ise it later.
2353 -- But supporting this special case made the function much more
2354 -- complicated, because the special case only applies if there are no
2355 -- enclosing type lambdas:
2356 -- ys = /\ a -> Foo (Baz ([] a))
2357 -- Here the nested (Baz []) won't float out to top level in CorePrep.
2358 --
2359 -- But in fact, even without -O, nested structures at top level are
2360 -- flattened by the simplifier, so we don't need to be super-clever here.
2361 --
2362 -- Examples
2363 --
2364 -- f = \x::Int. x+7 TRUE
2365 -- p = (True,False) TRUE
2366 --
2367 -- d = (fst p, False) FALSE because there's a redex inside
2368 -- (this particular one doesn't happen but...)
2369 --
2370 -- h = D# (1.0## /## 2.0##) FALSE (redex again)
2371 -- n = /\a. Nil a TRUE
2372 --
2373 -- t = /\a. (:) (case w a of ...) (Nil a) FALSE (redex)
2374 --
2375 --
2376 -- This is a bit like CoreUtils.exprIsHNF, with the following differences:
2377 -- a) scc "foo" (\x -> ...) is updatable (so we catch the right SCC)
2378 --
2379 -- b) (C x xs), where C is a constructor is updatable if the application is
2380 -- dynamic
2381 --
2382 -- c) don't look through unfolding of f in (f x).
2383
2384 rhsIsStatic platform is_dynamic_name cvt_integer rhs = is_static False rhs
2385 where
2386 is_static :: Bool -- True <=> in a constructor argument; must be atomic
2387 -> CoreExpr -> Bool
2388
2389 is_static False (Lam b e) = isRuntimeVar b || is_static False e
2390 is_static in_arg (Tick n e) = not (tickishIsCode n)
2391 && is_static in_arg e
2392 is_static in_arg (Cast e _) = is_static in_arg e
2393 is_static _ (Coercion {}) = True -- Behaves just like a literal
2394 is_static in_arg (Lit (LitInteger i _)) = is_static in_arg (cvt_integer i)
2395 is_static _ (Lit (MachLabel {})) = False
2396 is_static _ (Lit _) = True
2397 -- A MachLabel (foreign import "&foo") in an argument
2398 -- prevents a constructor application from being static. The
2399 -- reason is that it might give rise to unresolvable symbols
2400 -- in the object file: under Linux, references to "weak"
2401 -- symbols from the data segment give rise to "unresolvable
2402 -- relocation" errors at link time This might be due to a bug
2403 -- in the linker, but we'll work around it here anyway.
2404 -- SDM 24/2/2004
2405
2406 is_static in_arg other_expr = go other_expr 0
2407 where
2408 go (Var f) n_val_args
2409 | (platformOS platform /= OSMinGW32) ||
2410 not (is_dynamic_name (idName f))
2411 = saturated_data_con f n_val_args
2412 || (in_arg && n_val_args == 0)
2413 -- A naked un-applied variable is *not* deemed a static RHS
2414 -- E.g. f = g
2415 -- Reason: better to update so that the indirection gets shorted
2416 -- out, and the true value will be seen
2417 -- NB: if you change this, you'll break the invariant that THUNK_STATICs
2418 -- are always updatable. If you do so, make sure that non-updatable
2419 -- ones have enough space for their static link field!
2420
2421 go (App f a) n_val_args
2422 | isTypeArg a = go f n_val_args
2423 | not in_arg && is_static True a = go f (n_val_args + 1)
2424 -- The (not in_arg) checks that we aren't in a constructor argument;
2425 -- if we are, we don't allow (value) applications of any sort
2426 --
2427 -- NB. In case you wonder, args are sometimes not atomic. eg.
2428 -- x = D# (1.0## /## 2.0##)
2429 -- can't float because /## can fail.
2430
2431 go (Tick n f) n_val_args = not (tickishIsCode n) && go f n_val_args
2432 go (Cast e _) n_val_args = go e n_val_args
2433 go _ _ = False
2434
2435 saturated_data_con f n_val_args
2436 = case isDataConWorkId_maybe f of
2437 Just dc -> n_val_args == dataConRepArity dc
2438 Nothing -> False
2439
2440 {-
2441 ************************************************************************
2442 * *
2443 \subsection{Type utilities}
2444 * *
2445 ************************************************************************
2446 -}
2447
2448 -- | True if the type has no non-bottom elements, e.g. when it is an empty
2449 -- datatype, or a GADT with non-satisfiable type parameters, e.g. Int :~: Bool.
2450 -- See Note [Bottoming expressions]
2451 --
2452 -- See Note [No alternatives lint check] for another use of this function.
2453 isEmptyTy :: Type -> Bool
2454 isEmptyTy ty
2455 -- Data types where, given the particular type parameters, no data
2456 -- constructor matches, are empty.
2457 -- This includes data types with no constructors, e.g. Data.Void.Void.
2458 | Just (tc, inst_tys) <- splitTyConApp_maybe ty
2459 , Just dcs <- tyConDataCons_maybe tc
2460 , all (dataConCannotMatch inst_tys) dcs
2461 = True
2462 | otherwise
2463 = False
2464
2465 {-
2466 *****************************************************
2467 *
2468 * StaticPtr
2469 *
2470 *****************************************************
2471 -}
2472
2473 -- | @collectMakeStaticArgs (makeStatic t srcLoc e)@ yields
2474 -- @Just (makeStatic, t, srcLoc, e)@.
2475 --
2476 -- Returns @Nothing@ for every other expression.
2477 collectMakeStaticArgs
2478 :: CoreExpr -> Maybe (CoreExpr, Type, CoreExpr, CoreExpr)
2479 collectMakeStaticArgs e
2480 | (fun@(Var b), [Type t, loc, arg], _) <- collectArgsTicks (const True) e
2481 , idName b == makeStaticName = Just (fun, t, loc, arg)
2482 collectMakeStaticArgs _ = Nothing
2483
2484 {-
2485 ************************************************************************
2486 * *
2487 \subsection{Join points}
2488 * *
2489 ************************************************************************
2490 -}
2491
2492 -- | Does this binding bind a join point (or a recursive group of join points)?
2493 isJoinBind :: CoreBind -> Bool
2494 isJoinBind (NonRec b _) = isJoinId b
2495 isJoinBind (Rec ((b, _) : _)) = isJoinId b
2496 isJoinBind _ = False