From 11b51820681cce94c5bc733c67a851d1878c97b7 Mon Sep 17 00:00:00 2001 From: Geoffrey Mainland <mainland@apeiron.net> Date: Wed, 10 Jul 2013 19:13:45 +0100 Subject: [PATCH] Push test of vector size into un-Boxing. Constructor specialization wasn't occurring prior to this change. --- Data/Vector/Fusion/Bundle/Monadic.hs | 33 ++++++++-------------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/Data/Vector/Fusion/Bundle/Monadic.hs b/Data/Vector/Fusion/Bundle/Monadic.hs index 922cbc2..23e47d9 100644 --- a/Data/Vector/Fusion/Bundle/Monadic.hs +++ b/Data/Vector/Fusion/Bundle/Monadic.hs @@ -1396,23 +1396,12 @@ mzipWithHackM p q v1 v2 = {-# INLINE leap #-} leap i | i+4*m > n = return Done - | n < pREFETCH_THRESH = let Box !x1 = basicUnsafeIndexAsMultiM v1 i - Box !x2 = basicUnsafeIndexAsMultiM v1 (i+m) - Box !x3 = basicUnsafeIndexAsMultiM v1 (i+2*m) - Box !x4 = basicUnsafeIndexAsMultiM v1 (i+3*m) - Box !y1 = basicUnsafeIndexAsMultiM v2 i - Box !y2 = basicUnsafeIndexAsMultiM v2 (i+m) - Box !y3 = basicUnsafeIndexAsMultiM v2 (i+2*m) - Box !y4 = basicUnsafeIndexAsMultiM v2 (i+3*m) - in - do { z1 <- q x1 y1 - ; z2 <- q x2 y2 - ; z3 <- q x3 y3 - ; z4 <- q x4 y4 - ; return $ Yield (Leap z1 z2 z3 z4) (i+4*m) - } - | otherwise = let Box !v1' = basicUnsafePrefetchDataM v1 i mAGIC_PREFETCH_CONSTANT - Box !v2' = basicUnsafePrefetchDataM v2 i mAGIC_PREFETCH_CONSTANT + | otherwise = let Box !v1' = if n < pREFETCH_THRESH + then Box v1 + else basicUnsafePrefetchDataM v1 i mAGIC_PREFETCH_CONSTANT + Box !v2' = if n < pREFETCH_THRESH + then Box v2 + else basicUnsafePrefetchDataM v2 i mAGIC_PREFETCH_CONSTANT Box !x1 = basicUnsafeIndexAsMultiM v1' i Box !x2 = basicUnsafeIndexAsMultiM v1' (i+m) Box !x3 = basicUnsafeIndexAsMultiM v1' (i+2*m) @@ -1580,13 +1569,9 @@ fromPackedVector v = v `seq` n `seq` Bundle (Stream step 0) {-# INLINE leap #-} leap i | i+4*m > n = return Done - | n < pREFETCH_THRESH = let Box !x1 = basicUnsafeIndexAsMultiM v i - Box !x2 = basicUnsafeIndexAsMultiM v (i+m) - Box !x3 = basicUnsafeIndexAsMultiM v (i+2*m) - Box !x4 = basicUnsafeIndexAsMultiM v (i+3*m) - in - return $ Yield (Leap x1 x2 x3 x4) (i+4*m) - | otherwise = let Box !v' = basicUnsafePrefetchDataM v i mAGIC_PREFETCH_CONSTANT + | otherwise = let Box !v' = if n < pREFETCH_THRESH + then Box v + else basicUnsafePrefetchDataM v i mAGIC_PREFETCH_CONSTANT Box !x1 = basicUnsafeIndexAsMultiM v' i Box !x2 = basicUnsafeIndexAsMultiM v' (i+m) Box !x3 = basicUnsafeIndexAsMultiM v' (i+2*m) -- GitLab