Need to tidy the expression before compiling it, purely in order to
clone the ids in case of clashes.
\begin{code}
module CoreTidy (
\begin{code}
module CoreTidy (
+ tidyCorePgm, tidyExpr, tidyCoreExpr,
tidyBndr, tidyBndrs
) where
tidyBndr, tidyBndrs
) where
init_tidy_env us = (us, orig_env, initTidyOccEnv avoids, emptyVarEnv)
avoids = [getOccName bndr | bndr <- bindersOfBinds binds_in,
isGlobalName (idName bndr)]
init_tidy_env us = (us, orig_env, initTidyOccEnv avoids, emptyVarEnv)
avoids = [getOccName bndr | bndr <- bindersOfBinds binds_in,
isGlobalName (idName bndr)]
+
+
+tidyCoreExpr :: CoreExpr -> IO CoreExpr
+tidyCoreExpr expr
+ = do { us <- mkSplitUniqSupply 't' -- for "tidy"
+ ; let (expr',_) = initUs us (tidyExpr emptyTidyEnv expr)
+ ; return expr'
+ }
import CoreUtils ( coreBindsSize )
import CoreTidy ( tidyCorePgm )
import CoreSat
import CoreUtils ( coreBindsSize )
import CoreTidy ( tidyCorePgm )
import CoreSat
+import CoreTidy ( tidyCoreExpr )
import CoreToStg ( coreToStg )
import SimplStg ( stg2stg )
import CodeGen ( codeGen )
import CoreToStg ( coreToStg )
import SimplStg ( stg2stg )
import CodeGen ( codeGen )
import HscStats ( ppSourceStats )
import HscTypes ( ModDetails, ModIface(..), PersistentCompilerState(..),
PersistentRenamerState(..), ModuleLocation(..),
import HscStats ( ppSourceStats )
import HscTypes ( ModDetails, ModIface(..), PersistentCompilerState(..),
PersistentRenamerState(..), ModuleLocation(..),
- HomeSymbolTable, InteractiveContext(..), TyThing(..),
+ HomeSymbolTable, InteractiveContext(..),
NameSupply(..), PackageRuleBase, HomeIfaceTable,
NameSupply(..), PackageRuleBase, HomeIfaceTable,
- typeEnvClasses, typeEnvTyCons, emptyIfaceTable,
- extendLocalRdrEnv
+ typeEnvClasses, typeEnvTyCons, emptyIfaceTable
)
import FiniteMap ( FiniteMap, plusFM, emptyFM, addToFM )
import OccName ( OccName )
import Name ( Name, nameModule, nameOccName, getName, isGlobalName,
)
import FiniteMap ( FiniteMap, plusFM, emptyFM, addToFM )
import OccName ( OccName )
import Name ( Name, nameModule, nameOccName, getName, isGlobalName,
- emptyNameEnv, extendNameEnvList
)
import Module ( Module, lookupModuleEnvByName )
)
import Module ( Module, lookupModuleEnvByName )
-- Simplify it
; simpl_expr <- simplifyExpr dflags pcs2 hst ds_expr
-- Simplify it
; simpl_expr <- simplifyExpr dflags pcs2 hst ds_expr
+ -- Tidy it (temporary, until coreSat does cloning)
+ ; tidy_expr <- tidyCoreExpr simpl_expr
+
- ; sat_expr <- coreSatExpr dflags simpl_expr
+ ; sat_expr <- coreSatExpr dflags tidy_expr
-- Convert to BCOs
; bcos <- coreExprToBCOs dflags sat_expr
-- Convert to BCOs
; bcos <- coreExprToBCOs dflags sat_expr