import CoreSyn
import CoreUtils ( mkSCC )
-import CmdLineOpts ( opt_D_verbose_core2core, opt_D_dump_simpl_stats )
-import ErrUtils ( dumpIfSet )
+import CmdLineOpts ( DynFlags, DynFlag(..) )
+import ErrUtils ( dumpIfSet_dyn )
import CostCentre ( dupifyCC, CostCentre )
-import Id ( Id, idType )
+import Id ( Id )
import VarEnv
-import CoreLint ( beginPass, endPass )
-import PprCore
+import CoreLint ( showPass, endPass )
import SetLevels ( setLevels,
Level(..), tOP_LEVEL, ltMajLvl, ltLvl, isTopLvl
)
-import BasicTypes ( Unused )
-import Type ( isUnLiftedType )
-import Var ( TyVar )
import UniqSupply ( UniqSupply )
import List ( partition )
import Outputable
%************************************************************************
\begin{code}
-floatOutwards :: Bool -- True <=> float lambdas to top level
+floatOutwards :: DynFlags
+ -> Bool -- True <=> float lambdas to top level
-> UniqSupply
-> [CoreBind] -> IO [CoreBind]
-floatOutwards float_lams us pgm
+floatOutwards dflags float_lams us pgm
= do {
- beginPass float_msg ;
+ showPass dflags float_msg ;
let { annotated_w_levels = setLevels float_lams pgm us ;
(fss, binds_s') = unzip (map floatTopBind annotated_w_levels)
} ;
- dumpIfSet opt_D_verbose_core2core "Levels added:"
+ dumpIfSet_dyn dflags Opt_D_verbose_core2core "Levels added:"
(vcat (map ppr annotated_w_levels));
let { (tlets, ntlets, lams) = get_stats (sum_stats fss) };
- dumpIfSet opt_D_dump_simpl_stats "FloatOut stats:"
+ dumpIfSet_dyn dflags Opt_D_dump_simpl_stats "FloatOut stats:"
(hcat [ int tlets, ptext SLIT(" Lets floated to top level; "),
int ntlets, ptext SLIT(" Lets floated elsewhere; from "),
int lams, ptext SLIT(" Lambda groups")]);
- endPass float_msg
- opt_D_verbose_core2core {- no specific flag for dumping float-out -}
- (concat binds_s')
+ endPass dflags float_msg Opt_D_verbose_core2core (concat binds_s')
+ {- no specific flag for dumping float-out -}
}
where
float_msg | float_lams = "Float out (floating lambdas too)"