Local wrapper function remains in final program; result = extra closure allocation
I have a strange problem with a local function binding that is not being inlined. I've attached the repro code, build it like this:
$ ghc -O2 Haxl/Core/Monad.hs
There are several modules, but the one with the problem is Haxl/Core/Monad.hs
. In particular Haxl.Core.Monad.$fApplicativeGenHaxl2
, which contains this fragment:
let {
$wa4_s6YQ
$wa4_s6YQ =
\ w_s6YF _ ww1_s6YM _ _ w1_s6YI ->
case GHC.Prim.readMutVar# ipv7_X5Ne w1_s6YI
of _ { (# ipv10_X5QO, ipv11_X5QQ #) ->
case ipv11_X5QQ of _ {
Haxl.Core.Monad.IVarFull a2_a3kK -> case lvl6_r7qi of wild3_00 { };
Haxl.Core.Monad.IVarEmpty dt2_d4Vs ->
case GHC.Prim.writeMutVar#
ipv7_X5Ne (Haxl.Core.Monad.IVarFull w_s6YF) ipv10_X5QO
of s2#_a5OR { __DEFAULT ->
case GHC.Prim.readMutVar# dt2_d4Vs s2#_a5OR
of _ { (# ipv12_X5R0, ipv13_X5R2 #) ->
case GHC.Prim.readMutVar# ww1_s6YM ipv12_X5R0
of _ { (# ipv14_X5SS, ipv15_X5SU #) ->
letrec {
go_a5ti
go_a5ti =
\ ds10_a5tj ->
case ds10_a5tj of _ {
[] -> ipv15_X5SU;
: y_a5to ys_a5tp -> GHC.Types.: (y_a5to w_s6YF) (go_a5ti ys_a5tp)
}; } in
case go_a5ti ipv13_X5R2 of x'_a5P6 { __DEFAULT ->
case GHC.Prim.writeMutVar# ww1_s6YM x'_a5P6 ipv14_X5SS
of s2#1_a5P7 { __DEFAULT ->
(# s2#1_a5P7, Haxl.Core.Monad.cacheRequest6 #)
}
}
}
}
}
}
} } in
let {
a2_s6lH
a2_s6lH =
\ w_s6YF _ w2_s6YH w3_s6YI ->
case w2_s6YH
of _
{ Haxl.Core.Monad.SchedState ww1_s6YL ww2_s6YM ww3_s6YN ww4_s6YO ->
$wa4_s6YQ w_s6YF ww1_s6YL ww2_s6YM ww3_s6YN ww4_s6YO w3_s6YI
} } in
I want $wa4
to be inlined at its single occurrence in a2
. I believe the reason it is not being inlined is that a2
is a wrapper, but the situation seems silly because the wrapper isn't going away either, so we have a redundant closure being built (this is in my inner loop).
Trac metadata
Trac field | Value |
---|---|
Version | 7.8.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |