[GHC] #13890: Loss of inlining after strictness analysis
GHC
ghc-devs at haskell.org
Wed Jun 28 13:18:03 UTC 2017
#13890: Loss of inlining after strictness analysis
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
While investigating something else I saw this in the final `Tidy Core`
after optimisation
{{{
join {
wild_X5jU [Dmd=<S,1*U>]
:: (# State# RealWorld, Array Int HValue #)
[LclId[JoinId(0)],
Unf=Unf{Src=InlineStable, TopLvl=False, Value=False,
ConLike=False, WorkFree=False,
Expandable=False,
Guidance=ALWAYS_IF(arity=0,unsat_ok=True,boring_ok=False)
Tmpl= jump $j1_s5RP w_s5Qs}]
wild_X5jU = jump $j1_s5RP ww_s5Qw } in
jump wild_X5jU;
}}}
That's ridiculous! Why wasn't it inlined at its (only!) use site?
It turns out that
* The original `InlineStable` came from when `wild` was lambda-bound.
See `Note [Case binders and join points]` in `Simplify.hs`
* But then worker-wrapper let-binds that previously-lambda-boudn arg
in `WwLib.mkWWstr_one`. But it does not remove the unfolding.
That's bad; in contrast, when we beta-reduce we are careful to
remove the unfolding; see `Note [Zap unfolding when beta-reducing]`
in `Simplify.hs`.
* We don't `preInlineUnconditionally` things with stable unfoldings; see
`Note [Stable unfoldings and preInlineUnconditionally]` in `SimplUtils`
Net result: it doesn't get inlined at all!
Easy fix: zap the unfolding in `mkWWstr_one` as well.
I'm unhappy with the whole business of passing both boxed and
unboxed versions, described in `Note [Case binders and join points]`.
It smells wrong, and this ticket is another canary.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13890>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list