diff options
author | Patrick Palka <patrick@parcs.ath.cx> | 2013-06-26 10:21:06 -0400 |
---|---|---|
committer | Austin Seipp <aseipp@pobox.com> | 2013-07-06 17:21:36 -0500 |
commit | a5913a23bcade044e4c693f05e8a60605c8d5618 (patch) | |
tree | 3fa23095b8be61a32f086e266865d01589d49d28 /compiler/codeGen/StgCmmMonad.hs | |
parent | 405a20c671df30a977f72f6ee79a3dfc4dac60e5 (diff) | |
download | haskell-a5913a23bcade044e4c693f05e8a60605c8d5618.tar.gz |
Avoid needlessly splitting a UniqSupply when extracting a Unique (#8041)
In many places, 'splitUniqSupply' + 'uniqFromSupply' is used to split a
UniqSupply into a Unique and a new UniqSupply. In such places we should
instead use the more efficient and more appropriate
'takeUniqFromSupply' (or equivalent).
Not only is the former method slower, it also generates and throws away
an extra Unique.
Signed-off-by: Austin Seipp <aseipp@pobox.com>
Diffstat (limited to 'compiler/codeGen/StgCmmMonad.hs')
-rw-r--r-- | compiler/codeGen/StgCmmMonad.hs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/codeGen/StgCmmMonad.hs b/compiler/codeGen/StgCmmMonad.hs index 3f361e3f51..251b679078 100644 --- a/compiler/codeGen/StgCmmMonad.hs +++ b/compiler/codeGen/StgCmmMonad.hs @@ -446,8 +446,10 @@ newUniqSupply = do newUnique :: FCode Unique newUnique = do - us <- newUniqSupply - return (uniqFromSupply us) + state <- getState + let (u,us') = takeUniqFromSupply (cgs_uniqs state) + setState $ state { cgs_uniqs = us' } + return u ------------------ getInfoDown :: FCode CgInfoDownwards |