X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FDFMonad.hs;h=970cdcb943ae6f7b36b8bcd249c80fe4232fd9cf;hb=684fde094dc5b064b49dbef191ca07cb9a018e45;hp=e8afab42ad9e011b08fd8f9dd7208ebe6ec7700b;hpb=cd437edc8792e5dbcfaa6a6b9948364e9d9d08f3;p=ghc-hetmet.git diff --git a/compiler/cmm/DFMonad.hs b/compiler/cmm/DFMonad.hs index e8afab4..970cdcb 100644 --- a/compiler/cmm/DFMonad.hs +++ b/compiler/cmm/DFMonad.hs @@ -2,6 +2,7 @@ module DFMonad ( OptimizationFuel , DFTx, runDFTx, lastTxPass, txDecrement, txRemaining, txExhausted + , functionalDFTx , DataflowLattice(..) , DataflowAnalysis @@ -108,6 +109,11 @@ runDFA lattice (DFA f) = fst $ f lattice initDFAState -- XXX DFTx really needs to be in IO, so we can dump programs in -- intermediate states of optimization ---NR +functionalDFTx :: String -> (OptimizationFuel -> (a, OptimizationFuel)) -> DFTx a +functionalDFTx name pass = DFTx f + where f s = let (a, fuel) = pass (df_txlimit s) + in (a, DFTxState fuel name) + runDFTx :: OptimizationFuel -> DFTx a -> a --- should only be called once per program! runDFTx lim (DFTx f) = fst $ f $ DFTxState lim ""