[Git][ghc/ghc][wip/T24513] rts: Fix SET_HDR initialization of retainer set
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Wed Mar 6 22:06:23 UTC 2024
Ben Gamari pushed to branch wip/T24513 at Glasgow Haskell Compiler / GHC
Commits:
c4c57631 by Ben Gamari at 2024-03-06T17:06:17-05:00
rts: Fix SET_HDR initialization of retainer set
This fixes a regression in retainer set profiling introduced by
b0293f78cb6acf2540389e22bdda420d0ab874da. Prior to that commit
the heap traversal word would be initialized by `SET_HDR` using
`LDV_RECORD_CREATE`. However, the commit added a `doingLDVProfiling`
check in `LDV_RECORD_CREATE`, meaning that this initialization no longer
happened.
Given that this initialization was awkwardly indirectly anyways, I have
fixed this by explicitly initializating the heap traversal word to
`NULL` in `SET_PROF_HDR`. This is equivalent to the previous behavior,
but much more direct.
Fixes #24513.
- - - - -
1 changed file:
- rts/include/rts/storage/ClosureMacros.h
Changes:
=====================================
rts/include/rts/storage/ClosureMacros.h
=====================================
@@ -147,17 +147,10 @@ EXTERN_INLINE StgHalfWord GET_TAG(const StgClosure *con)
#if defined(PROFILING)
/*
The following macro works for both retainer profiling and LDV profiling. For
- retainer profiling, 'era' remains 0, so by setting the 'ldvw' field we also set
- 'rs' to zero.
-
- Note that we don't have to bother handling the 'flip' bit properly[1] since the
- retainer profiling code will just set 'rs' to NULL upon visiting a closure with
- an invalid 'flip' bit anyways.
-
- See Note [Profiling heap traversal visited bit] for details.
-
- [1]: Technically we should set 'rs' to `NULL | flip`.
+ retainer profiling, we set 'trav' to 0, which is an invalid
+ RetainerSet.
*/
+
/*
MP: Various other places use the check era > 0 to check whether LDV profiling
is enabled. The use of these predicates here is the reason for including RtsFlags.h in
@@ -168,17 +161,14 @@ EXTERN_INLINE StgHalfWord GET_TAG(const StgClosure *con)
*/
#define SET_PROF_HDR(c, ccs_) \
{ \
- (c)->header.prof.ccs = ccs_; \
- if (doingLDVProfiling()) { \
- LDV_RECORD_CREATE((c)); \
- } \
-\
- if (doingRetainerProfiling()) { \
- LDV_RECORD_CREATE((c)); \
- }; \
- if (doingErasProfiling()){ \
- ERA_RECORD_CREATE((c)); \
- }; \
+ (c)->header.prof.ccs = ccs_; \
+ if (doingLDVProfiling()) { \
+ LDV_RECORD_CREATE((c)); \
+ } else if (doingRetainerProfiling()) { \
+ (c)->header.prof.trav = 0; \
+ } else if (doingErasProfiling()){ \
+ ERA_RECORD_CREATE((c)); \
+ } \
}
#else
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/c4c57631ccf94acd87367831ff2c9e2ede154b39
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/c4c57631ccf94acd87367831ff2c9e2ede154b39
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240306/31e37455/attachment-0001.html>
More information about the ghc-commits
mailing list