Use unsafeDupableInterleaveIO in UniqSupply
authorIan Lynagh <igloo@earth.li>
Wed, 22 Aug 2007 14:34:22 +0000 (14:34 +0000)
committerIan Lynagh <igloo@earth.li>
Wed, 22 Aug 2007 14:34:22 +0000 (14:34 +0000)
We'll need to change this if we ever use threads in GHC, but for now it
drops mkSplitUniqSupply from 35% time down below 0.1% when compiling
J.hs from #1136.

compiler/basicTypes/UniqSupply.lhs

index 8dcf595..8e3ac96 100644 (file)
@@ -28,6 +28,13 @@ import Unique
 import GHC.Exts
 import System.IO.Unsafe        ( unsafeInterleaveIO )
 
+#if __GLASGOW_HASKELL__ >= 607
+import GHC.IOBase (unsafeDupableInterleaveIO)
+#else
+unsafeDupableInterleaveIO :: IO a -> IO a
+unsafeDupableInterleaveIO = unsafeInterleaveIO
+#endif
+
 w2i x = word2Int# x
 i2w x = int2Word# x
 i2w_s x = (x :: Int#)
@@ -69,7 +76,7 @@ mkSplitUniqSupply (C# c#)
 
        -- This is one of the most hammered bits in the whole compiler
        mk_supply#
-         = unsafeInterleaveIO (
+         = unsafeDupableInterleaveIO (
                genSymZh    >>= \ (I# u#) ->
                mk_supply#  >>= \ s1 ->
                mk_supply#  >>= \ s2 ->