X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fcmm%2FOptimizationFuel.hs;h=96272979ce8913be71ad8e0dfd7a1e2066182697;hp=6e05cdc68bb23f2939856a6bd9c3f80bf57f8b20;hb=ba60dc74fdb18fe655cfac605130cf6480116e47;hpb=206b4dec78250efef3cd927d64dc6cbc54a16c3d diff --git a/compiler/cmm/OptimizationFuel.hs b/compiler/cmm/OptimizationFuel.hs index 6e05cdc..9627297 100644 --- a/compiler/cmm/OptimizationFuel.hs +++ b/compiler/cmm/OptimizationFuel.hs @@ -7,6 +7,7 @@ module OptimizationFuel , lastFuelPassInState, fuelExhaustedInState, fuelRemainingInState , fuelDecrementState , runFuel, runFuelIO, runFuelWithLastPass, fuelConsumingPass + , runWithInfiniteFuel , FuelMonad(..) ) where @@ -48,11 +49,6 @@ oneLessFuel f = f diffFuel _ _ = 0 #endif --- stop warnings about things that aren't used -_unused :: {-State#-} () -> FS.FastString -_unused = undefined panic - - data FuelState = FuelState { fs_fuellimit :: OptimizationFuel, fs_lastpass :: String } newtype FuelMonad a = FuelMonad (FuelState -> (a, FuelState)) @@ -64,6 +60,8 @@ fuelConsumingPass name f = do fuel <- fuelRemaining runFuel :: FuelMonad a -> FuelConsumer a runFuelWithLastPass :: FuelMonad a -> FuelConsumer (a, String) +runWithInfiniteFuel :: FuelMonad a -> a + runFuelIO :: IORef String -> IORef OptimizationFuel -> FuelMonad a -> IO a runFuelIO pass_ref fuel_ref (FuelMonad f) = @@ -83,6 +81,8 @@ runFuel (FuelMonad f) fuel = let (a, s) = f $ initialFuelState fuel runFuelWithLastPass (FuelMonad f) fuel = let (a, s) = f $ initialFuelState fuel in ((a, fs_lastpass s), fs_fuellimit s) +runWithInfiniteFuel (FuelMonad f) = fst $ f $ initialFuelState $ tankFilledTo maxBound + lastFuelPassInState :: FuelState -> String lastFuelPassInState = fs_lastpass