| Just arity <- inlinePragmaSat inline_prag
-- Add an Unfolding for an INLINE (but not for NOINLINE)
-- And eta-expand the RHS; see Note [Eta-expanding INLINE things]
- = (gbl_id `setIdUnfolding` mkInlineRule rhs (Just (dict_arity + arity)),
- -- NB: The arity in the InlineRule takes account of the dictionaries
- etaExpand arity rhs)
+ , let real_arity = dict_arity + arity
+ -- NB: The arity in the InlineRule takes account of the dictionaries
+ = (gbl_id `setIdUnfolding` mkInlineRule rhs (Just real_arity),
+ etaExpand real_arity rhs)
| otherwise
= (gbl_id `setIdUnfolding` mkInlineRule rhs Nothing, rhs)
data AutoScc = NoSccs
| AddSccs Module (Id -> Bool)
-- The (Id->Bool) says which Ids to add SCCs to
+-- But we never add a SCC to function marked INLINE
addAutoScc :: AutoScc
-> Id -- Binder
addAutoScc NoSccs _ rhs
= rhs
+addAutoScc _ id rhs | isInlinePragma (idInlinePragma id)
+ = rhs
addAutoScc (AddSccs mod add_scc) id rhs
| add_scc id = mkSCC (mkAutoCC id mod NotCafCC) rhs
| otherwise = rhs