[commit: ghc] wip/std-hdr-llf: Include closure header size in StgLamLift's estimations (07bba23)
git at git.haskell.org
git at git.haskell.org
Thu Feb 21 15:13:38 UTC 2019
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/std-hdr-llf
Link : http://ghc.haskell.org/trac/ghc/changeset/07bba23dccc51c9d7f286005495f596ce1554471/ghc
>---------------------------------------------------------------
commit 07bba23dccc51c9d7f286005495f596ce1554471
Author: Sebastian Graf <sebastian.graf at kit.edu>
Date: Thu Feb 21 16:02:38 2019 +0100
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.
>---------------------------------------------------------------
07bba23dccc51c9d7f286005495f596ce1554471
compiler/simplStg/StgLiftLams/Analysis.hs | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/compiler/simplStg/StgLiftLams/Analysis.hs b/compiler/simplStg/StgLiftLams/Analysis.hs
index 7fb60df..3cdbfcb 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
More information about the ghc-commits
mailing list