Document codegen nondeterminism
authorBartosz Nitka <niteria@gmail.com>
Tue, 5 Jul 2016 16:42:44 +0000 (09:42 -0700)
committerBartosz Nitka <niteria@gmail.com>
Tue, 5 Jul 2016 16:44:06 +0000 (09:44 -0700)
We don't care about bit-for-bit reproducibility, so
I'm just documenting this as a possible source.

GHC Trac: #4012

compiler/stgSyn/CoreToStg.hs

index 273cbdb..2d9ca8c 100644 (file)
@@ -43,6 +43,7 @@ import DynFlags
 import ForeignCall
 import Demand           ( isUsedOnce )
 import PrimOp           ( PrimCall(..) )
+import UniqFM
 
 import Data.Maybe    (isJust)
 import Control.Monad (liftM, ap)
@@ -1002,7 +1003,10 @@ lookupFVInfo fvs id
 
 -- Non-top-level things only, both type variables and ids
 getFVs :: FreeVarsInfo -> [Var]
-getFVs fvs = [id | (id, how_bound, _) <- varEnvElts fvs,
+getFVs fvs = [id | (id, how_bound, _) <- nonDetEltsUFM fvs,
+  -- It's OK to use nonDetEltsUFM here because we're not aiming for
+  -- bit-for-bit determinism.
+  -- See Note [Unique Determinism and code generation]
                     not (topLevelBound how_bound) ]
 
 getFVSet :: FreeVarsInfo -> VarSet