import CoreArity ( exprArity )
import Var
import Id ( idType, isOneShotLambda, idUnfolding,
- setIdNewStrictness, mkWorkerId,
+ setIdStrictness, mkWorkerId,
setInlineActivation, setIdUnfolding,
setIdArity )
import Type ( Type )
import IdInfo
-import NewDemand ( Demand(..), StrictSig(..), DmdType(..), DmdResult(..),
+import Demand ( Demand(..), StrictSig(..), DmdType(..), DmdResult(..),
Demands(..), mkTopDmdType, isBotRes, returnsCPR, topSig, isAbsent
)
import UniqSupply
Note [Don't w/w inline things (a)]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It's very important to refrain from w/w-ing an INLINE function
-because the wrapepr will then overwrite the InlineRule unfolding.
+because the wrapper will then overwrite the InlineRule unfolding.
It was wrong with the old InlineMe Note too: if we do so by mistake
we transform
where
fn_info = idInfo fn_id
- maybe_fn_dmd = newDemandInfo fn_info
+ maybe_fn_dmd = demandInfo fn_info
inline_act = inlinePragmaActivation (inlinePragInfo fn_info)
-- In practice it always will have a strictness
-- signature, even if it's a uninformative one
- strict_sig = newStrictnessInfo fn_info `orElse` topSig
+ strict_sig = strictnessInfo fn_info `orElse` topSig
StrictSig (DmdType env wrap_dmds res_info) = strict_sig
-- new_fn_id has the DmdEnv zapped.
-- (c) it becomes incorrect as things are cloned, because
-- we don't push the substitution into it
new_fn_id | isEmptyVarEnv env = fn_id
- | otherwise = fn_id `setIdNewStrictness`
+ | otherwise = fn_id `setIdStrictness`
StrictSig (mkTopDmdType wrap_dmds res_info)
is_fun = notNull wrap_dmds
| otherwise = thing_inside
where
unfolding = idUnfolding fn_id
- inline_rule = mkInlineRule InlUnSat rhs (unfoldingArity unfolding)
+ inline_rule = mkInlineRule unSaturatedOk rhs (unfoldingArity unfolding)
---------------------
splitFun :: Id -> IdInfo -> [Demand] -> DmdResult -> Activation -> Expr Var
-- can't think of a compelling reason. (In ptic, INLINE things are
-- not w/wd). However, the RuleMatchInfo is not transferred since
-- it does not make sense for workers to be constructorlike.
- `setIdNewStrictness` StrictSig (mkTopDmdType work_demands work_res_info)
+ `setIdStrictness` StrictSig (mkTopDmdType work_demands work_res_info)
-- Even though we may not be at top level,
-- it's ok to give it an empty DmdEnv
`setIdArity` (exprArity work_rhs)