Add a missing write barrier to small array writes
authorÖmer Sinan Ağacan <omeragacan@gmail.com>
Sat, 6 Oct 2018 14:53:06 +0000 (17:53 +0300)
committerÖmer Sinan Ağacan <omeragacan@gmail.com>
Sat, 6 Oct 2018 14:54:15 +0000 (17:54 +0300)
Write barriers for large array writes were added in D2525, as a part of #12469.
However it seems we forgot about small arrays. This patch adds the same write
barrier to small array writes.

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #12469

Differential Revision: https://phabricator.haskell.org/D5209

compiler/codeGen/StgCmmPrim.hs

index 266ab3a..f5437c0 100644 (file)
@@ -2295,6 +2295,7 @@ doWriteSmallPtrArrayOp :: CmmExpr
 doWriteSmallPtrArrayOp addr idx val = do
     dflags <- getDynFlags
     let ty = cmmExprType dflags val
+    emitPrimCall [] MO_WriteBarrier [] -- #12469
     mkBasicIndexedWrite (smallArrPtrsHdrSize dflags) Nothing addr ty idx val
     emit (setInfo addr (CmmLit (CmmLabel mkSMAP_DIRTY_infoLabel)))