X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2FbasicTypes%2FMkId.lhs;h=aaeb3bc578f15fd3faf90a4a8d22a2e32937f1d1;hb=c86161c5cf11de77e911fcb9e1e2bd1f8bd80b42;hp=6d8df877a9ee8203e42beb14b1c1a1b3539b50ec;hpb=3bc73cd67e6cfacd2fc823019f1b6012cdf1ccb4;p=ghc-hetmet.git diff --git a/compiler/basicTypes/MkId.lhs b/compiler/basicTypes/MkId.lhs index 6d8df87..aaeb3bc 100644 --- a/compiler/basicTypes/MkId.lhs +++ b/compiler/basicTypes/MkId.lhs @@ -65,7 +65,7 @@ import DataCon import Id import Var ( Var, TyVar, mkCoVar, mkExportedLocalVar ) import IdInfo -import NewDemand +import Demand import CoreSyn import Unique import PrelNames @@ -265,7 +265,7 @@ mkDataConIds wrap_name wkr_name data_con wkr_arity = dataConRepArity data_con wkr_info = noCafIdInfo `setArityInfo` wkr_arity - `setAllStrictnessInfo` Just wkr_sig + `setStrictnessInfo` Just wkr_sig `setUnfoldingInfo` evaldUnfolding -- Record that it's evaluated, -- even if arity = 0 @@ -329,7 +329,7 @@ mkDataConIds wrap_name wkr_name data_con -- It's important to specify the arity, so that partial -- applications are treated as values `setUnfoldingInfo` wrap_unf - `setAllStrictnessInfo` Just wrap_sig + `setStrictnessInfo` Just wrap_sig all_strict_marks = dataConExStricts data_con ++ dataConStrictMarks data_con wrap_sig = mkStrictSig (mkTopDmdType arg_dmds cpr_info) @@ -345,7 +345,7 @@ mkDataConIds wrap_name wkr_name data_con -- ...(let w = C x in ...(w p q)...)... -- we want to see that w is strict in its two arguments - wrap_unf = mkInlineRule InlSat wrap_rhs (length dict_args + length id_args) + wrap_unf = mkInlineRule needSaturated wrap_rhs (length dict_args + length id_args) wrap_rhs = mkLams wrap_tvs $ mkLams eq_args $ mkLams dict_args $ mkLams id_args $ @@ -459,7 +459,7 @@ mkDictSelId no_unf name clas base_info = noCafIdInfo `setArityInfo` 1 - `setAllStrictnessInfo` Just strict_sig + `setStrictnessInfo` Just strict_sig `setUnfoldingInfo` (if no_unf then noUnfolding else mkImplicitUnfolding rhs) -- In module where class op is defined, we must add @@ -520,16 +520,16 @@ mkDictSelId no_unf name clas | otherwise = Case (Var dict_id) dict_id (idType the_arg_id) [(DataAlt data_con, eq_ids ++ arg_ids, Var the_arg_id)] -dictSelRule :: Int -> Arity -> [CoreExpr] -> Maybe CoreExpr +dictSelRule :: Int -> Arity -> IdUnfoldingFun -> [CoreExpr] -> Maybe CoreExpr -- Oh, very clever -- op_i t1..tk (df s1..sn d1..dm) = op_i_helper s1..sn d1..dm -- op_i t1..tk (D t1..tk op1 ... opm) = opi -- -- NB: the data constructor has the same number of type args as the class op -dictSelRule index n_ty_args args +dictSelRule index n_ty_args id_unf args | (dict_arg : _) <- drop n_ty_args args - , Just (_, _, val_args) <- exprIsConApp_maybe dict_arg + , Just (_, _, val_args) <- exprIsConApp_maybe id_unf dict_arg = Just (val_args !! index) | otherwise = Nothing @@ -763,7 +763,7 @@ mkPrimOpId prim_op info = noCafIdInfo `setSpecInfo` mkSpecInfo (primOpRules prim_op name) `setArityInfo` arity - `setAllStrictnessInfo` Just strict_sig + `setStrictnessInfo` Just strict_sig -- For each ccall we manufacture a separate CCallOpId, giving it -- a fresh unique, a type that is correct for this particular ccall, @@ -789,7 +789,7 @@ mkFCallId uniq fcall ty info = noCafIdInfo `setArityInfo` arity - `setAllStrictnessInfo` Just strict_sig + `setStrictnessInfo` Just strict_sig (_, tau) = tcSplitForAllTys ty (arg_tys, _) = tcSplitFunTys tau @@ -958,12 +958,12 @@ seqId = pcMiscPrelId seqName ty info , ru_try = match_seq_of_cast } -match_seq_of_cast :: [CoreExpr] -> Maybe CoreExpr +match_seq_of_cast :: IdUnfoldingFun -> [CoreExpr] -> Maybe CoreExpr -- See Note [Built-in RULES for seq] -match_seq_of_cast [Type _, Type res_ty, Cast scrut co, expr] +match_seq_of_cast _ [Type _, Type res_ty, Cast scrut co, expr] = Just (Var seqId `mkApps` [Type (fst (coercionKind co)), Type res_ty, scrut, expr]) -match_seq_of_cast _ = Nothing +match_seq_of_cast _ _ = Nothing ------------------------------------------------ lazyId :: Id -- See Note [lazyId magic] @@ -1158,7 +1158,7 @@ pc_bottoming_Id :: Name -> Type -> Id pc_bottoming_Id name ty = pcMiscPrelId name ty bottoming_info where - bottoming_info = vanillaIdInfo `setAllStrictnessInfo` Just strict_sig + bottoming_info = vanillaIdInfo `setStrictnessInfo` Just strict_sig `setArityInfo` 1 -- Make arity and strictness agree