[project @ 2004-04-02 13:34:42 by simonpj]
[ghc-hetmet.git] / ghc / compiler / coreSyn / CoreUtils.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[CoreUtils]{Utility functions on @Core@ syntax}
5
6 \begin{code}
7 module CoreUtils (
8         -- Construction
9         mkInlineMe, mkSCC, mkCoerce, mkCoerce2,
10         bindNonRec, needsCaseBinding,
11         mkIfThenElse, mkAltExpr, mkPiType, mkPiTypes,
12
13         -- Taking expressions apart
14         findDefault, findAlt,
15
16         -- Properties of expressions
17         exprType,
18         exprIsDupable, exprIsTrivial, exprIsCheap, 
19         exprIsValue,exprOkForSpeculation, exprIsBig, 
20         exprIsConApp_maybe, 
21         rhsIsStatic,
22
23         -- Arity and eta expansion
24         manifestArity, exprArity, 
25         exprEtaExpandArity, etaExpand, 
26
27         -- Size
28         coreBindsSize,
29
30         -- Hashing
31         hashExpr,
32
33         -- Equality
34         cheapEqExpr, eqExpr, applyTypeToArgs, applyTypeToArg
35     ) where
36
37 #include "HsVersions.h"
38
39
40 import GLAEXTS          -- For `xori` 
41
42 import CoreSyn
43 import PprCore          ( pprCoreExpr )
44 import Var              ( Var, isId, isTyVar )
45 import VarEnv
46 import Name             ( hashName, isDllName )
47 import Literal          ( hashLiteral, literalType, litIsDupable, 
48                           litIsTrivial, isZeroLit, Literal( MachLabel ) )
49 import DataCon          ( DataCon, dataConRepArity, dataConArgTys,
50                           isExistentialDataCon, dataConTyCon )
51 import PrimOp           ( PrimOp(..), primOpOkForSpeculation, primOpIsCheap )
52 import Id               ( Id, idType, globalIdDetails, idNewStrictness, 
53                           mkWildId, idArity, idName, idUnfolding, idInfo,
54                           isOneShotBndr, isDataConWorkId_maybe, mkSysLocal,
55                           isDataConWorkId, isBottomingId
56                         )
57 import IdInfo           ( GlobalIdDetails(..), megaSeqIdInfo )
58 import NewDemand        ( appIsBottom )
59 import Type             ( Type, mkFunTy, mkForAllTy, splitFunTy_maybe,
60                           splitFunTy,
61                           applyTys, isUnLiftedType, seqType, mkTyVarTy,
62                           splitForAllTy_maybe, isForAllTy, splitRecNewType_maybe, 
63                           splitTyConApp_maybe, eqType, funResultTy, applyTy,
64                           funResultTy, applyTy
65                         )
66 import TyCon            ( tyConArity )
67 import TysWiredIn       ( boolTy, trueDataCon, falseDataCon )
68 import CostCentre       ( CostCentre )
69 import BasicTypes       ( Arity )
70 import Unique           ( Unique )
71 import Outputable
72 import TysPrim          ( alphaTy )     -- Debugging only
73 import Util             ( equalLength, lengthAtLeast )
74 \end{code}
75
76
77 %************************************************************************
78 %*                                                                      *
79 \subsection{Find the type of a Core atom/expression}
80 %*                                                                      *
81 %************************************************************************
82
83 \begin{code}
84 exprType :: CoreExpr -> Type
85
86 exprType (Var var)              = idType var
87 exprType (Lit lit)              = literalType lit
88 exprType (Let _ body)           = exprType body
89 exprType (Case _ _ alts)        = coreAltsType alts
90 exprType (Note (Coerce ty _) e) = ty  -- **! should take usage from e
91 exprType (Note other_note e)    = exprType e
92 exprType (Lam binder expr)      = mkPiType binder (exprType expr)
93 exprType e@(App _ _)
94   = case collectArgs e of
95         (fun, args) -> applyTypeToArgs e (exprType fun) args
96
97 exprType other = pprTrace "exprType" (pprCoreExpr other) alphaTy
98
99 coreAltsType :: [CoreAlt] -> Type
100 coreAltsType ((_,_,rhs) : _) = exprType rhs
101 \end{code}
102
103 @mkPiType@ makes a (->) type or a forall type, depending on whether
104 it is given a type variable or a term variable.  We cleverly use the
105 lbvarinfo field to figure out the right annotation for the arrove in
106 case of a term variable.
107
108 \begin{code}
109 mkPiType  :: Var   -> Type -> Type      -- The more polymorphic version
110 mkPiTypes :: [Var] -> Type -> Type      --    doesn't work...
111
112 mkPiTypes vs ty = foldr mkPiType ty vs
113
114 mkPiType v ty
115    | isId v    = mkFunTy (idType v) ty
116    | otherwise = mkForAllTy v ty
117 \end{code}
118
119 \begin{code}
120 applyTypeToArg :: Type -> CoreExpr -> Type
121 applyTypeToArg fun_ty (Type arg_ty) = applyTy fun_ty arg_ty
122 applyTypeToArg fun_ty other_arg     = funResultTy fun_ty
123
124 applyTypeToArgs :: CoreExpr -> Type -> [CoreExpr] -> Type
125 -- A more efficient version of applyTypeToArg 
126 -- when we have several args
127 -- The first argument is just for debugging
128 applyTypeToArgs e op_ty [] = op_ty
129
130 applyTypeToArgs e op_ty (Type ty : args)
131   =     -- Accumulate type arguments so we can instantiate all at once
132     go [ty] args
133   where
134     go rev_tys (Type ty : args) = go (ty:rev_tys) args
135     go rev_tys rest_args        = applyTypeToArgs e op_ty' rest_args
136                                 where
137                                   op_ty' = applyTys op_ty (reverse rev_tys)
138
139 applyTypeToArgs e op_ty (other_arg : args)
140   = case (splitFunTy_maybe op_ty) of
141         Just (_, res_ty) -> applyTypeToArgs e res_ty args
142         Nothing -> pprPanic "applyTypeToArgs" (pprCoreExpr e)
143 \end{code}
144
145
146
147 %************************************************************************
148 %*                                                                      *
149 \subsection{Attaching notes}
150 %*                                                                      *
151 %************************************************************************
152
153 mkNote removes redundant coercions, and SCCs where possible
154
155 \begin{code}
156 #ifdef UNUSED
157 mkNote :: Note -> CoreExpr -> CoreExpr
158 mkNote (Coerce to_ty from_ty) expr = mkCoerce2 to_ty from_ty expr
159 mkNote (SCC cc) expr               = mkSCC cc expr
160 mkNote InlineMe expr               = mkInlineMe expr
161 mkNote note     expr               = Note note expr
162 #endif
163
164 -- Slide InlineCall in around the function
165 --      No longer necessary I think (SLPJ Apr 99)
166 -- mkNote InlineCall (App f a) = App (mkNote InlineCall f) a
167 -- mkNote InlineCall (Var v)   = Note InlineCall (Var v)
168 -- mkNote InlineCall expr      = expr
169 \end{code}
170
171 Drop trivial InlineMe's.  This is somewhat important, because if we have an unfolding
172 that looks like (Note InlineMe (Var v)), the InlineMe doesn't go away because it may
173 not be *applied* to anything.
174
175 We don't use exprIsTrivial here, though, because we sometimes generate worker/wrapper
176 bindings like
177         fw = ...
178         f  = inline_me (coerce t fw)
179 As usual, the inline_me prevents the worker from getting inlined back into the wrapper.
180 We want the split, so that the coerces can cancel at the call site.  
181
182 However, we can get left with tiresome type applications.  Notably, consider
183         f = /\ a -> let t = e in (t, w)
184 Then lifting the let out of the big lambda gives
185         t' = /\a -> e
186         f = /\ a -> let t = inline_me (t' a) in (t, w)
187 The inline_me is to stop the simplifier inlining t' right back
188 into t's RHS.  In the next phase we'll substitute for t (since
189 its rhs is trivial) and *then* we could get rid of the inline_me.
190 But it hardly seems worth it, so I don't bother.
191
192 \begin{code}
193 mkInlineMe (Var v) = Var v
194 mkInlineMe e       = Note InlineMe e
195 \end{code}
196
197
198
199 \begin{code}
200 mkCoerce :: Type -> CoreExpr -> CoreExpr
201 mkCoerce to_ty expr = mkCoerce2 to_ty (exprType expr) expr
202
203 mkCoerce2 :: Type -> Type -> CoreExpr -> CoreExpr
204 mkCoerce2 to_ty from_ty (Note (Coerce to_ty2 from_ty2) expr)
205   = ASSERT( from_ty `eqType` to_ty2 )
206     mkCoerce2 to_ty from_ty2 expr
207
208 mkCoerce2 to_ty from_ty expr
209   | to_ty `eqType` from_ty = expr
210   | otherwise              = ASSERT( from_ty `eqType` exprType expr )
211                              Note (Coerce to_ty from_ty) expr
212 \end{code}
213
214 \begin{code}
215 mkSCC :: CostCentre -> Expr b -> Expr b
216         -- Note: Nested SCC's *are* preserved for the benefit of
217         --       cost centre stack profiling
218 mkSCC cc (Lit lit)          = Lit lit
219 mkSCC cc (Lam x e)          = Lam x (mkSCC cc e)  -- Move _scc_ inside lambda
220 mkSCC cc (Note (SCC cc') e) = Note (SCC cc) (Note (SCC cc') e)
221 mkSCC cc (Note n e)         = Note n (mkSCC cc e) -- Move _scc_ inside notes
222 mkSCC cc expr               = Note (SCC cc) expr
223 \end{code}
224
225
226 %************************************************************************
227 %*                                                                      *
228 \subsection{Other expression construction}
229 %*                                                                      *
230 %************************************************************************
231
232 \begin{code}
233 bindNonRec :: Id -> CoreExpr -> CoreExpr -> CoreExpr
234 -- (bindNonRec x r b) produces either
235 --      let x = r in b
236 -- or
237 --      case r of x { _DEFAULT_ -> b }
238 --
239 -- depending on whether x is unlifted or not
240 -- It's used by the desugarer to avoid building bindings
241 -- that give Core Lint a heart attack.  Actually the simplifier
242 -- deals with them perfectly well.
243 bindNonRec bndr rhs body 
244   | needsCaseBinding (idType bndr) rhs = Case rhs bndr [(DEFAULT,[],body)]
245   | otherwise                          = Let (NonRec bndr rhs) body
246
247 needsCaseBinding ty rhs = isUnLiftedType ty && not (exprOkForSpeculation rhs)
248         -- Make a case expression instead of a let
249         -- These can arise either from the desugarer,
250         -- or from beta reductions: (\x.e) (x +# y)
251 \end{code}
252
253 \begin{code}
254 mkAltExpr :: AltCon -> [CoreBndr] -> [Type] -> CoreExpr
255         -- This guy constructs the value that the scrutinee must have
256         -- when you are in one particular branch of a case
257 mkAltExpr (DataAlt con) args inst_tys
258   = mkConApp con (map Type inst_tys ++ map varToCoreExpr args)
259 mkAltExpr (LitAlt lit) [] []
260   = Lit lit
261
262 mkIfThenElse :: CoreExpr -> CoreExpr -> CoreExpr -> CoreExpr
263 mkIfThenElse guard then_expr else_expr
264   = Case guard (mkWildId boolTy) 
265          [ (DataAlt trueDataCon,  [], then_expr),
266            (DataAlt falseDataCon, [], else_expr) ]
267 \end{code}
268
269
270 %************************************************************************
271 %*                                                                      *
272 \subsection{Taking expressions apart}
273 %*                                                                      *
274 %************************************************************************
275
276 The default alternative must be first, if it exists at all.
277 This makes it easy to find, though it makes matching marginally harder.
278
279 \begin{code}
280 findDefault :: [CoreAlt] -> ([CoreAlt], Maybe CoreExpr)
281 findDefault ((DEFAULT,args,rhs) : alts) = ASSERT( null args ) (alts, Just rhs)
282 findDefault alts                        =                     (alts, Nothing)
283
284 findAlt :: AltCon -> [CoreAlt] -> CoreAlt
285 findAlt con alts
286   = case alts of
287         (deflt@(DEFAULT,_,_):alts) -> go alts deflt
288         other                      -> go alts panic_deflt
289
290   where
291     panic_deflt = pprPanic "Missing alternative" (ppr con $$ vcat (map ppr alts))
292
293     go []                      deflt               = deflt
294     go (alt@(con1,_,_) : alts) deflt | con == con1 = alt
295                                      | otherwise   = ASSERT( not (con1 == DEFAULT) )
296                                                      go alts deflt
297 \end{code}
298
299
300 %************************************************************************
301 %*                                                                      *
302 \subsection{Figuring out things about expressions}
303 %*                                                                      *
304 %************************************************************************
305
306 @exprIsTrivial@ is true of expressions we are unconditionally happy to
307                 duplicate; simple variables and constants, and type
308                 applications.  Note that primop Ids aren't considered
309                 trivial unless 
310
311 @exprIsBottom@  is true of expressions that are guaranteed to diverge
312
313
314 There used to be a gruesome test for (hasNoBinding v) in the
315 Var case:
316         exprIsTrivial (Var v) | hasNoBinding v = idArity v == 0
317 The idea here is that a constructor worker, like $wJust, is
318 really short for (\x -> $wJust x), becuase $wJust has no binding.
319 So it should be treated like a lambda.  Ditto unsaturated primops.
320 But now constructor workers are not "have-no-binding" Ids.  And
321 completely un-applied primops and foreign-call Ids are sufficiently
322 rare that I plan to allow them to be duplicated and put up with
323 saturating them.
324
325 SCC notes.  We do not treat (_scc_ "foo" x) as trivial, because 
326   a) it really generates code, (and a heap object when it's 
327      a function arg) to capture the cost centre
328   b) see the note [SCC-and-exprIsTrivial] in Simplify.simplLazyBind
329
330 \begin{code}
331 exprIsTrivial (Var v)      = True       -- See notes above
332 exprIsTrivial (Type _)     = True
333 exprIsTrivial (Lit lit)    = litIsTrivial lit
334 exprIsTrivial (App e arg)  = not (isRuntimeArg arg) && exprIsTrivial e
335 exprIsTrivial (Note (SCC _) e) = False          -- See notes above
336 exprIsTrivial (Note _       e) = exprIsTrivial e
337 exprIsTrivial (Lam b body) = not (isRuntimeVar b) && exprIsTrivial body
338 exprIsTrivial other        = False
339 \end{code}
340
341
342 @exprIsDupable@ is true of expressions that can be duplicated at a modest
343                 cost in code size.  This will only happen in different case
344                 branches, so there's no issue about duplicating work.
345
346                 That is, exprIsDupable returns True of (f x) even if
347                 f is very very expensive to call.
348
349                 Its only purpose is to avoid fruitless let-binding
350                 and then inlining of case join points
351
352
353 \begin{code}
354 exprIsDupable (Type _)          = True
355 exprIsDupable (Var v)           = True
356 exprIsDupable (Lit lit)         = litIsDupable lit
357 exprIsDupable (Note InlineMe e) = True
358 exprIsDupable (Note _ e)        = exprIsDupable e
359 exprIsDupable expr           
360   = go expr 0
361   where
362     go (Var v)   n_args = True
363     go (App f a) n_args =  n_args < dupAppSize
364                         && exprIsDupable a
365                         && go f (n_args+1)
366     go other n_args     = False
367
368 dupAppSize :: Int
369 dupAppSize = 4          -- Size of application we are prepared to duplicate
370 \end{code}
371
372 @exprIsCheap@ looks at a Core expression and returns \tr{True} if
373 it is obviously in weak head normal form, or is cheap to get to WHNF.
374 [Note that that's not the same as exprIsDupable; an expression might be
375 big, and hence not dupable, but still cheap.]
376
377 By ``cheap'' we mean a computation we're willing to:
378         push inside a lambda, or
379         inline at more than one place
380 That might mean it gets evaluated more than once, instead of being
381 shared.  The main examples of things which aren't WHNF but are
382 ``cheap'' are:
383
384   *     case e of
385           pi -> ei
386         (where e, and all the ei are cheap)
387
388   *     let x = e in b
389         (where e and b are cheap)
390
391   *     op x1 ... xn
392         (where op is a cheap primitive operator)
393
394   *     error "foo"
395         (because we are happy to substitute it inside a lambda)
396
397 Notice that a variable is considered 'cheap': we can push it inside a lambda,
398 because sharing will make sure it is only evaluated once.
399
400 \begin{code}
401 exprIsCheap :: CoreExpr -> Bool
402 exprIsCheap (Lit lit)             = True
403 exprIsCheap (Type _)              = True
404 exprIsCheap (Var _)               = True
405 exprIsCheap (Note InlineMe e)     = True
406 exprIsCheap (Note _ e)            = exprIsCheap e
407 exprIsCheap (Lam x e)             = isRuntimeVar x || exprIsCheap e
408 exprIsCheap (Case e _ alts)       = exprIsCheap e && 
409                                     and [exprIsCheap rhs | (_,_,rhs) <- alts]
410         -- Experimentally, treat (case x of ...) as cheap
411         -- (and case __coerce x etc.)
412         -- This improves arities of overloaded functions where
413         -- there is only dictionary selection (no construction) involved
414 exprIsCheap (Let (NonRec x _) e)  
415       | isUnLiftedType (idType x) = exprIsCheap e
416       | otherwise                 = False
417         -- strict lets always have cheap right hand sides, and
418         -- do no allocation.
419
420 exprIsCheap other_expr 
421   = go other_expr 0 True
422   where
423     go (Var f) n_args args_cheap 
424         = (idAppIsCheap f n_args && args_cheap)
425                         -- A constructor, cheap primop, or partial application
426
427           || idAppIsBottom f n_args 
428                         -- Application of a function which
429                         -- always gives bottom; we treat this as cheap
430                         -- because it certainly doesn't need to be shared!
431         
432     go (App f a) n_args args_cheap 
433         | not (isRuntimeArg a) = go f n_args      args_cheap
434         | otherwise            = go f (n_args + 1) (exprIsCheap a && args_cheap)
435
436     go other   n_args args_cheap = False
437
438 idAppIsCheap :: Id -> Int -> Bool
439 idAppIsCheap id n_val_args 
440   | n_val_args == 0 = True      -- Just a type application of
441                                 -- a variable (f t1 t2 t3)
442                                 -- counts as WHNF
443   | otherwise = case globalIdDetails id of
444                   DataConWorkId _ -> True                       
445                   RecordSelId _   -> True       -- I'm experimenting with making record selection
446                   ClassOpId _     -> True       -- look cheap, so we will substitute it inside a
447                                                 -- lambda.  Particularly for dictionary field selection
448
449                   PrimOpId op   -> primOpIsCheap op     -- In principle we should worry about primops
450                                                         -- that return a type variable, since the result
451                                                         -- might be applied to something, but I'm not going
452                                                         -- to bother to check the number of args
453                   other       -> n_val_args < idArity id
454 \end{code}
455
456 exprOkForSpeculation returns True of an expression that it is
457
458         * safe to evaluate even if normal order eval might not 
459           evaluate the expression at all, or
460
461         * safe *not* to evaluate even if normal order would do so
462
463 It returns True iff
464
465         the expression guarantees to terminate, 
466         soon, 
467         without raising an exception,
468         without causing a side effect (e.g. writing a mutable variable)
469
470 E.G.
471         let x = case y# +# 1# of { r# -> I# r# }
472         in E
473 ==>
474         case y# +# 1# of { r# -> 
475         let x = I# r#
476         in E 
477         }
478
479 We can only do this if the (y+1) is ok for speculation: it has no
480 side effects, and can't diverge or raise an exception.
481
482 \begin{code}
483 exprOkForSpeculation :: CoreExpr -> Bool
484 exprOkForSpeculation (Lit _)    = True
485 exprOkForSpeculation (Type _)   = True
486 exprOkForSpeculation (Var v)    = isUnLiftedType (idType v)
487 exprOkForSpeculation (Note _ e) = exprOkForSpeculation e
488 exprOkForSpeculation other_expr
489   = case collectArgs other_expr of
490         (Var f, args) -> spec_ok (globalIdDetails f) args
491         other         -> False
492  
493   where
494     spec_ok (DataConWorkId _) args
495       = True    -- The strictness of the constructor has already
496                 -- been expressed by its "wrapper", so we don't need
497                 -- to take the arguments into account
498
499     spec_ok (PrimOpId op) args
500       | isDivOp op,             -- Special case for dividing operations that fail
501         [arg1, Lit lit] <- args -- only if the divisor is zero
502       = not (isZeroLit lit) && exprOkForSpeculation arg1
503                 -- Often there is a literal divisor, and this 
504                 -- can get rid of a thunk in an inner looop
505
506       | otherwise
507       = primOpOkForSpeculation op && 
508         all exprOkForSpeculation args
509                                 -- A bit conservative: we don't really need
510                                 -- to care about lazy arguments, but this is easy
511
512     spec_ok other args = False
513
514 isDivOp :: PrimOp -> Bool
515 -- True of dyadic operators that can fail 
516 -- only if the second arg is zero
517 -- This function probably belongs in PrimOp, or even in 
518 -- an automagically generated file.. but it's such a 
519 -- special case I thought I'd leave it here for now.
520 isDivOp IntQuotOp        = True
521 isDivOp IntRemOp         = True
522 isDivOp WordQuotOp       = True
523 isDivOp WordRemOp        = True
524 isDivOp IntegerQuotRemOp = True
525 isDivOp IntegerDivModOp  = True
526 isDivOp FloatDivOp       = True
527 isDivOp DoubleDivOp      = True
528 isDivOp other            = False
529 \end{code}
530
531
532 \begin{code}
533 exprIsBottom :: CoreExpr -> Bool        -- True => definitely bottom
534 exprIsBottom e = go 0 e
535                where
536                 -- n is the number of args
537                  go n (Note _ e)   = go n e
538                  go n (Let _ e)    = go n e
539                  go n (Case e _ _) = go 0 e     -- Just check the scrut
540                  go n (App e _)    = go (n+1) e
541                  go n (Var v)      = idAppIsBottom v n
542                  go n (Lit _)      = False
543                  go n (Lam _ _)    = False
544
545 idAppIsBottom :: Id -> Int -> Bool
546 idAppIsBottom id n_val_args = appIsBottom (idNewStrictness id) n_val_args
547 \end{code}
548
549 @exprIsValue@ returns true for expressions that are certainly *already* 
550 evaluated to *head* normal form.  This is used to decide whether it's ok 
551 to change
552
553         case x of _ -> e   ===>   e
554
555 and to decide whether it's safe to discard a `seq`
556
557 So, it does *not* treat variables as evaluated, unless they say they are.
558
559 But it *does* treat partial applications and constructor applications
560 as values, even if their arguments are non-trivial, provided the argument
561 type is lifted; 
562         e.g.  (:) (f x) (map f xs)      is a value
563               map (...redex...)         is a value
564 Because `seq` on such things completes immediately
565
566 For unlifted argument types, we have to be careful:
567                 C (f x :: Int#)
568 Suppose (f x) diverges; then C (f x) is not a value.  True, but
569 this form is illegal (see the invariants in CoreSyn).  Args of unboxed
570 type must be ok-for-speculation (or trivial).
571
572 \begin{code}
573 exprIsValue :: CoreExpr -> Bool         -- True => Value-lambda, constructor, PAP
574 exprIsValue (Var v)     -- NB: There are no value args at this point
575   =  isDataConWorkId v  -- Catches nullary constructors, 
576                         --      so that [] and () are values, for example
577   || idArity v > 0      -- Catches (e.g.) primops that don't have unfoldings
578   || isEvaldUnfolding (idUnfolding v)
579         -- Check the thing's unfolding; it might be bound to a value
580         -- A worry: what if an Id's unfolding is just itself: 
581         -- then we could get an infinite loop...
582
583 exprIsValue (Lit l)          = True
584 exprIsValue (Type ty)        = True     -- Types are honorary Values; 
585                                         -- we don't mind copying them
586 exprIsValue (Lam b e)        = isRuntimeVar b || exprIsValue e
587 exprIsValue (Note _ e)       = exprIsValue e
588 exprIsValue (App e (Type _)) = exprIsValue e
589 exprIsValue (App e a)        = app_is_value e [a]
590 exprIsValue other            = False
591
592 -- There is at least one value argument
593 app_is_value (Var fun) args
594   |  isDataConWorkId fun                        -- Constructor apps are values
595   || idArity fun > valArgCount args     -- Under-applied function
596   = check_args (idType fun) args
597 app_is_value (App f a) as = app_is_value f (a:as)
598 app_is_value other     as = False
599
600         -- 'check_args' checks that unlifted-type args
601         -- are in fact guaranteed non-divergent
602 check_args fun_ty []              = True
603 check_args fun_ty (Type _ : args) = case splitForAllTy_maybe fun_ty of
604                                       Just (_, ty) -> check_args ty args
605 check_args fun_ty (arg : args)
606   | isUnLiftedType arg_ty = exprOkForSpeculation arg
607   | otherwise             = check_args res_ty args
608   where
609     (arg_ty, res_ty) = splitFunTy fun_ty
610 \end{code}
611
612 \begin{code}
613 exprIsConApp_maybe :: CoreExpr -> Maybe (DataCon, [CoreExpr])
614 exprIsConApp_maybe (Note (Coerce to_ty from_ty) expr)
615   =     -- Maybe this is over the top, but here we try to turn
616         --      coerce (S,T) ( x, y )
617         -- effectively into 
618         --      ( coerce S x, coerce T y )
619         -- This happens in anger in PrelArrExts which has a coerce
620         --      case coerce memcpy a b of
621         --        (# r, s #) -> ...
622         -- where the memcpy is in the IO monad, but the call is in
623         -- the (ST s) monad
624     case exprIsConApp_maybe expr of {
625         Nothing           -> Nothing ;
626         Just (dc, args)   -> 
627   
628     case splitTyConApp_maybe to_ty of {
629         Nothing -> Nothing ;
630         Just (tc, tc_arg_tys) | tc /= dataConTyCon dc   -> Nothing
631                               | isExistentialDataCon dc -> Nothing
632                               | otherwise               ->
633                 -- Type constructor must match
634                 -- We knock out existentials to keep matters simple(r)
635     let
636         arity            = tyConArity tc
637         val_args         = drop arity args
638         to_arg_tys       = dataConArgTys dc tc_arg_tys
639         mk_coerce ty arg = mkCoerce ty arg
640         new_val_args     = zipWith mk_coerce to_arg_tys val_args
641     in
642     ASSERT( all isTypeArg (take arity args) )
643     ASSERT( equalLength val_args to_arg_tys )
644     Just (dc, map Type tc_arg_tys ++ new_val_args)
645     }}
646
647 exprIsConApp_maybe (Note _ expr)
648   = exprIsConApp_maybe expr
649     -- We ignore InlineMe notes in case we have
650     --  x = __inline_me__ (a,b)
651     -- All part of making sure that INLINE pragmas never hurt
652     -- Marcin tripped on this one when making dictionaries more inlinable
653     --
654     -- In fact, we ignore all notes.  For example,
655     --          case _scc_ "foo" (C a b) of
656     --                  C a b -> e
657     -- should be optimised away, but it will be only if we look
658     -- through the SCC note.
659
660 exprIsConApp_maybe expr = analyse (collectArgs expr)
661   where
662     analyse (Var fun, args)
663         | Just con <- isDataConWorkId_maybe fun,
664           args `lengthAtLeast` dataConRepArity con
665                 -- Might be > because the arity excludes type args
666         = Just (con,args)
667
668         -- Look through unfoldings, but only cheap ones, because
669         -- we are effectively duplicating the unfolding
670     analyse (Var fun, [])
671         | let unf = idUnfolding fun,
672           isCheapUnfolding unf
673         = exprIsConApp_maybe (unfoldingTemplate unf)
674
675     analyse other = Nothing
676 \end{code}
677
678
679
680 %************************************************************************
681 %*                                                                      *
682 \subsection{Eta reduction and expansion}
683 %*                                                                      *
684 %************************************************************************
685
686 \begin{code}
687 exprEtaExpandArity :: CoreExpr -> Arity
688 {- The Arity returned is the number of value args the 
689    thing can be applied to without doing much work
690
691 exprEtaExpandArity is used when eta expanding
692         e  ==>  \xy -> e x y
693
694 It returns 1 (or more) to:
695         case x of p -> \s -> ...
696 because for I/O ish things we really want to get that \s to the top.
697 We are prepared to evaluate x each time round the loop in order to get that
698
699 It's all a bit more subtle than it looks:
700
701 1.  One-shot lambdas
702
703 Consider one-shot lambdas
704                 let x = expensive in \y z -> E
705 We want this to have arity 2 if the \y-abstraction is a 1-shot lambda
706 Hence the ArityType returned by arityType
707
708 2.  The state-transformer hack
709
710 The one-shot lambda special cause is particularly important/useful for
711 IO state transformers, where we often get
712         let x = E in \ s -> ...
713
714 and the \s is a real-world state token abstraction.  Such abstractions
715 are almost invariably 1-shot, so we want to pull the \s out, past the
716 let x=E, even if E is expensive.  So we treat state-token lambdas as 
717 one-shot even if they aren't really.  The hack is in Id.isOneShotBndr.
718
719 3.  Dealing with bottom
720
721 Consider also 
722         f = \x -> error "foo"
723 Here, arity 1 is fine.  But if it is
724         f = \x -> case x of 
725                         True  -> error "foo"
726                         False -> \y -> x+y
727 then we want to get arity 2.  Tecnically, this isn't quite right, because
728         (f True) `seq` 1
729 should diverge, but it'll converge if we eta-expand f.  Nevertheless, we
730 do so; it improves some programs significantly, and increasing convergence
731 isn't a bad thing.  Hence the ABot/ATop in ArityType.
732
733 Actually, the situation is worse.  Consider
734         f = \x -> case x of
735                         True  -> \y -> x+y
736                         False -> \y -> x-y
737 Can we eta-expand here?  At first the answer looks like "yes of course", but
738 consider
739         (f bot) `seq` 1
740 This should diverge!  But if we eta-expand, it won't.   Again, we ignore this
741 "problem", because being scrupulous would lose an important transformation for
742 many programs.
743 -}
744
745
746 exprEtaExpandArity e = arityDepth (arityType e)
747
748 -- A limited sort of function type
749 data ArityType = AFun Bool ArityType    -- True <=> one-shot
750                | ATop                   -- Know nothing
751                | ABot                   -- Diverges
752
753 arityDepth :: ArityType -> Arity
754 arityDepth (AFun _ ty) = 1 + arityDepth ty
755 arityDepth ty          = 0
756
757 andArityType ABot           at2           = at2
758 andArityType ATop           at2           = ATop
759 andArityType (AFun t1 at1)  (AFun t2 at2) = AFun (t1 && t2) (andArityType at1 at2)
760 andArityType at1            at2           = andArityType at2 at1
761
762 arityType :: CoreExpr -> ArityType
763         -- (go1 e) = [b1,..,bn]
764         -- means expression can be rewritten \x_b1 -> ... \x_bn -> body
765         -- where bi is True <=> the lambda is one-shot
766
767 arityType (Note n e) = arityType e
768 --      Not needed any more: etaExpand is cleverer
769 --  | ok_note n = arityType e
770 --  | otherwise = ATop
771
772 arityType (Var v) 
773   = mk (idArity v)
774   where
775     mk :: Arity -> ArityType
776     mk 0 | isBottomingId v  = ABot
777          | otherwise        = ATop
778     mk n                    = AFun False (mk (n-1))
779
780                         -- When the type of the Id encodes one-shot-ness,
781                         -- use the idinfo here
782
783         -- Lambdas; increase arity
784 arityType (Lam x e) | isId x    = AFun (isOneShotBndr x) (arityType e)
785                     | otherwise = arityType e
786
787         -- Applications; decrease arity
788 arityType (App f (Type _)) = arityType f
789 arityType (App f a)        = case arityType f of
790                                 AFun one_shot xs | exprIsCheap a -> xs
791                                 other                            -> ATop
792                                                            
793         -- Case/Let; keep arity if either the expression is cheap
794         -- or it's a 1-shot lambda
795         -- The former is not really right for Haskell
796         --      f x = case x of { (a,b) -> \y. e }
797         --  ===>
798         --      f x y = case x of { (a,b) -> e }
799         -- The difference is observable using 'seq'
800 arityType (Case scrut _ alts) = case foldr1 andArityType [arityType rhs | (_,_,rhs) <- alts] of
801                                   xs@(AFun one_shot _) | one_shot -> xs
802                                   xs | exprIsCheap scrut          -> xs
803                                      | otherwise                  -> ATop
804
805 arityType (Let b e) = case arityType e of
806                         xs@(AFun one_shot _) | one_shot                       -> xs
807                         xs                   | all exprIsCheap (rhssOfBind b) -> xs
808                                              | otherwise                      -> ATop
809
810 arityType other = ATop
811
812 {- NOT NEEDED ANY MORE: etaExpand is cleverer
813 ok_note InlineMe = False
814 ok_note other    = True
815     -- Notice that we do not look through __inline_me__
816     -- This may seem surprising, but consider
817     --          f = _inline_me (\x -> e)
818     -- We DO NOT want to eta expand this to
819     --          f = \x -> (_inline_me (\x -> e)) x
820     -- because the _inline_me gets dropped now it is applied, 
821     -- giving just
822     --          f = \x -> e
823     -- A Bad Idea
824 -}
825 \end{code}
826
827
828 \begin{code}
829 etaExpand :: Arity              -- Result should have this number of value args
830           -> [Unique]
831           -> CoreExpr -> Type   -- Expression and its type
832           -> CoreExpr
833 -- (etaExpand n us e ty) returns an expression with 
834 -- the same meaning as 'e', but with arity 'n'.  
835 --
836 -- Given e' = etaExpand n us e ty
837 -- We should have
838 --      ty = exprType e = exprType e'
839 --
840 -- Note that SCCs are not treated specially.  If we have
841 --      etaExpand 2 (\x -> scc "foo" e)
842 --      = (\xy -> (scc "foo" e) y)
843 -- So the costs of evaluating 'e' (not 'e y') are attributed to "foo"
844
845 etaExpand n us expr ty
846   | manifestArity expr >= n = expr              -- The no-op case
847   | otherwise               = eta_expand n us expr ty
848   where
849
850 -- manifestArity sees how many leading value lambdas there are
851 manifestArity :: CoreExpr -> Arity
852 manifestArity (Lam v e) | isId v    = 1 + manifestArity e
853                         | otherwise = manifestArity e
854 manifestArity (Note _ e)            = manifestArity e
855 manifestArity e                     = 0
856
857 -- etaExpand deals with for-alls. For example:
858 --              etaExpand 1 E
859 -- where  E :: forall a. a -> a
860 -- would return
861 --      (/\b. \y::a -> E b y)
862 --
863 -- It deals with coerces too, though they are now rare
864 -- so perhaps the extra code isn't worth it
865
866 eta_expand n us expr ty
867   | n == 0 && 
868     -- The ILX code generator requires eta expansion for type arguments
869     -- too, but alas the 'n' doesn't tell us how many of them there 
870     -- may be.  So we eagerly eta expand any big lambdas, and just
871     -- cross our fingers about possible loss of sharing in the ILX case. 
872     -- The Right Thing is probably to make 'arity' include
873     -- type variables throughout the compiler.  (ToDo.)
874     not (isForAllTy ty) 
875     -- Saturated, so nothing to do
876   = expr
877
878         -- Short cut for the case where there already
879         -- is a lambda; no point in gratuitously adding more
880 eta_expand n us (Lam v body) ty
881   | isTyVar v
882   = Lam v (eta_expand n us body (applyTy ty (mkTyVarTy v)))
883
884   | otherwise
885   = Lam v (eta_expand (n-1) us body (funResultTy ty))
886
887 -- We used to have a special case that stepped inside Coerces here,
888 -- thus:  eta_expand n us (Note note@(Coerce _ ty) e) _  
889 --              = Note note (eta_expand n us e ty)
890 -- BUT this led to an infinite loop
891 -- Example:     newtype T = MkT (Int -> Int)
892 --      eta_expand 1 (coerce (Int->Int) e)
893 --      --> coerce (Int->Int) (eta_expand 1 T e)
894 --              by the bogus eqn
895 --      --> coerce (Int->Int) (coerce T 
896 --              (\x::Int -> eta_expand 1 (coerce (Int->Int) e)))
897 --              by the splitNewType_maybe case below
898 --      and round we go
899
900 eta_expand n us expr ty
901   = case splitForAllTy_maybe ty of { 
902           Just (tv,ty') -> Lam tv (eta_expand n us (App expr (Type (mkTyVarTy tv))) ty')
903
904         ; Nothing ->
905   
906         case splitFunTy_maybe ty of {
907           Just (arg_ty, res_ty) -> Lam arg1 (eta_expand (n-1) us2 (App expr (Var arg1)) res_ty)
908                                 where
909                                    arg1       = mkSysLocal FSLIT("eta") uniq arg_ty
910                                    (uniq:us2) = us
911                                    
912         ; Nothing ->
913
914                 -- Given this:
915                 --      newtype T = MkT ([T] -> Int)
916                 -- Consider eta-expanding this
917                 --      eta_expand 1 e T
918                 -- We want to get
919                 --      coerce T (\x::[T] -> (coerce ([T]->Int) e) x)
920                 -- Only try this for recursive newtypes; the non-recursive kind
921                 -- are transparent anyway
922
923         case splitRecNewType_maybe ty of {
924           Just ty' -> mkCoerce2 ty ty' (eta_expand n us (mkCoerce2 ty' ty expr) ty') ;
925           Nothing  -> pprTrace "Bad eta expand" (ppr n $$ ppr expr $$ ppr ty) expr
926         }}}
927 \end{code}
928
929 exprArity is a cheap-and-cheerful version of exprEtaExpandArity.
930 It tells how many things the expression can be applied to before doing
931 any work.  It doesn't look inside cases, lets, etc.  The idea is that
932 exprEtaExpandArity will do the hard work, leaving something that's easy
933 for exprArity to grapple with.  In particular, Simplify uses exprArity to
934 compute the ArityInfo for the Id. 
935
936 Originally I thought that it was enough just to look for top-level lambdas, but
937 it isn't.  I've seen this
938
939         foo = PrelBase.timesInt
940
941 We want foo to get arity 2 even though the eta-expander will leave it
942 unchanged, in the expectation that it'll be inlined.  But occasionally it
943 isn't, because foo is blacklisted (used in a rule).  
944
945 Similarly, see the ok_note check in exprEtaExpandArity.  So 
946         f = __inline_me (\x -> e)
947 won't be eta-expanded.
948
949 And in any case it seems more robust to have exprArity be a bit more intelligent.
950 But note that   (\x y z -> f x y z)
951 should have arity 3, regardless of f's arity.
952
953 \begin{code}
954 exprArity :: CoreExpr -> Arity
955 exprArity e = go e
956             where
957               go (Var v)                   = idArity v
958               go (Lam x e) | isId x        = go e + 1
959                            | otherwise     = go e
960               go (Note n e)                = go e
961               go (App e (Type t))          = go e
962               go (App f a) | exprIsCheap a = (go f - 1) `max` 0
963                 -- NB: exprIsCheap a!  
964                 --      f (fac x) does not have arity 2, 
965                 --      even if f has arity 3!
966                 -- NB: `max 0`!  (\x y -> f x) has arity 2, even if f is
967                 --               unknown, hence arity 0
968               go _                         = 0
969 \end{code}
970
971 %************************************************************************
972 %*                                                                      *
973 \subsection{Equality}
974 %*                                                                      *
975 %************************************************************************
976
977 @cheapEqExpr@ is a cheap equality test which bales out fast!
978         True  => definitely equal
979         False => may or may not be equal
980
981 \begin{code}
982 cheapEqExpr :: Expr b -> Expr b -> Bool
983
984 cheapEqExpr (Var v1)   (Var v2)   = v1==v2
985 cheapEqExpr (Lit lit1) (Lit lit2) = lit1 == lit2
986 cheapEqExpr (Type t1)  (Type t2)  = t1 `eqType` t2
987
988 cheapEqExpr (App f1 a1) (App f2 a2)
989   = f1 `cheapEqExpr` f2 && a1 `cheapEqExpr` a2
990
991 cheapEqExpr _ _ = False
992
993 exprIsBig :: Expr b -> Bool
994 -- Returns True of expressions that are too big to be compared by cheapEqExpr
995 exprIsBig (Lit _)      = False
996 exprIsBig (Var v)      = False
997 exprIsBig (Type t)     = False
998 exprIsBig (App f a)    = exprIsBig f || exprIsBig a
999 exprIsBig other        = True
1000 \end{code}
1001
1002
1003 \begin{code}
1004 eqExpr :: CoreExpr -> CoreExpr -> Bool
1005         -- Works ok at more general type, but only needed at CoreExpr
1006         -- Used in rule matching, so when we find a type we use
1007         -- eqTcType, which doesn't look through newtypes
1008         -- [And it doesn't risk falling into a black hole either.]
1009 eqExpr e1 e2
1010   = eq emptyVarEnv e1 e2
1011   where
1012   -- The "env" maps variables in e1 to variables in ty2
1013   -- So when comparing lambdas etc, 
1014   -- we in effect substitute v2 for v1 in e1 before continuing
1015     eq env (Var v1) (Var v2) = case lookupVarEnv env v1 of
1016                                   Just v1' -> v1' == v2
1017                                   Nothing  -> v1  == v2
1018
1019     eq env (Lit lit1)   (Lit lit2)   = lit1 == lit2
1020     eq env (App f1 a1)  (App f2 a2)  = eq env f1 f2 && eq env a1 a2
1021     eq env (Lam v1 e1)  (Lam v2 e2)  = eq (extendVarEnv env v1 v2) e1 e2
1022     eq env (Let (NonRec v1 r1) e1)
1023            (Let (NonRec v2 r2) e2)   = eq env r1 r2 && eq (extendVarEnv env v1 v2) e1 e2
1024     eq env (Let (Rec ps1) e1)
1025            (Let (Rec ps2) e2)        = equalLength ps1 ps2 &&
1026                                        and (zipWith eq_rhs ps1 ps2) &&
1027                                        eq env' e1 e2
1028                                      where
1029                                        env' = extendVarEnvList env [(v1,v2) | ((v1,_),(v2,_)) <- zip ps1 ps2]
1030                                        eq_rhs (_,r1) (_,r2) = eq env' r1 r2
1031     eq env (Case e1 v1 a1)
1032            (Case e2 v2 a2)           = eq env e1 e2 &&
1033                                        equalLength a1 a2 &&
1034                                        and (zipWith (eq_alt env') a1 a2)
1035                                      where
1036                                        env' = extendVarEnv env v1 v2
1037
1038     eq env (Note n1 e1) (Note n2 e2) = eq_note env n1 n2 && eq env e1 e2
1039     eq env (Type t1)    (Type t2)    = t1 `eqType` t2
1040     eq env e1           e2           = False
1041                                          
1042     eq_list env []       []       = True
1043     eq_list env (e1:es1) (e2:es2) = eq env e1 e2 && eq_list env es1 es2
1044     eq_list env es1      es2      = False
1045     
1046     eq_alt env (c1,vs1,r1) (c2,vs2,r2) = c1==c2 &&
1047                                          eq (extendVarEnvList env (vs1 `zip` vs2)) r1 r2
1048
1049     eq_note env (SCC cc1)      (SCC cc2)      = cc1 == cc2
1050     eq_note env (Coerce t1 f1) (Coerce t2 f2) = t1 `eqType` t2 && f1 `eqType` f2
1051     eq_note env InlineCall     InlineCall     = True
1052     eq_note env (CoreNote s1)  (CoreNote s2)  = s1 == s2
1053     eq_note env other1         other2         = False
1054 \end{code}
1055
1056
1057 %************************************************************************
1058 %*                                                                      *
1059 \subsection{The size of an expression}
1060 %*                                                                      *
1061 %************************************************************************
1062
1063 \begin{code}
1064 coreBindsSize :: [CoreBind] -> Int
1065 coreBindsSize bs = foldr ((+) . bindSize) 0 bs
1066
1067 exprSize :: CoreExpr -> Int
1068         -- A measure of the size of the expressions
1069         -- It also forces the expression pretty drastically as a side effect
1070 exprSize (Var v)       = v `seq` 1
1071 exprSize (Lit lit)     = lit `seq` 1
1072 exprSize (App f a)     = exprSize f + exprSize a
1073 exprSize (Lam b e)     = varSize b + exprSize e
1074 exprSize (Let b e)     = bindSize b + exprSize e
1075 exprSize (Case e b as) = exprSize e + varSize b + foldr ((+) . altSize) 0 as
1076 exprSize (Note n e)    = noteSize n + exprSize e
1077 exprSize (Type t)      = seqType t `seq` 1
1078
1079 noteSize (SCC cc)       = cc `seq` 1
1080 noteSize (Coerce t1 t2) = seqType t1 `seq` seqType t2 `seq` 1
1081 noteSize InlineCall     = 1
1082 noteSize InlineMe       = 1
1083 noteSize (CoreNote s)   = s `seq` 1  -- hdaume: core annotations
1084
1085 varSize :: Var -> Int
1086 varSize b  | isTyVar b = 1
1087            | otherwise = seqType (idType b)             `seq`
1088                          megaSeqIdInfo (idInfo b)       `seq`
1089                          1
1090
1091 varsSize = foldr ((+) . varSize) 0
1092
1093 bindSize (NonRec b e) = varSize b + exprSize e
1094 bindSize (Rec prs)    = foldr ((+) . pairSize) 0 prs
1095
1096 pairSize (b,e) = varSize b + exprSize e
1097
1098 altSize (c,bs,e) = c `seq` varsSize bs + exprSize e
1099 \end{code}
1100
1101
1102 %************************************************************************
1103 %*                                                                      *
1104 \subsection{Hashing}
1105 %*                                                                      *
1106 %************************************************************************
1107
1108 \begin{code}
1109 hashExpr :: CoreExpr -> Int
1110 hashExpr e | hash < 0  = 77     -- Just in case we hit -maxInt
1111            | otherwise = hash
1112            where
1113              hash = abs (hash_expr e)   -- Negative numbers kill UniqFM
1114
1115 hash_expr (Note _ e)              = hash_expr e
1116 hash_expr (Let (NonRec b r) e)    = hashId b
1117 hash_expr (Let (Rec ((b,r):_)) e) = hashId b
1118 hash_expr (Case _ b _)            = hashId b
1119 hash_expr (App f e)               = hash_expr f * fast_hash_expr e
1120 hash_expr (Var v)                 = hashId v
1121 hash_expr (Lit lit)               = hashLiteral lit
1122 hash_expr (Lam b _)               = hashId b
1123 hash_expr (Type t)                = trace "hash_expr: type" 1           -- Shouldn't happen
1124
1125 fast_hash_expr (Var v)          = hashId v
1126 fast_hash_expr (Lit lit)        = hashLiteral lit
1127 fast_hash_expr (App f (Type _)) = fast_hash_expr f
1128 fast_hash_expr (App f a)        = fast_hash_expr a
1129 fast_hash_expr (Lam b _)        = hashId b
1130 fast_hash_expr other            = 1
1131
1132 hashId :: Id -> Int
1133 hashId id = hashName (idName id)
1134 \end{code}
1135
1136 %************************************************************************
1137 %*                                                                      *
1138 \subsection{Determining non-updatable right-hand-sides}
1139 %*                                                                      *
1140 %************************************************************************
1141
1142 Top-level constructor applications can usually be allocated
1143 statically, but they can't if the constructor, or any of the
1144 arguments, come from another DLL (because we can't refer to static
1145 labels in other DLLs).
1146
1147 If this happens we simply make the RHS into an updatable thunk, 
1148 and 'exectute' it rather than allocating it statically.
1149
1150 \begin{code}
1151 rhsIsStatic :: CoreExpr -> Bool
1152 -- This function is called only on *top-level* right-hand sides
1153 -- Returns True if the RHS can be allocated statically, with
1154 -- no thunks involved at all.
1155 --
1156 -- It's called (i) in TidyPgm.hasCafRefs to decide if the rhs is, or
1157 -- refers to, CAFs; and (ii) in CoreToStg to decide whether to put an
1158 -- update flag on it.
1159 --
1160 -- The basic idea is that rhsIsStatic returns True only if the RHS is
1161 --      (a) a value lambda
1162 --      (b) a saturated constructor application with static args
1163 --
1164 -- BUT watch out for
1165 --  (i) Any cross-DLL references kill static-ness completely
1166 --      because they must be 'executed' not statically allocated
1167 --
1168 -- (ii) We treat partial applications as redexes, because in fact we 
1169 --      make a thunk for them that runs and builds a PAP
1170 --      at run-time.  The only appliations that are treated as 
1171 --      static are *saturated* applications of constructors.
1172
1173 -- We used to try to be clever with nested structures like this:
1174 --              ys = (:) w ((:) w [])
1175 -- on the grounds that CorePrep will flatten ANF-ise it later.
1176 -- But supporting this special case made the function much more 
1177 -- complicated, because the special case only applies if there are no 
1178 -- enclosing type lambdas:
1179 --              ys = /\ a -> Foo (Baz ([] a))
1180 -- Here the nested (Baz []) won't float out to top level in CorePrep.
1181 --
1182 -- But in fact, even without -O, nested structures at top level are 
1183 -- flattened by the simplifier, so we don't need to be super-clever here.
1184 --
1185 -- Examples
1186 --
1187 --      f = \x::Int. x+7        TRUE
1188 --      p = (True,False)        TRUE
1189 --
1190 --      d = (fst p, False)      FALSE because there's a redex inside
1191 --                              (this particular one doesn't happen but...)
1192 --
1193 --      h = D# (1.0## /## 2.0##)        FALSE (redex again)
1194 --      n = /\a. Nil a                  TRUE
1195 --
1196 --      t = /\a. (:) (case w a of ...) (Nil a)  FALSE (redex)
1197 --
1198 --
1199 -- This is a bit like CoreUtils.exprIsValue, with the following differences:
1200 --    a) scc "foo" (\x -> ...) is updatable (so we catch the right SCC)
1201 --
1202 --    b) (C x xs), where C is a contructors is updatable if the application is
1203 --         dynamic
1204 -- 
1205 --    c) don't look through unfolding of f in (f x).
1206 --
1207 -- When opt_RuntimeTypes is on, we keep type lambdas and treat
1208 -- them as making the RHS re-entrant (non-updatable).
1209
1210 rhsIsStatic rhs = is_static False rhs
1211
1212 is_static :: Bool       -- True <=> in a constructor argument; must be atomic
1213           -> CoreExpr -> Bool
1214
1215 is_static False (Lam b e) = isRuntimeVar b || is_static False e
1216
1217 is_static in_arg (Note (SCC _) e) = False
1218 is_static in_arg (Note _ e)       = is_static in_arg e
1219
1220 is_static in_arg (Lit lit)
1221   = case lit of
1222         MachLabel _ _ -> False
1223         other         -> True
1224         -- A MachLabel (foreign import "&foo") in an argument
1225         -- prevents a constructor application from being static.  The
1226         -- reason is that it might give rise to unresolvable symbols
1227         -- in the object file: under Linux, references to "weak"
1228         -- symbols from the data segment give rise to "unresolvable
1229         -- relocation" errors at link time This might be due to a bug
1230         -- in the linker, but we'll work around it here anyway. 
1231         -- SDM 24/2/2004
1232
1233 is_static in_arg other_expr = go other_expr 0
1234   where
1235     go (Var f) n_val_args
1236         | not (isDllName (idName f))
1237         =  saturated_data_con f n_val_args
1238         || (in_arg && n_val_args == 0)  
1239                 -- A naked un-applied variable is *not* deemed a static RHS
1240                 -- E.g.         f = g
1241                 -- Reason: better to update so that the indirection gets shorted
1242                 --         out, and the true value will be seen
1243                 -- NB: if you change this, you'll break the invariant that THUNK_STATICs
1244                 --     are always updatable.  If you do so, make sure that non-updatable
1245                 --     ones have enough space for their static link field!
1246
1247     go (App f a) n_val_args
1248         | isTypeArg a                    = go f n_val_args
1249         | not in_arg && is_static True a = go f (n_val_args + 1)
1250         -- The (not in_arg) checks that we aren't in a constructor argument;
1251         -- if we are, we don't allow (value) applications of any sort
1252         -- 
1253         -- NB. In case you wonder, args are sometimes not atomic.  eg.
1254         --   x = D# (1.0## /## 2.0##)
1255         -- can't float because /## can fail.
1256
1257     go (Note (SCC _) f) n_val_args = False
1258     go (Note _ f) n_val_args       = go f n_val_args
1259
1260     go other n_val_args = False
1261
1262     saturated_data_con f n_val_args
1263         = case isDataConWorkId_maybe f of
1264             Just dc -> n_val_args == dataConRepArity dc
1265             Nothing -> False
1266 \end{code}