X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fspecialise%2FSpecConstr.lhs;h=603c2a684ee281f72066c16a96509ab7bff8f4de;hb=42b63073fb5e71fcd539ab80289cf6cf2a5b9641;hp=b5dde8d6a2af9ef1b9a9a987bd8dc182e72e8765;hpb=51666a19707f4ca34eec28a14bffbbc7d642e647;p=ghc-hetmet.git diff --git a/ghc/compiler/specialise/SpecConstr.lhs b/ghc/compiler/specialise/SpecConstr.lhs index b5dde8d..603c2a6 100644 --- a/ghc/compiler/specialise/SpecConstr.lhs +++ b/ghc/compiler/specialise/SpecConstr.lhs @@ -14,12 +14,12 @@ import CoreSyn import CoreLint ( showPass, endPass ) import CoreUtils ( exprType, eqExpr, mkPiTypes ) import CoreFVs ( exprsFreeVars ) +import CoreTidy ( pprTidyIdRules ) import WwLib ( mkWorkerArgs ) import DataCon ( dataConRepArity ) import Type ( tyConAppArgs ) -import PprCore ( pprCoreRules ) -import Id ( Id, idName, idType, idSpecialisation, - isDataConId_maybe, +import Id ( Id, idName, idType, + isDataConWorkId_maybe, mkUserLocal, mkSysLocal ) import Var ( Var ) import VarEnv @@ -33,10 +33,11 @@ import BasicTypes ( Activation(..) ) import Outputable import Maybes ( orElse ) -import Util ( mapAccumL, lengthAtLeast ) +import Util ( mapAccumL, lengthAtLeast, notNull ) import List ( nubBy, partition ) import UniqSupply import Outputable +import FastString \end{code} ----------------------------------------------------- @@ -181,7 +182,7 @@ specConstrProgram dflags us binds endPass dflags "SpecConstr" Opt_D_dump_spec binds' dumpIfSet_dyn dflags Opt_D_dump_rules "Top-level specialisations" - (vcat (map dump_specs (concat (map bindersOf binds')))) + (vcat (map pprTidyIdRules (concat (map bindersOf binds')))) return binds' where @@ -189,8 +190,6 @@ specConstrProgram dflags us binds go env (bind:binds) = scBind env bind `thenUs` \ (env', _, bind') -> go env' binds `thenUs` \ binds' -> returnUs (bind' : binds') - -dump_specs var = pprCoreRules var (idSpecialisation var) \end{code} @@ -376,7 +375,7 @@ scExpr env e@(App _ _) ---------------------- scBind :: ScEnv -> CoreBind -> UniqSM (ScEnv, ScUsage, CoreBind) scBind env (Rec [(fn,rhs)]) - | not (null val_bndrs) + | notNull val_bndrs = scExpr env_fn_body body `thenUs` \ (usg, body') -> let SCU { calls = calls, occs = occs } = usg @@ -492,7 +491,6 @@ spec_one :: ScEnv spec_one env fn rhs (pats, rule_number) = getUniqueUs `thenUs` \ spec_uniq -> - getUniqueUs `thenUs` \ hack_uniq -> let fn_name = idName fn fn_loc = nameSrcLoc fn_name @@ -511,7 +509,7 @@ spec_one env fn rhs (pats, rule_number) -- Usual w/w hack to avoid generating -- a spec_rhs of unlifted type and no args - rule_name = _PK_ ("SC:" ++ showSDoc (ppr fn <> int rule_number)) + rule_name = mkFastString ("SC:" ++ showSDoc (ppr fn <> int rule_number)) spec_rhs = mkLams spec_lam_args spec_body spec_id = mkUserLocal spec_occ spec_uniq (mkPiTypes spec_lam_args body_ty) fn_loc rule = Rule rule_name specConstrActivation @@ -562,7 +560,7 @@ argToPat env us (Var v) -- Don't uniqify existing vars, = (us, Var v) -- so that we can spot when we pass them twice argToPat env us arg - = (us1, Var (mkSysLocal SLIT("sc") (uniqFromSupply us2) (exprType arg))) + = (us1, Var (mkSysLocal FSLIT("sc") (uniqFromSupply us2) (exprType arg))) where (us1,us2) = splitUniqSupply us @@ -584,7 +582,7 @@ is_con_app_maybe env (Lit lit) is_con_app_maybe env expr = case collectArgs expr of - (Var fun, args) | Just con <- isDataConId_maybe fun, + (Var fun, args) | Just con <- isDataConWorkId_maybe fun, args `lengthAtLeast` dataConRepArity con -- Might be > because the arity excludes type args -> Just (DataAlt con,args)