Comments and white space only
[ghc-hetmet.git] / compiler / coreSyn / CoreUnfold.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The AQUA Project, Glasgow University, 1994-1998
4 %
5
6 Core-syntax unfoldings
7
8 Unfoldings (which can travel across module boundaries) are in Core
9 syntax (namely @CoreExpr@s).
10
11 The type @Unfolding@ sits ``above'' simply-Core-expressions
12 unfoldings, capturing ``higher-level'' things we know about a binding,
13 usually things that the simplifier found out (e.g., ``it's a
14 literal'').  In the corner of a @CoreUnfolding@ unfolding, you will
15 find, unsurprisingly, a Core expression.
16
17 \begin{code}
18 module CoreUnfold (
19         Unfolding, UnfoldingGuidance,   -- Abstract types
20
21         noUnfolding, mkImplicitUnfolding, 
22         mkTopUnfolding, mkUnfolding, mkCoreUnfolding,
23         mkInlineRule, mkWwInlineRule,
24         mkCompulsoryUnfolding, mkDFunUnfolding,
25
26         interestingArg, ArgSummary(..),
27
28         couldBeSmallEnoughToInline, 
29         certainlyWillInline, smallEnoughToInline,
30
31         callSiteInline, CallCtxt(..), 
32
33         exprIsConApp_maybe
34
35     ) where
36
37 #include "HsVersions.h"
38
39 import StaticFlags
40 import DynFlags
41 import CoreSyn
42 import PprCore          ()      -- Instances
43 import OccurAnal
44 import CoreSubst hiding( substTy )
45 import CoreFVs         ( exprFreeVars )
46 import CoreUtils
47 import Id
48 import DataCon
49 import TyCon
50 import Literal
51 import PrimOp
52 import IdInfo
53 import BasicTypes       ( Arity )
54 import TcType           ( tcSplitDFunTy )
55 import Type 
56 import Coercion
57 import PrelNames
58 import VarEnv           ( mkInScopeSet )
59 import Bag
60 import Util
61 import FastTypes
62 import FastString
63 import Outputable
64
65 \end{code}
66
67
68 %************************************************************************
69 %*                                                                      *
70 \subsection{Making unfoldings}
71 %*                                                                      *
72 %************************************************************************
73
74 \begin{code}
75 mkTopUnfolding :: CoreExpr -> Unfolding
76 mkTopUnfolding expr = mkUnfolding True {- Top level -} expr
77
78 mkImplicitUnfolding :: CoreExpr -> Unfolding
79 -- For implicit Ids, do a tiny bit of optimising first
80 mkImplicitUnfolding expr = mkTopUnfolding (simpleOptExpr expr)
81
82 -- Note [Top-level flag on inline rules]
83 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84 -- Slight hack: note that mk_inline_rules conservatively sets the
85 -- top-level flag to True.  It gets set more accurately by the simplifier
86 -- Simplify.simplUnfolding.
87
88 mkUnfolding :: Bool -> CoreExpr -> Unfolding
89 mkUnfolding top_lvl expr
90   = mkCoreUnfolding top_lvl expr arity guidance
91   where
92     (arity, guidance) = calcUnfoldingGuidance opt_UF_CreationThreshold expr
93         -- Sometimes during simplification, there's a large let-bound thing     
94         -- which has been substituted, and so is now dead; so 'expr' contains
95         -- two copies of the thing while the occurrence-analysed expression doesn't
96         -- Nevertheless, we *don't* occ-analyse before computing the size because the
97         -- size computation bales out after a while, whereas occurrence analysis does not.
98         --
99         -- This can occasionally mean that the guidance is very pessimistic;
100         -- it gets fixed up next round.  And it should be rare, because large
101         -- let-bound things that are dead are usually caught by preInlineUnconditionally
102
103 mkCoreUnfolding :: Bool -> CoreExpr -> Arity -> UnfoldingGuidance -> Unfolding
104 -- Occurrence-analyses the expression before capturing it
105 mkCoreUnfolding top_lvl expr arity guidance 
106   = CoreUnfolding { uf_tmpl       = occurAnalyseExpr expr,
107                     uf_arity      = arity,
108                     uf_is_top     = top_lvl,
109                     uf_is_value   = exprIsHNF        expr,
110                     uf_is_conlike = exprIsConLike    expr,
111                     uf_is_cheap   = exprIsCheap      expr,
112                     uf_expandable = exprIsExpandable expr,
113                     uf_guidance   = guidance }
114
115 mkDFunUnfolding :: DataCon -> [Id] -> Unfolding
116 mkDFunUnfolding con ops = DFunUnfolding con (map Var ops)
117
118 mkWwInlineRule :: Id -> CoreExpr -> Arity -> Unfolding
119 mkWwInlineRule id expr arity
120   = mkCoreUnfolding True (simpleOptExpr expr) arity
121          (InlineRule { ir_sat = InlUnSat, ir_info = InlWrapper id })
122
123 mkCompulsoryUnfolding :: CoreExpr -> Unfolding
124 mkCompulsoryUnfolding expr         -- Used for things that absolutely must be unfolded
125   = mkCoreUnfolding True expr 
126                     0    -- Arity of unfolding doesn't matter
127                     (InlineRule { ir_info = InlAlways, ir_sat = InlUnSat })     
128
129 mkInlineRule :: InlSatFlag -> CoreExpr -> Arity -> Unfolding
130 mkInlineRule sat expr arity 
131   = mkCoreUnfolding True         -- Note [Top-level flag on inline rules]
132                     expr' arity 
133                     (InlineRule { ir_sat = sat, ir_info = info })
134   where
135     expr' = simpleOptExpr expr
136     info = if small then InlSmall else InlVanilla
137     small = case calcUnfoldingGuidance (arity+1) expr' of
138               (arity_e, UnfoldIfGoodArgs { ug_size = size_e }) 
139                    -> uncondInline arity_e size_e
140               _other {- actually UnfoldNever -} -> False
141 \end{code}
142
143
144 %************************************************************************
145 %*                                                                      *
146 \subsection{The UnfoldingGuidance type}
147 %*                                                                      *
148 %************************************************************************
149
150 \begin{code}
151 calcUnfoldingGuidance
152         :: Int                  -- bomb out if size gets bigger than this
153         -> CoreExpr             -- expression to look at
154         -> (Arity, UnfoldingGuidance)
155 calcUnfoldingGuidance bOMB_OUT_SIZE expr
156   = case collectBinders expr of { (binders, body) ->
157     let
158         val_binders = filter isId binders
159         n_val_binders = length val_binders
160     in
161     case (sizeExpr (iUnbox bOMB_OUT_SIZE) val_binders body) of
162       TooBig -> (n_val_binders, UnfoldNever)
163       SizeIs size cased_args scrut_discount
164         -> (n_val_binders, UnfoldIfGoodArgs { ug_args  = map discount_for val_binders
165                                             , ug_size  = iBox size
166                                             , ug_res   = iBox scrut_discount })
167         where        
168             discount_for b = foldlBag (\acc (b',n) -> if b==b' then acc+n else acc) 
169                                       0 cased_args
170     }
171 \end{code}
172
173 Note [Computing the size of an expression]
174 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
175 The basic idea of sizeExpr is obvious enough: count nodes.  But getting the
176 heuristics right has taken a long time.  Here's the basic strategy:
177
178     * Variables, literals: 0
179       (Exception for string literals, see litSize.)
180
181     * Function applications (f e1 .. en): 1 + #value args
182
183     * Constructor applications: 1, regardless of #args
184
185     * Let(rec): 1 + size of components
186
187     * Note, cast: 0
188
189 Examples
190
191   Size  Term
192   --------------
193     0     42#
194     0     x
195     0     True
196     2     f x
197     1     Just x
198     4     f (g x)
199
200 Notice that 'x' counts 0, while (f x) counts 2.  That's deliberate: there's
201 a function call to account for.  Notice also that constructor applications 
202 are very cheap, because exposing them to a caller is so valuable.
203
204 Note [Unconditional inlining]
205 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
206 We inline *unconditionally* if inlined thing is smaller (using sizeExpr)
207 than the thing it's replacing.  Notice that
208       (f x) --> (g 3)             -- YES, unconditionally
209       (f x) --> x : []            -- YES, *even though* there are two
210                                   --      arguments to the cons
211       x     --> g 3               -- NO
212       x     --> Just v            -- NO
213
214 It's very important not to unconditionally replace a variable by
215 a non-atomic term.
216
217 \begin{code}
218 uncondInline :: Arity -> Int -> Bool
219 -- Inline unconditionally if there no size increase
220 -- Size of call is arity (+1 for the function)
221 -- See Note [Unconditional inlining]
222 uncondInline arity size 
223   | arity == 0 = size == 0
224   | otherwise  = size <= arity + 1
225 \end{code}
226
227
228 \begin{code}
229 sizeExpr :: FastInt         -- Bomb out if it gets bigger than this
230          -> [Id]            -- Arguments; we're interested in which of these
231                             -- get case'd
232          -> CoreExpr
233          -> ExprSize
234
235 -- Note [Computing the size of an expression]
236
237 sizeExpr bOMB_OUT_SIZE top_args expr
238   = size_up expr
239   where
240     size_up (Cast e _) = size_up e
241     size_up (Note _ e) = size_up e
242     size_up (Type _)   = sizeZero           -- Types cost nothing
243     size_up (Lit lit)  = sizeN (litSize lit)
244     size_up (Var f)    = size_up_call f []  -- Make sure we get constructor
245                                             -- discounts even on nullary constructors
246
247     size_up (App fun (Type _)) = size_up fun
248     size_up (App fun arg)      = size_up_app fun [arg]
249                                   `addSize` nukeScrutDiscount (size_up arg)
250
251     size_up (Lam b e) | isId b    = lamScrutDiscount (size_up e `addSizeN` 1)
252                       | otherwise = size_up e
253
254     size_up (Let (NonRec binder rhs) body)
255       = nukeScrutDiscount (size_up rhs)         `addSize`
256         size_up body                            `addSizeN`
257         (if isUnLiftedType (idType binder) then 0 else 1)
258                 -- For the allocation
259                 -- If the binder has an unlifted type there is no allocation
260
261     size_up (Let (Rec pairs) body)
262       = nukeScrutDiscount rhs_size              `addSize`
263         size_up body                            `addSizeN`
264         length pairs            -- For the allocation
265       where
266         rhs_size = foldr (addSize . size_up . snd) sizeZero pairs
267
268     size_up (Case (Var v) _ _ alts) 
269         | v `elem` top_args             -- We are scrutinising an argument variable
270         = alts_size (foldr addSize sizeOne alt_sizes)   -- The 1 is for the case itself
271                     (foldr1 maxSize alt_sizes)
272                 -- Good to inline if an arg is scrutinised, because
273                 -- that may eliminate allocation in the caller
274                 -- And it eliminates the case itself
275         where
276           alt_sizes = map size_up_alt alts
277
278                 -- alts_size tries to compute a good discount for
279                 -- the case when we are scrutinising an argument variable
280           alts_size (SizeIs tot tot_disc _tot_scrut)           -- Size of all alternatives
281                     (SizeIs max _max_disc  max_scrut)           -- Size of biggest alternative
282                 = SizeIs tot (unitBag (v, iBox (_ILIT(1) +# tot -# max)) `unionBags` tot_disc) max_scrut
283                         -- If the variable is known, we produce a discount that
284                         -- will take us back to 'max', the size of the largest alternative
285                         -- The 1+ is a little discount for reduced allocation in the caller
286                         --
287                         -- Notice though, that we return tot_disc, the total discount from 
288                         -- all branches.  I think that's right.
289
290           alts_size tot_size _ = tot_size
291
292     size_up (Case e _ _ alts) = foldr (addSize . size_up_alt) 
293                                       (nukeScrutDiscount (size_up e))
294                                       alts
295                                 `addSizeN` 1    -- Add 1 for the case itself
296                 -- We don't charge for the case itself
297                 -- It's a strict thing, and the price of the call
298                 -- is paid by scrut.  Also consider
299                 --      case f x of DEFAULT -> e
300                 -- This is just ';'!  Don't charge for it.
301
302     ------------ 
303     -- size_up_app is used when there's ONE OR MORE value args
304     size_up_app (App fun arg) args 
305         | isTypeArg arg            = size_up_app fun args
306         | otherwise                = size_up_app fun (arg:args)
307                                      `addSize` nukeScrutDiscount (size_up arg)
308     size_up_app (Var fun)     args = size_up_call fun args
309     size_up_app other         args = size_up other `addSizeN` length args
310
311     ------------ 
312     size_up_call :: Id -> [CoreExpr] -> ExprSize
313     size_up_call fun val_args
314        = case idDetails fun of
315            FCallId _        -> sizeN opt_UF_DearOp
316            DataConWorkId dc -> conSize    dc (length val_args)
317            PrimOpId op      -> primOpSize op (length val_args)
318            ClassOpId _      -> classOpSize top_args val_args
319            _                -> funSize top_args fun (length val_args)
320
321     ------------ 
322     size_up_alt (_con, _bndrs, rhs) = size_up rhs
323         -- Don't charge for args, so that wrappers look cheap
324         -- (See comments about wrappers with Case)
325
326     ------------
327         -- These addSize things have to be here because
328         -- I don't want to give them bOMB_OUT_SIZE as an argument
329     addSizeN TooBig          _  = TooBig
330     addSizeN (SizeIs n xs d) m  = mkSizeIs bOMB_OUT_SIZE (n +# iUnbox m) xs d
331     
332     addSize TooBig            _                 = TooBig
333     addSize _                 TooBig            = TooBig
334     addSize (SizeIs n1 xs d1) (SizeIs n2 ys d2) 
335         = mkSizeIs bOMB_OUT_SIZE (n1 +# n2) (xs `unionBags` ys) (d1 +# d2)
336 \end{code}
337
338 \begin{code}
339 -- | Finds a nominal size of a string literal.
340 litSize :: Literal -> Int
341 -- Used by CoreUnfold.sizeExpr
342 litSize (MachStr str) = 1 + ((lengthFS str + 3) `div` 4)
343         -- If size could be 0 then @f "x"@ might be too small
344         -- [Sept03: make literal strings a bit bigger to avoid fruitless 
345         --  duplication of little strings]
346 litSize _other = 0    -- Must match size of nullary constructors
347                       -- Key point: if  x |-> 4, then x must inline unconditionally
348                       --            (eg via case binding)
349
350 classOpSize :: [Id] -> [CoreExpr] -> ExprSize
351 -- See Note [Conlike is interesting]
352 classOpSize _ [] 
353   = sizeZero
354 classOpSize top_args (arg1 : other_args)
355   = SizeIs (iUnbox size) arg_discount (_ILIT(0))
356   where
357     size = 2 + length other_args
358     -- If the class op is scrutinising a lambda bound dictionary then
359     -- give it a discount, to encourage the inlining of this function
360     -- The actual discount is rather arbitrarily chosen
361     arg_discount = case arg1 of
362                      Var dict | dict `elem` top_args 
363                               -> unitBag (dict, opt_UF_DictDiscount)
364                      _other   -> emptyBag
365                      
366 funSize :: [Id] -> Id -> Int -> ExprSize
367 -- Size for functions that are not constructors or primops
368 -- Note [Function applications]
369 funSize top_args fun n_val_args
370   | fun `hasKey` buildIdKey   = buildSize
371   | fun `hasKey` augmentIdKey = augmentSize
372   | otherwise = SizeIs (iUnbox size) arg_discount (iUnbox res_discount)
373   where
374     some_val_args = n_val_args > 0
375
376     arg_discount | some_val_args && fun `elem` top_args
377                  = unitBag (fun, opt_UF_FunAppDiscount)
378                  | otherwise = emptyBag
379         -- If the function is an argument and is applied
380         -- to some values, give it an arg-discount
381
382     res_discount | idArity fun > n_val_args = opt_UF_FunAppDiscount
383                  | otherwise                = 0
384         -- If the function is partially applied, show a result discount
385
386     size | some_val_args = 1 + n_val_args
387          | otherwise     = 0
388         -- The 1+ is for the function itself
389         -- Add 1 for each non-trivial arg;
390         -- the allocation cost, as in let(rec)
391   
392
393 conSize :: DataCon -> Int -> ExprSize
394 conSize dc n_val_args
395   | n_val_args == 0      = SizeIs (_ILIT(0)) emptyBag (_ILIT(1))        -- Like variables
396   | isUnboxedTupleCon dc = SizeIs (_ILIT(0)) emptyBag (iUnbox n_val_args +# _ILIT(1))
397   | otherwise            = SizeIs (_ILIT(1)) emptyBag (iUnbox n_val_args +# _ILIT(1))
398         -- Treat a constructors application as size 1, regardless of how
399         -- many arguments it has; we are keen to expose them
400         -- (and we charge separately for their args).  We can't treat
401         -- them as size zero, else we find that (Just x) has size 0,
402         -- which is the same as a lone variable; and hence 'v' will 
403         -- always be replaced by (Just x), where v is bound to Just x.
404         --
405         -- However, unboxed tuples count as size zero
406         -- I found occasions where we had 
407         --      f x y z = case op# x y z of { s -> (# s, () #) }
408         -- and f wasn't getting inlined
409
410 primOpSize :: PrimOp -> Int -> ExprSize
411 primOpSize op n_val_args
412  | not (primOpIsDupable op) = sizeN opt_UF_DearOp
413  | not (primOpOutOfLine op) = sizeN 1
414         -- Be very keen to inline simple primops.
415         -- We give a discount of 1 for each arg so that (op# x y z) costs 2.
416         -- We can't make it cost 1, else we'll inline let v = (op# x y z) 
417         -- at every use of v, which is excessive.
418         --
419         -- A good example is:
420         --      let x = +# p q in C {x}
421         -- Even though x get's an occurrence of 'many', its RHS looks cheap,
422         -- and there's a good chance it'll get inlined back into C's RHS. Urgh!
423
424  | otherwise = sizeN n_val_args
425
426
427 buildSize :: ExprSize
428 buildSize = SizeIs (_ILIT(0)) emptyBag (_ILIT(4))
429         -- We really want to inline applications of build
430         -- build t (\cn -> e) should cost only the cost of e (because build will be inlined later)
431         -- Indeed, we should add a result_discount becuause build is 
432         -- very like a constructor.  We don't bother to check that the
433         -- build is saturated (it usually is).  The "-2" discounts for the \c n, 
434         -- The "4" is rather arbitrary.
435
436 augmentSize :: ExprSize
437 augmentSize = SizeIs (_ILIT(0)) emptyBag (_ILIT(4))
438         -- Ditto (augment t (\cn -> e) ys) should cost only the cost of
439         -- e plus ys. The -2 accounts for the \cn 
440
441 nukeScrutDiscount :: ExprSize -> ExprSize
442 nukeScrutDiscount (SizeIs n vs _) = SizeIs n vs (_ILIT(0))
443 nukeScrutDiscount TooBig          = TooBig
444
445 -- When we return a lambda, give a discount if it's used (applied)
446 lamScrutDiscount :: ExprSize -> ExprSize
447 lamScrutDiscount (SizeIs n vs _) = SizeIs n vs (iUnbox opt_UF_FunAppDiscount)
448 lamScrutDiscount TooBig          = TooBig
449 \end{code}
450
451 Note [Discounts and thresholds]
452 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
453 Constants for discounts and thesholds are defined in main/StaticFlags,
454 all of form opt_UF_xxxx.   They are:
455
456 opt_UF_CreationThreshold (45)
457      At a definition site, if the unfolding is bigger than this, we
458      may discard it altogether
459
460 opt_UF_UseThreshold (6)
461      At a call site, if the unfolding, less discounts, is smaller than
462      this, then it's small enough inline
463
464 opt_UF_KeennessFactor (1.5)
465      Factor by which the discounts are multiplied before 
466      subtracting from size
467
468 opt_UF_DictDiscount (1)
469      The discount for each occurrence of a dictionary argument
470      as an argument of a class method.  Should be pretty small
471      else big functions may get inlined
472
473 opt_UF_FunAppDiscount (6)
474      Discount for a function argument that is applied.  Quite
475      large, because if we inline we avoid the higher-order call.
476
477 opt_UF_DearOp (4)
478      The size of a foreign call or not-dupable PrimOp
479
480
481 Note [Function applications]
482 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
483 In a function application (f a b)
484
485   - If 'f' is an argument to the function being analysed, 
486     and there's at least one value arg, record a FunAppDiscount for f
487
488   - If the application if a PAP (arity > 2 in this example)
489     record a *result* discount (because inlining
490     with "extra" args in the call may mean that we now 
491     get a saturated application)
492
493 Code for manipulating sizes
494
495 \begin{code}
496 data ExprSize = TooBig
497               | SizeIs FastInt          -- Size found
498                        (Bag (Id,Int))   -- Arguments cased herein, and discount for each such
499                        FastInt          -- Size to subtract if result is scrutinised 
500                                         -- by a case expression
501
502 instance Outputable ExprSize where
503   ppr TooBig         = ptext (sLit "TooBig")
504   ppr (SizeIs a _ c) = brackets (int (iBox a) <+> int (iBox c))
505
506 -- subtract the discount before deciding whether to bale out. eg. we
507 -- want to inline a large constructor application into a selector:
508 --      tup = (a_1, ..., a_99)
509 --      x = case tup of ...
510 --
511 mkSizeIs :: FastInt -> FastInt -> Bag (Id, Int) -> FastInt -> ExprSize
512 mkSizeIs max n xs d | (n -# d) ># max = TooBig
513                     | otherwise       = SizeIs n xs d
514  
515 maxSize :: ExprSize -> ExprSize -> ExprSize
516 maxSize TooBig         _                                  = TooBig
517 maxSize _              TooBig                             = TooBig
518 maxSize s1@(SizeIs n1 _ _) s2@(SizeIs n2 _ _) | n1 ># n2  = s1
519                                               | otherwise = s2
520
521 sizeZero, sizeOne :: ExprSize
522 sizeN :: Int -> ExprSize
523
524 sizeZero = SizeIs (_ILIT(0))  emptyBag (_ILIT(0))
525 sizeOne  = SizeIs (_ILIT(1))  emptyBag (_ILIT(0))
526 sizeN n  = SizeIs (iUnbox n) emptyBag (_ILIT(0))
527 \end{code}
528
529
530
531
532 %************************************************************************
533 %*                                                                      *
534 \subsection[considerUnfolding]{Given all the info, do (not) do the unfolding}
535 %*                                                                      *
536 %************************************************************************
537
538 We use 'couldBeSmallEnoughToInline' to avoid exporting inlinings that
539 we ``couldn't possibly use'' on the other side.  Can be overridden w/
540 flaggery.  Just the same as smallEnoughToInline, except that it has no
541 actual arguments.
542
543 \begin{code}
544 couldBeSmallEnoughToInline :: Int -> CoreExpr -> Bool
545 couldBeSmallEnoughToInline threshold rhs 
546   = case calcUnfoldingGuidance threshold rhs of
547        (_, UnfoldNever) -> False
548        _                -> True
549
550 ----------------
551 smallEnoughToInline :: Unfolding -> Bool
552 smallEnoughToInline (CoreUnfolding {uf_guidance = UnfoldIfGoodArgs {ug_size = size}})
553   = size <= opt_UF_UseThreshold
554 smallEnoughToInline _
555   = False
556
557 ----------------
558 certainlyWillInline :: Unfolding -> Bool
559   -- Sees if the unfolding is pretty certain to inline  
560 certainlyWillInline (CoreUnfolding { uf_is_cheap = is_cheap, uf_arity = n_vals, uf_guidance = guidance })
561   = case guidance of
562       UnfoldNever     -> False
563       InlineRule {}   -> True
564       UnfoldIfGoodArgs { ug_size = size} 
565                     -> is_cheap && size - (n_vals +1) <= opt_UF_UseThreshold
566
567 certainlyWillInline _
568   = False
569 \end{code}
570
571 %************************************************************************
572 %*                                                                      *
573 \subsection{callSiteInline}
574 %*                                                                      *
575 %************************************************************************
576
577 This is the key function.  It decides whether to inline a variable at a call site
578
579 callSiteInline is used at call sites, so it is a bit more generous.
580 It's a very important function that embodies lots of heuristics.
581 A non-WHNF can be inlined if it doesn't occur inside a lambda,
582 and occurs exactly once or 
583     occurs once in each branch of a case and is small
584
585 If the thing is in WHNF, there's no danger of duplicating work, 
586 so we can inline if it occurs once, or is small
587
588 NOTE: we don't want to inline top-level functions that always diverge.
589 It just makes the code bigger.  Tt turns out that the convenient way to prevent
590 them inlining is to give them a NOINLINE pragma, which we do in 
591 StrictAnal.addStrictnessInfoToTopId
592
593 \begin{code}
594 callSiteInline :: DynFlags
595                -> Bool                  -- True <=> the Id can be inlined
596                -> Id                    -- The Id
597                -> Bool                  -- True if there are are no arguments at all (incl type args)
598                -> [ArgSummary]          -- One for each value arg; True if it is interesting
599                -> CallCtxt              -- True <=> continuation is interesting
600                -> Maybe CoreExpr        -- Unfolding, if any
601
602
603 instance Outputable ArgSummary where
604   ppr TrivArg    = ptext (sLit "TrivArg")
605   ppr NonTrivArg = ptext (sLit "NonTrivArg")
606   ppr ValueArg   = ptext (sLit "ValueArg")
607
608 data CallCtxt = BoringCtxt
609
610               | ArgCtxt         -- We are somewhere in the argument of a function
611                         Bool    -- True  <=> we're somewhere in the RHS of function with rules
612                                 -- False <=> we *are* the argument of a function with non-zero
613                                 --           arg discount
614                                 --        OR 
615                                 --           we *are* the RHS of a let  Note [RHS of lets]
616                                 -- In both cases, be a little keener to inline
617
618               | ValAppCtxt      -- We're applied to at least one value arg
619                                 -- This arises when we have ((f x |> co) y)
620                                 -- Then the (f x) has argument 'x' but in a ValAppCtxt
621
622               | CaseCtxt        -- We're the scrutinee of a case
623                                 -- that decomposes its scrutinee
624
625 instance Outputable CallCtxt where
626   ppr BoringCtxt      = ptext (sLit "BoringCtxt")
627   ppr (ArgCtxt rules) = ptext (sLit "ArgCtxt") <+> ppr rules
628   ppr CaseCtxt        = ptext (sLit "CaseCtxt")
629   ppr ValAppCtxt      = ptext (sLit "ValAppCtxt")
630
631 callSiteInline dflags active_inline id lone_variable arg_infos cont_info
632   = let
633         n_val_args  = length arg_infos
634     in
635     case idUnfolding id of {
636         NoUnfolding      -> Nothing ;
637         OtherCon _       -> Nothing ;
638         DFunUnfolding {} -> Nothing ;   -- Never unfold a DFun
639         CoreUnfolding { uf_tmpl = unf_template, uf_is_top = is_top, uf_is_value = is_value,
640                         uf_is_cheap = is_cheap, uf_arity = uf_arity, uf_guidance = guidance } ->
641                         -- uf_arity will typically be equal to (idArity id), 
642                         -- but may be less for InlineRules
643     let
644         result | yes_or_no = Just unf_template
645                | otherwise = Nothing
646
647         interesting_args = any nonTriv arg_infos 
648                 -- NB: (any nonTriv arg_infos) looks at the
649                 -- over-saturated args too which is "wrong"; 
650                 -- but if over-saturated we inline anyway.
651
652                -- some_benefit is used when the RHS is small enough
653                -- and the call has enough (or too many) value
654                -- arguments (ie n_val_args >= arity). But there must
655                -- be *something* interesting about some argument, or the
656                -- result context, to make it worth inlining
657         some_benefit =  interesting_args
658                      || n_val_args > uf_arity       -- Over-saturated
659                      || interesting_saturated_call  -- Exactly saturated
660
661         interesting_saturated_call 
662           = case cont_info of
663               BoringCtxt -> not is_top && uf_arity > 0          -- Note [Nested functions]
664               CaseCtxt   -> not (lone_variable && is_value)     -- Note [Lone variables]
665               ArgCtxt {} -> uf_arity > 0                        -- Note [Inlining in ArgCtxt]
666               ValAppCtxt -> True                                -- Note [Cast then apply]
667
668         yes_or_no
669           = case guidance of
670               UnfoldNever  -> False
671
672               InlineRule { ir_info = inl_info, ir_sat = sat }
673                  | InlAlways <- inl_info -> True         -- No top-level binding, so inline!
674                                                          -- Ignore is_active because we want to 
675                                                          -- inline even if SimplGently is on.
676                  | not active_inline     -> False
677                  | n_val_args < uf_arity -> yes_unsat    -- Not enough value args
678                  | InlSmall <- inl_info  -> True         -- Note [INLINE for small functions]
679                  | otherwise             -> some_benefit -- Saturated or over-saturated
680                  where
681                    -- See Note [Inlining an InlineRule]
682                    yes_unsat = case sat of 
683                                  InlSat   -> False
684                                  InlUnSat -> interesting_args
685
686               UnfoldIfGoodArgs { ug_args = arg_discounts, ug_res = res_discount, ug_size = size }
687                  | not active_inline          -> False
688                  | not is_cheap               -> False
689                  | n_val_args < uf_arity      -> interesting_args && small_enough       
690                                                         -- Note [Unsaturated applications]
691                  | uncondInline uf_arity size -> True
692                  | otherwise                  -> some_benefit && small_enough
693
694                  where
695                    small_enough = (size - discount) <= opt_UF_UseThreshold
696                    discount = computeDiscount uf_arity arg_discounts 
697                                               res_discount arg_infos cont_info
698                 
699     in    
700     if dopt Opt_D_dump_inlinings dflags then
701         pprTrace ("Considering inlining: " ++ showSDoc (ppr id))
702                  (vcat [text "active:" <+> ppr active_inline,
703                         text "arg infos" <+> ppr arg_infos,
704                         text "interesting continuation" <+> ppr cont_info,
705                         text "is value:" <+> ppr is_value,
706                         text "is cheap:" <+> ppr is_cheap,
707                         text "guidance" <+> ppr guidance,
708                         text "ANSWER =" <+> if yes_or_no then text "YES" else text "NO"])
709                   result
710     else
711     result
712     }
713 \end{code}
714
715 Note [RHS of lets]
716 ~~~~~~~~~~~~~~~~~~
717 Be a tiny bit keener to inline in the RHS of a let, because that might
718 lead to good thing later
719      f y = (y,y,y)
720      g y = let x = f y in ...(case x of (a,b,c) -> ...) ...
721 We'd inline 'f' if the call was in a case context, and it kind-of-is,
722 only we can't see it.  So we treat the RHS of a let as not-totally-boring.
723     
724 Note [Unsaturated applications]
725 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
726 When a call is not saturated, we *still* inline if one of the
727 arguments has interesting structure.  That's sometimes very important.
728 A good example is the Ord instance for Bool in Base:
729
730  Rec {
731     $fOrdBool =GHC.Classes.D:Ord
732                  @ Bool
733                  ...
734                  $cmin_ajX
735
736     $cmin_ajX [Occ=LoopBreaker] :: Bool -> Bool -> Bool
737     $cmin_ajX = GHC.Classes.$dmmin @ Bool $fOrdBool
738   }
739
740 But the defn of GHC.Classes.$dmmin is:
741
742   $dmmin :: forall a. GHC.Classes.Ord a => a -> a -> a
743     {- Arity: 3, HasNoCafRefs, Strictness: SLL,
744        Unfolding: (\ @ a $dOrd :: GHC.Classes.Ord a x :: a y :: a ->
745                    case @ a GHC.Classes.<= @ a $dOrd x y of wild {
746                      GHC.Bool.False -> y GHC.Bool.True -> x }) -}
747
748 We *really* want to inline $dmmin, even though it has arity 3, in
749 order to unravel the recursion.
750
751
752 Note [INLINE for small functions]
753 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
754 Consider        {-# INLINE f #-}
755                 f x = Just x
756                 g y = f y
757 Then f's RHS is no larger than its LHS, so we should inline it
758 into even the most boring context.  (We do so if there is no INLINE
759 pragma!)  That's the reason for the 'ug_small' flag on an InlineRule.
760
761
762 Note [Things to watch]
763 ~~~~~~~~~~~~~~~~~~~~~~
764 *   { y = I# 3; x = y `cast` co; ...case (x `cast` co) of ... }
765     Assume x is exported, so not inlined unconditionally.
766     Then we want x to inline unconditionally; no reason for it 
767     not to, and doing so avoids an indirection.
768
769 *   { x = I# 3; ....f x.... }
770     Make sure that x does not inline unconditionally!  
771     Lest we get extra allocation.
772
773 Note [Inlining an InlineRule]
774 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
775 An InlineRules is used for
776   (a) pogrammer INLINE pragmas
777   (b) inlinings from worker/wrapper
778
779 For (a) the RHS may be large, and our contract is that we *only* inline
780 when the function is applied to all the arguments on the LHS of the
781 source-code defn.  (The uf_arity in the rule.)
782
783 However for worker/wrapper it may be worth inlining even if the 
784 arity is not satisfied (as we do in the CoreUnfolding case) so we don't
785 require saturation.
786
787
788 Note [Nested functions]
789 ~~~~~~~~~~~~~~~~~~~~~~~
790 If a function has a nested defn we also record some-benefit, on the
791 grounds that we are often able to eliminate the binding, and hence the
792 allocation, for the function altogether; this is good for join points.
793 But this only makes sense for *functions*; inlining a constructor
794 doesn't help allocation unless the result is scrutinised.  UNLESS the
795 constructor occurs just once, albeit possibly in multiple case
796 branches.  Then inlining it doesn't increase allocation, but it does
797 increase the chance that the constructor won't be allocated at all in
798 the branches that don't use it.
799
800 Note [Cast then apply]
801 ~~~~~~~~~~~~~~~~~~~~~~
802 Consider
803    myIndex = __inline_me ( (/\a. <blah>) |> co )
804    co :: (forall a. a -> a) ~ (forall a. T a)
805      ... /\a.\x. case ((myIndex a) |> sym co) x of { ... } ...
806
807 We need to inline myIndex to unravel this; but the actual call (myIndex a) has
808 no value arguments.  The ValAppCtxt gives it enough incentive to inline.
809
810 Note [Inlining in ArgCtxt]
811 ~~~~~~~~~~~~~~~~~~~~~~~~~~
812 The condition (arity > 0) here is very important, because otherwise
813 we end up inlining top-level stuff into useless places; eg
814    x = I# 3#
815    f = \y.  g x
816 This can make a very big difference: it adds 16% to nofib 'integer' allocs,
817 and 20% to 'power'.
818
819 At one stage I replaced this condition by 'True' (leading to the above 
820 slow-down).  The motivation was test eyeball/inline1.hs; but that seems
821 to work ok now.
822
823 NOTE: arguably, we should inline in ArgCtxt only if the result of the
824 call is at least CONLIKE.  At least for the cases where we use ArgCtxt
825 for the RHS of a 'let', we only profit from the inlining if we get a 
826 CONLIKE thing (modulo lets).
827
828 Note [Lone variables]
829 ~~~~~~~~~~~~~~~~~~~~~
830 The "lone-variable" case is important.  I spent ages messing about
831 with unsatisfactory varaints, but this is nice.  The idea is that if a
832 variable appears all alone
833
834         as an arg of lazy fn, or rhs    BoringCtxt
835         as scrutinee of a case          CaseCtxt
836         as arg of a fn                  ArgCtxt
837 AND
838         it is bound to a value
839
840 then we should not inline it (unless there is some other reason,
841 e.g. is is the sole occurrence).  That is what is happening at 
842 the use of 'lone_variable' in 'interesting_saturated_call'.
843
844 Why?  At least in the case-scrutinee situation, turning
845         let x = (a,b) in case x of y -> ...
846 into
847         let x = (a,b) in case (a,b) of y -> ...
848 and thence to 
849         let x = (a,b) in let y = (a,b) in ...
850 is bad if the binding for x will remain.
851
852 Another example: I discovered that strings
853 were getting inlined straight back into applications of 'error'
854 because the latter is strict.
855         s = "foo"
856         f = \x -> ...(error s)...
857
858 Fundamentally such contexts should not encourage inlining because the
859 context can ``see'' the unfolding of the variable (e.g. case or a
860 RULE) so there's no gain.  If the thing is bound to a value.
861
862 However, watch out:
863
864  * Consider this:
865         foo = _inline_ (\n. [n])
866         bar = _inline_ (foo 20)
867         baz = \n. case bar of { (m:_) -> m + n }
868    Here we really want to inline 'bar' so that we can inline 'foo'
869    and the whole thing unravels as it should obviously do.  This is 
870    important: in the NDP project, 'bar' generates a closure data
871    structure rather than a list. 
872
873    So the non-inlining of lone_variables should only apply if the
874    unfolding is regarded as cheap; because that is when exprIsConApp_maybe
875    looks through the unfolding.  Hence the "&& is_cheap" in the
876    InlineRule branch.
877
878  * Even a type application or coercion isn't a lone variable.
879    Consider
880         case $fMonadST @ RealWorld of { :DMonad a b c -> c }
881    We had better inline that sucker!  The case won't see through it.
882
883    For now, I'm treating treating a variable applied to types 
884    in a *lazy* context "lone". The motivating example was
885         f = /\a. \x. BIG
886         g = /\a. \y.  h (f a)
887    There's no advantage in inlining f here, and perhaps
888    a significant disadvantage.  Hence some_val_args in the Stop case
889
890 \begin{code}
891 computeDiscount :: Int -> [Int] -> Int -> [ArgSummary] -> CallCtxt -> Int
892 computeDiscount n_vals_wanted arg_discounts res_discount arg_infos cont_info
893         -- We multiple the raw discounts (args_discount and result_discount)
894         -- ty opt_UnfoldingKeenessFactor because the former have to do with
895         --  *size* whereas the discounts imply that there's some extra 
896         --  *efficiency* to be gained (e.g. beta reductions, case reductions) 
897         -- by inlining.
898
899   = 1           -- Discount of 1 because the result replaces the call
900                 -- so we count 1 for the function itself
901
902     + length (take n_vals_wanted arg_infos)
903                -- Discount of (un-scaled) 1 for each arg supplied, 
904                -- because the result replaces the call
905
906     + round (opt_UF_KeenessFactor * 
907              fromIntegral (arg_discount + res_discount'))
908   where
909     arg_discount = sum (zipWith mk_arg_discount arg_discounts arg_infos)
910
911     mk_arg_discount _        TrivArg    = 0 
912     mk_arg_discount _        NonTrivArg = 1   
913     mk_arg_discount discount ValueArg   = discount 
914
915     res_discount' = case cont_info of
916                         BoringCtxt  -> 0
917                         CaseCtxt    -> res_discount
918                         _other      -> 4 `min` res_discount
919                 -- res_discount can be very large when a function returns
920                 -- constructors; but we only want to invoke that large discount
921                 -- when there's a case continuation.
922                 -- Otherwise we, rather arbitrarily, threshold it.  Yuk.
923                 -- But we want to aovid inlining large functions that return 
924                 -- constructors into contexts that are simply "interesting"
925 \end{code}
926
927 %************************************************************************
928 %*                                                                      *
929         Interesting arguments
930 %*                                                                      *
931 %************************************************************************
932
933 Note [Interesting arguments]
934 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
935 An argument is interesting if it deserves a discount for unfoldings
936 with a discount in that argument position.  The idea is to avoid
937 unfolding a function that is applied only to variables that have no
938 unfolding (i.e. they are probably lambda bound): f x y z There is
939 little point in inlining f here.
940
941 Generally, *values* (like (C a b) and (\x.e)) deserve discounts.  But
942 we must look through lets, eg (let x = e in C a b), because the let will
943 float, exposing the value, if we inline.  That makes it different to
944 exprIsHNF.
945
946 Before 2009 we said it was interesting if the argument had *any* structure
947 at all; i.e. (hasSomeUnfolding v).  But does too much inlining; see Trac #3016.
948
949 But we don't regard (f x y) as interesting, unless f is unsaturated.
950 If it's saturated and f hasn't inlined, then it's probably not going
951 to now!
952
953 Note [Conlike is interesting]
954 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
955 Consider
956         f d = ...((*) d x y)...
957         ... f (df d')...
958 where df is con-like. Then we'd really like to inline 'f' so that the
959 rule for (*) (df d) can fire.  To do this 
960   a) we give a discount for being an argument of a class-op (eg (*) d)
961   b) we say that a con-like argument (eg (df d)) is interesting
962
963 \begin{code}
964 data ArgSummary = TrivArg       -- Nothing interesting
965                 | NonTrivArg    -- Arg has structure
966                 | ValueArg      -- Arg is a con-app or PAP
967                                 -- ..or con-like. Note [Conlike is interesting]
968
969 interestingArg :: CoreExpr -> ArgSummary
970 -- See Note [Interesting arguments]
971 interestingArg e = go e 0
972   where
973     -- n is # value args to which the expression is applied
974     go (Lit {}) _          = ValueArg
975     go (Var v)  n
976        | isConLikeId v     = ValueArg   -- Experimenting with 'conlike' rather that
977                                         --    data constructors here
978        | idArity v > n     = ValueArg   -- Catches (eg) primops with arity but no unfolding
979        | n > 0             = NonTrivArg -- Saturated or unknown call
980        | conlike_unfolding = ValueArg   -- n==0; look for an interesting unfolding
981                                         -- See Note [Conlike is interesting]
982        | otherwise         = TrivArg    -- n==0, no useful unfolding
983        where
984          conlike_unfolding = isConLikeUnfolding (idUnfolding v)
985
986     go (Type _)          _ = TrivArg
987     go (App fn (Type _)) n = go fn n    
988     go (App fn _)        n = go fn (n+1)
989     go (Note _ a)        n = go a n
990     go (Cast e _)        n = go e n
991     go (Lam v e)         n 
992        | isTyVar v         = go e n
993        | n>0               = go e (n-1)
994        | otherwise         = ValueArg
995     go (Let _ e)         n = case go e n of { ValueArg -> ValueArg; _ -> NonTrivArg }
996     go (Case {})         _ = NonTrivArg
997
998 nonTriv ::  ArgSummary -> Bool
999 nonTriv TrivArg = False
1000 nonTriv _       = True
1001 \end{code}
1002
1003 %************************************************************************
1004 %*                                                                      *
1005          exprIsConApp_maybe
1006 %*                                                                      *
1007 %************************************************************************
1008
1009 Note [exprIsConApp_maybe]
1010 ~~~~~~~~~~~~~~~~~~~~~~~~~
1011 exprIsConApp_maybe is a very important function.  There are two principal
1012 uses:
1013   * case e of { .... }
1014   * cls_op e, where cls_op is a class operation
1015
1016 In both cases you want to know if e is of form (C e1..en) where C is
1017 a data constructor.
1018
1019 However e might not *look* as if 
1020
1021 \begin{code}
1022 -- | Returns @Just (dc, [t1..tk], [x1..xn])@ if the argument expression is 
1023 -- a *saturated* constructor application of the form @dc t1..tk x1 .. xn@,
1024 -- where t1..tk are the *universally-qantified* type args of 'dc'
1025 exprIsConApp_maybe :: CoreExpr -> Maybe (DataCon, [Type], [CoreExpr])
1026
1027 exprIsConApp_maybe (Note _ expr)
1028   = exprIsConApp_maybe expr
1029         -- We ignore all notes.  For example,
1030         --      case _scc_ "foo" (C a b) of
1031         --                      C a b -> e
1032         -- should be optimised away, but it will be only if we look
1033         -- through the SCC note.
1034
1035 exprIsConApp_maybe (Cast expr co)
1036   =     -- Here we do the KPush reduction rule as described in the FC paper
1037         -- The transformation applies iff we have
1038         --      (C e1 ... en) `cast` co
1039         -- where co :: (T t1 .. tn) ~ to_ty
1040         -- The left-hand one must be a T, because exprIsConApp returned True
1041         -- but the right-hand one might not be.  (Though it usually will.)
1042
1043     case exprIsConApp_maybe expr of {
1044         Nothing                          -> Nothing ;
1045         Just (dc, _dc_univ_args, dc_args) -> 
1046
1047     let (_from_ty, to_ty) = coercionKind co
1048         dc_tc = dataConTyCon dc
1049     in
1050     case splitTyConApp_maybe to_ty of {
1051         Nothing -> Nothing ;
1052         Just (to_tc, to_tc_arg_tys) 
1053                 | dc_tc /= to_tc -> Nothing
1054                 -- These two Nothing cases are possible; we might see 
1055                 --      (C x y) `cast` (g :: T a ~ S [a]),
1056                 -- where S is a type function.  In fact, exprIsConApp
1057                 -- will probably not be called in such circumstances,
1058                 -- but there't nothing wrong with it 
1059
1060                 | otherwise  ->
1061     let
1062         tc_arity       = tyConArity dc_tc
1063         dc_univ_tyvars = dataConUnivTyVars dc
1064         dc_ex_tyvars   = dataConExTyVars dc
1065         arg_tys        = dataConRepArgTys dc
1066
1067         dc_eqs :: [(Type,Type)]   -- All equalities from the DataCon
1068         dc_eqs = [(mkTyVarTy tv, ty)   | (tv,ty) <- dataConEqSpec dc] ++
1069                  [getEqPredTys eq_pred | eq_pred <- dataConEqTheta dc]
1070
1071         (ex_args, rest1)    = splitAtList dc_ex_tyvars dc_args
1072         (co_args, val_args) = splitAtList dc_eqs rest1
1073
1074         -- Make the "theta" from Fig 3 of the paper
1075         gammas = decomposeCo tc_arity co
1076         theta  = zipOpenTvSubst (dc_univ_tyvars ++ dc_ex_tyvars)
1077                                 (gammas         ++ stripTypeArgs ex_args)
1078
1079           -- Cast the existential coercion arguments
1080         cast_co (ty1, ty2) (Type co) 
1081           = Type $ mkSymCoercion (substTy theta ty1)
1082                    `mkTransCoercion` co
1083                    `mkTransCoercion` (substTy theta ty2)
1084         cast_co _ other_arg = pprPanic "cast_co" (ppr other_arg)
1085         new_co_args = zipWith cast_co dc_eqs co_args
1086   
1087           -- Cast the value arguments (which include dictionaries)
1088         new_val_args = zipWith cast_arg arg_tys val_args
1089         cast_arg arg_ty arg = mkCoerce (substTy theta arg_ty) arg
1090     in
1091 #ifdef DEBUG
1092     let dump_doc = vcat [ppr dc,      ppr dc_univ_tyvars, ppr dc_ex_tyvars,
1093                          ppr arg_tys, ppr dc_args,        ppr _dc_univ_args,
1094                          ppr ex_args, ppr val_args]
1095     in
1096     ASSERT2( coreEqType _from_ty (mkTyConApp dc_tc _dc_univ_args), dump_doc )
1097     ASSERT2( all isTypeArg (ex_args ++ co_args), dump_doc )
1098     ASSERT2( equalLength val_args arg_tys, dump_doc )
1099 #endif
1100
1101     Just (dc, to_tc_arg_tys, ex_args ++ new_co_args ++ new_val_args)
1102     }}
1103
1104 exprIsConApp_maybe expr 
1105   = analyse expr [] 
1106   where
1107     analyse (App fun arg) args = analyse fun (arg:args)
1108     analyse fun@(Lam {})  args = beta fun [] args 
1109
1110     analyse (Var fun) args
1111         | Just con <- isDataConWorkId_maybe fun
1112         , is_saturated
1113         , let (univ_ty_args, rest_args) = splitAtList (dataConUnivTyVars con) args
1114         = Just (con, stripTypeArgs univ_ty_args, rest_args)
1115
1116         -- Look through dictionary functions; see Note [Unfolding DFuns]
1117         | DFunUnfolding con ops <- unfolding
1118         , is_saturated
1119         , let (dfun_tvs, _cls, dfun_res_tys) = tcSplitDFunTy (idType fun)
1120               subst = zipOpenTvSubst dfun_tvs (stripTypeArgs (takeList dfun_tvs args))
1121         = Just (con, substTys subst dfun_res_tys, 
1122                      [mkApps op args | op <- ops])
1123
1124         -- Look through unfoldings, but only cheap ones, because
1125         -- we are effectively duplicating the unfolding
1126         | CoreUnfolding { uf_expandable = expand_me, uf_tmpl = rhs } <- unfolding
1127         , expand_me = -- pprTrace "expanding" (ppr fun $$ ppr rhs) $
1128                       analyse rhs args
1129         where
1130           is_saturated = count isValArg args == idArity fun
1131           unfolding = idUnfolding fun
1132
1133     analyse _ _ = Nothing
1134
1135     -----------
1136     in_scope = mkInScopeSet (exprFreeVars expr)
1137
1138     -----------
1139     beta (Lam v body) pairs (arg : args) 
1140         | isTypeArg arg
1141         = beta body ((v,arg):pairs) args 
1142
1143     beta (Lam {}) _ _    -- Un-saturated, or not a type lambda
1144         = Nothing
1145
1146     beta fun pairs args
1147         = case analyse (substExpr subst fun) args of
1148             Nothing  -> -- pprTrace "Bale out! exprIsConApp_maybe" doc $
1149                         Nothing
1150             Just ans -> -- pprTrace "Woo-hoo! exprIsConApp_maybe" doc $
1151                         Just ans
1152         where
1153           subst = mkOpenSubst in_scope pairs
1154           -- doc = vcat [ppr fun, ppr expr, ppr pairs, ppr args]
1155
1156
1157 stripTypeArgs :: [CoreExpr] -> [Type]
1158 stripTypeArgs args = ASSERT2( all isTypeArg args, ppr args )
1159                      [ty | Type ty <- args]
1160 \end{code}
1161
1162 Note [Unfolding DFuns]
1163 ~~~~~~~~~~~~~~~~~~~~~~
1164 DFuns look like
1165
1166   df :: forall a b. (Eq a, Eq b) -> Eq (a,b)
1167   df a b d_a d_b = MkEqD (a,b) ($c1 a b d_a d_b)
1168                                ($c2 a b d_a d_b)
1169
1170 So to split it up we just need to apply the ops $c1, $c2 etc
1171 to the very same args as the dfun.  It takes a little more work
1172 to compute the type arguments to the dictionary constructor.
1173