diff options
Diffstat (limited to 'compiler/codeGen')
| -rw-r--r-- | compiler/codeGen/StgCmmPrim.hs | 32 | 
1 files changed, 17 insertions, 15 deletions
| diff --git a/compiler/codeGen/StgCmmPrim.hs b/compiler/codeGen/StgCmmPrim.hs index a6f3395425..714e544f8f 100644 --- a/compiler/codeGen/StgCmmPrim.hs +++ b/compiler/codeGen/StgCmmPrim.hs @@ -2174,9 +2174,10 @@ emitCopyArray :: (CmmExpr -> CmmExpr -> CmmExpr -> CmmExpr -> ByteOff                -> CmmExpr        -- ^ offset in destination array                -> WordOff        -- ^ number of elements to copy                -> FCode () -emitCopyArray copy src0 src_off dst0 dst_off0 n = do -    dflags <- getDynFlags +emitCopyArray copy src0 src_off dst0 dst_off0 n =      when (n /= 0) $ do +        dflags <- getDynFlags +          -- Passed as arguments (be careful)          src     <- assignTempE src0          dst     <- assignTempE dst0 @@ -2236,23 +2237,24 @@ emitCopySmallArray :: (CmmExpr -> CmmExpr -> CmmExpr -> CmmExpr -> ByteOff                     -> CmmExpr        -- ^ offset in destination array                     -> WordOff        -- ^ number of elements to copy                     -> FCode () -emitCopySmallArray copy src0 src_off dst0 dst_off n = do -    dflags <- getDynFlags +emitCopySmallArray copy src0 src_off dst0 dst_off n = +    when (n /= 0) $ do +        dflags <- getDynFlags -    -- Passed as arguments (be careful) -    src     <- assignTempE src0 -    dst     <- assignTempE dst0 +        -- Passed as arguments (be careful) +        src     <- assignTempE src0 +        dst     <- assignTempE dst0 -    -- Set the dirty bit in the header. -    emit (setInfo dst (CmmLit (CmmLabel mkSMAP_DIRTY_infoLabel))) +        -- Set the dirty bit in the header. +        emit (setInfo dst (CmmLit (CmmLabel mkSMAP_DIRTY_infoLabel))) -    dst_p <- assignTempE $ cmmOffsetExprW dflags -             (cmmOffsetB dflags dst (smallArrPtrsHdrSize dflags)) dst_off -    src_p <- assignTempE $ cmmOffsetExprW dflags -             (cmmOffsetB dflags src (smallArrPtrsHdrSize dflags)) src_off -    let bytes = wordsToBytes dflags n +        dst_p <- assignTempE $ cmmOffsetExprW dflags +                 (cmmOffsetB dflags dst (smallArrPtrsHdrSize dflags)) dst_off +        src_p <- assignTempE $ cmmOffsetExprW dflags +                 (cmmOffsetB dflags src (smallArrPtrsHdrSize dflags)) src_off +        let bytes = wordsToBytes dflags n -    copy src dst dst_p src_p bytes +        copy src dst dst_p src_p bytes  -- | Takes an info table label, a register to return the newly  -- allocated array in, a source array, an offset in the source array, | 
