[project @ 1998-04-10 16:29:46 by simonpj]
authorsimonpj <unknown>
Fri, 10 Apr 1998 16:29:49 +0000 (16:29 +0000)
committersimonpj <unknown>
Fri, 10 Apr 1998 16:29:49 +0000 (16:29 +0000)
Another obscure -prof bug in SimplVar

ghc/compiler/basicTypes/MkId.lhs
ghc/compiler/simplCore/SimplVar.lhs

index 414ef2e..f9f7710 100644 (file)
@@ -322,9 +322,11 @@ mkDictSelId name clas ty
     field_lbl = mkFieldLabel name ty tag
     tag       = assoc "MkId.mkDictSelId" ((sc_sel_ids ++ op_sel_ids) `zip` allFieldLabelTags) sel_id
 
-    info      = setInlinePragInfo IWantToBeINLINEd $
+    info      = setInlinePragInfo IMustBeINLINEd $
                setUnfoldingInfo  unfolding noIdInfo
        -- The always-inline thing means we don't need any other IdInfo
+       -- We need "Must" inline because we don't create any bindigs for
+       -- the selectors.
 
     unfolding = mkUnfolding rhs
 
index 7c1340b..0a7b85a 100644 (file)
@@ -72,12 +72,13 @@ completeVar env inline_call var args result_ty
        -- Look for an unfolding. There's a binding for the
        -- thing, but perhaps we want to inline it anyway
   |    has_unfolding
-    && (not essential_unfoldings_only || idMustBeINLINEd var)
-       -- If "essential_unfoldings_only" is true we do no inlinings at all,
-       -- EXCEPT for things that absolutely have to be done
-       -- (see comments with idMustBeINLINEd)
-    && (inline_call || ok_to_inline)
-    && costCentreOk (getEnclosingCC env) (coreExprCc unf_template)
+    && (idMustBeINLINEd var || 
+       (not essential_unfoldings_only 
+               -- If "essential_unfoldings_only" is true we do no inlinings at all,
+               -- EXCEPT for things that absolutely have to be done
+               -- (see comments with idMustBeINLINEd)
+         && (inline_call || ok_to_inline)
+         && costCentreOk (getEnclosingCC env) (coreExprCc unf_template)))
   =
 {-
     pprTrace "Unfolding" (ppr var) $