X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fstranal%2FWwLib.lhs;h=e7bd24f389069f575fe73596d75869fb44a0486d;hb=33770e2e376005ff14a1d16b89f32b0d474425e2;hp=19f918f9e191afad9a60709d33cfd409f9fa965b;hpb=73c6eb2f63475c9b2fa53d9d31d4862a46d5be48;p=ghc-hetmet.git diff --git a/compiler/stranal/WwLib.lhs b/compiler/stranal/WwLib.lhs index 19f918f..e7bd24f 100644 --- a/compiler/stranal/WwLib.lhs +++ b/compiler/stranal/WwLib.lhs @@ -1,7 +1,7 @@ % % (c) The GRASP/AQUA Project, Glasgow University, 1993-1998 % -\section[WwLib]{A library for the ``worker/wrapper'' back-end to the strictness analyser} +\section[WwLib]{A library for the ``worker\/wrapper'' back-end to the strictness analyser} \begin{code} module WwLib ( mkWwBodies, mkWWstr, mkWorkerArgs ) where @@ -23,7 +23,7 @@ import TysWiredIn ( tupleCon ) import Type import Coercion ( mkSymCoercion, splitNewTypeRepCo_maybe ) import BasicTypes ( Boxity(..) ) -import Var ( Var, isId ) +import Var ( Var, isIdVar ) import UniqSupply import Unique import Util ( zipWithEqual, notNull ) @@ -44,7 +44,7 @@ Here's an example. The original function is: \begin{verbatim} g :: forall a . Int -> [a] -> a -g = /\ a -> \ x ys -> +g = \/\ a -> \ x ys -> case x of 0 -> head ys _ -> head (tail ys) @@ -55,7 +55,7 @@ From this, we want to produce: -- wrapper (an unfolding) g :: forall a . Int -> [a] -> a -g = /\ a -> \ x ys -> +g = \/\ a -> \ x ys -> case x of I# x# -> $wg a x# ys -- call the worker; don't forget the type args! @@ -63,7 +63,7 @@ g = /\ a -> \ x ys -> -- worker $wg :: forall a . Int# -> [a] -> a -$wg = /\ a -> \ x# ys -> +$wg = \/\ a -> \ x# ys -> let x = I# x# in @@ -98,7 +98,7 @@ the unusable strictness-info into the interfaces. %* * %************************************************************************ -@mkWwBodies@ is called when doing the worker/wrapper split inside a module. +@mkWwBodies@ is called when doing the worker\/wrapper split inside a module. \begin{code} mkWwBodies :: Type -- Type of original function @@ -127,12 +127,12 @@ mkWwBodies fun_ty demands res_info one_shots = do -- Don't do CPR if the worker doesn't have any value arguments -- Then the worker is just a constant, so we don't want to unbox it. (wrap_fn_cpr, work_fn_cpr, _cpr_res_ty) - <- if any isId work_args then + <- if any isIdVar work_args then mkWWcpr res_ty res_info else return (id, id, res_ty) - return ([idNewDemandInfo v | v <- work_call_args, isId v], + return ([idNewDemandInfo v | v <- work_call_args, isIdVar v], Note InlineMe . wrap_fn_args . wrap_fn_cpr . wrap_fn_str . applyToVars work_call_args . Var, mkLams work_lam_args. work_fn_str . work_fn_cpr . work_fn_args) -- We use an INLINE unconditionally, even if the wrapper turns out to be @@ -170,7 +170,7 @@ mkWorkerArgs :: [Var] -> ([Var], -- Lambda bound args [Var]) -- Args at call site mkWorkerArgs args res_ty - | any isId args || not (isUnLiftedType res_ty) + | any isIdVar args || not (isUnLiftedType res_ty) = (args, args) | otherwise = (args ++ [voidArgId], args ++ [realWorldPrimId])