summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-02-20 23:06:39 -0500
committerBen Gamari <ben@smart-cactus.org>2020-02-20 23:06:39 -0500
commitc50083ad57a463ef54ca26ea8fd353b14f9c5bcd (patch)
treebecd2a8ef565baf327f68622361e47d3174548da
parent185849ea3ce92fcb52d5ffbf3d73590a59dc1066 (diff)
parent2e922d4ee712a2d8a68511dcb4ce4c79cc8123f9 (diff)
downloadhaskell-c50083ad57a463ef54ca26ea8fd353b14f9c5bcd.tar.gz
Merge branch 'wip/gc/prefetch-mark' into gc-paper/base
-rw-r--r--rts/sm/NonMovingMark.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c
index b0fbb24416..375398ab63 100644
--- a/rts/sm/NonMovingMark.c
+++ b/rts/sm/NonMovingMark.c
@@ -850,6 +850,11 @@ static MarkQueueEnt markQueuePop (MarkQueue *q)
// marked first.
prefetchForRead(&new.mark_closure.p->header.info);
prefetchForRead(Bdescr((StgPtr) new.mark_closure.p));
+ {
+ struct NonmovingSegment *seg = nonmovingGetSegment((StgPtr) new.mark_closure.p);
+ nonmoving_block_idx blk_idx = nonmovingGetBlockIdx((StgPtr) new.mark_closure.p);
+ prefetchForRead(&seg->bitmap[blk_idx]);
+ }
q->prefetch_queue[i] = new;
i = (i + 1) % MARK_PREFETCH_QUEUE_DEPTH;
}