diff options
author | simonpj@microsoft.com <unknown> | 2008-08-21 12:31:00 +0000 |
---|---|---|
committer | simonpj@microsoft.com <unknown> | 2008-08-21 12:31:00 +0000 |
commit | 10f18550c3684368b9d8e5b7adcccc14994cf170 (patch) | |
tree | 0d7e11fe43ed99441cf2d9ac74f3921962b89f3d /compiler/specialise/Specialise.lhs | |
parent | 0069a47ad1a539c894f66163cf30c7d98dc9b016 (diff) | |
download | haskell-10f18550c3684368b9d8e5b7adcccc14994cf170.tar.gz |
Make rule printing wobble less
a) When generating specialisations, include the types in the name
of the rule, to avoid having rules with duplicate names.
(The rule name is used to put rules in canonical order for
fingerprinting.)
b) In Specialise and SpecConstr use a new function Rules.pprRulesForUser
to print rules in canonical order. This reduces unnecessary wobbling
in test output, notably in T2486
Diffstat (limited to 'compiler/specialise/Specialise.lhs')
-rw-r--r-- | compiler/specialise/Specialise.lhs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/compiler/specialise/Specialise.lhs b/compiler/specialise/Specialise.lhs index b424e4a2e7..3564c27380 100644 --- a/compiler/specialise/Specialise.lhs +++ b/compiler/specialise/Specialise.lhs @@ -28,12 +28,10 @@ import CoreSubst ( Subst, mkEmptySubst, extendTvSubstList, lookupIdSubst, import VarSet import VarEnv import CoreSyn +import Rules import CoreUtils ( applyTypeToArgs, mkPiTypes ) import CoreFVs ( exprFreeVars, exprsFreeVars, idFreeVars ) -import CoreTidy ( tidyRules ) import CoreLint ( showPass, endPass ) -import Rules ( addIdSpecialisations, mkLocalRule, lookupRule, emptyRuleBase, rulesOfBinds ) -import PprCore ( pprRules ) import UniqSupply ( UniqSupply, UniqSM, initUs_, MonadUnique(..) @@ -588,8 +586,7 @@ specProgram dflags us binds = do endPass dflags "Specialise" Opt_D_dump_spec binds' dumpIfSet_dyn dflags Opt_D_dump_rules "Top-level specialisations" - (withPprStyle defaultUserStyle $ - pprRules (tidyRules emptyTidyEnv (rulesOfBinds binds'))) + (pprRulesForUser (rulesOfBinds binds')) return binds' where @@ -866,7 +863,9 @@ specDefn subst calls (fn, rhs) where mk_ty_arg rhs_tyvar Nothing = Type (mkTyVarTy rhs_tyvar) mk_ty_arg _ (Just ty) = Type ty - rhs_subst = extendTvSubstList subst (spec_tyvars `zip` [ty | Just ty <- call_ts]) + + spec_ty_args = [ty | Just ty <- call_ts] + rhs_subst = extendTvSubstList subst (spec_tyvars `zip` spec_ty_args) (rhs_subst', rhs_dicts') <- cloneBinders rhs_subst rhs_dicts let @@ -885,7 +884,9 @@ specDefn subst calls (fn, rhs) let -- The rule to put in the function's specialisation is: -- forall b,d, d1',d2'. f t1 b t3 d d1' d2' = f1 b d - spec_env_rule = mkLocalRule (mkFastString ("SPEC " ++ showSDoc (ppr fn))) + rule_name = mkFastString ("SPEC " ++ showSDoc (ppr fn <+> ppr spec_ty_args)) + spec_env_rule = mkLocalRule + rule_name inline_prag -- Note [Auto-specialisation and RULES] (idName fn) (poly_tyvars ++ rhs_dicts') |