summaryrefslogtreecommitdiff
path: root/testsuite/tests/codeGen/should_run/T8256.hs
blob: 7f8314c8df343d484aec59ce8679ffa133798037 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{-# LANGUAGE MagicHash, UnboxedTuples #-}



import GHC.Prim

import Data.Vector.Storable.Mutable
import Foreign.Ptr
import GHC.ST
import Data.Primitive.ByteArray
import Control.Monad.Primitive



sameByteArray  :: Control.Monad.Primitive.PrimMonad m => ByteArray -> ByteArray -> m Bool
sameByteArray ar1 ar2 =
        do  v1 <- unsafeThawByteArray ar1
            v2 <- unsafeThawByteArray ar2
            return $ sameMutableByteArray v1 v2

pf0 (ByteArray by) =  ByteArray ( prefetchByteArray0# by 1#)

pf1 (ByteArray by) =  ByteArray  (prefetchByteArray1# by 1#)

pf2 (ByteArray by) = ByteArray (  prefetchByteArray2# by 1#)

pf3 (ByteArray by) = ByteArray (  prefetchByteArray3# by  1#)


monoSame v f = sameByteArray v (f v)




main :: IO ()
main = do  
    mv1 <- newByteArray 17
    v1 <- unsafeFreezeByteArray mv1
    return () 
    t0<- monoSame v1 pf0 
    t1 <- monoSame v1 pf1 
    t2 <- monoSame v1 pf2 
    t3 <- monoSame v1 pf3
    if t0 && t1 && t2 && t3  then putStrLn "success" else error "bad prefetch operation! please report"