diff options
author | Sebastian Graf <sebastian.graf@kit.edu> | 2019-02-21 16:02:38 +0100 |
---|---|---|
committer | Sebastian Graf <sebastian.graf@kit.edu> | 2019-02-21 16:02:38 +0100 |
commit | 07bba23dccc51c9d7f286005495f596ce1554471 (patch) | |
tree | 3b8c8e39f375ef5b1b2d7b19c5d3dea808bef826 | |
parent | e204431e5a5e2fd16da52b04bda2798f16c51344 (diff) | |
download | haskell-wip/std-hdr-llf.tar.gz |
Include closure header size in StgLamLift's estimationswip/std-hdr-llf
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.
-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 |