From: Ian Lynagh Date: Wed, 22 Aug 2007 14:34:22 +0000 (+0000) Subject: Use unsafeDupableInterleaveIO in UniqSupply X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=19b0b165a24606dbdb1f4dd7728da7346845a5a0 Use unsafeDupableInterleaveIO in UniqSupply 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. --- diff --git a/compiler/basicTypes/UniqSupply.lhs b/compiler/basicTypes/UniqSupply.lhs index 8dcf595..8e3ac96 100644 --- a/compiler/basicTypes/UniqSupply.lhs +++ b/compiler/basicTypes/UniqSupply.lhs @@ -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 ->