diff options
author | Sebastian Graf <sebastian.graf@kit.edu> | 2019-02-21 16:02:38 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-02-23 22:02:10 -0500 |
commit | b85068f6843eb0b16ff898e0dfa811fede8e1ca1 (patch) | |
tree | 4387e09cce7b0536822c55576dcc5958ddf2aabb /compiler | |
parent | 1059e234b04a041291cc422cad715011011724d1 (diff) | |
download | haskell-b85068f6843eb0b16ff898e0dfa811fede8e1ca1.tar.gz |
Include closure header size in StgLamLift's estimations
While playing around with late lambda lifting, I realised that
StgLamLift.Analysis doesn't consider the removed closure header in its
allocation estimations.
That's because contrary to what I thought, the total word count returned
by `mkVirtHeapOffsets` doesn't include the size of the closure header.
We just add the header size manually now.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/simplStg/StgLiftLams/Analysis.hs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/compiler/simplStg/StgLiftLams/Analysis.hs b/compiler/simplStg/StgLiftLams/Analysis.hs index 7fb60df0b0..3cdbfcbb3f 100644 --- a/compiler/simplStg/StgLiftLams/Analysis.hs +++ b/compiler/simplStg/StgLiftLams/Analysis.hs @@ -484,13 +484,12 @@ rhsLambdaBndrs (StgRhsClosure _ _ _ bndrs _) = map binderInfoBndr bndrs -- | The size in words of a function closure closing over the given 'Id's, -- including the header. closureSize :: DynFlags -> [Id] -> WordOff -closureSize dflags ids = words +closureSize dflags ids = words + sTD_HDR_SIZE dflags + -- We go through sTD_HDR_SIZE rather than fixedHdrSizeW so that we don't + -- optimise differently when profiling is enabled. where (words, _, _) -- Functions have a StdHeader (as opposed to ThunkHeader). - -- Note that mkVirtHeadOffsets will account for profiling headers, so - -- lifting decisions vary if we begin to profile stuff. Maybe we shouldn't - -- do this or deactivate profiling in @dflags@? = StgCmmLayout.mkVirtHeapOffsets dflags StgCmmLayout.StdHeader . StgCmmClosure.addIdReps . StgCmmClosure.nonVoidIds |