summaryrefslogtreecommitdiff
path: root/compiler/specialise/Specialise.lhs
diff options
context:
space:
mode:
authorsimonpj@microsoft.com <unknown>2008-08-21 12:31:00 +0000
committersimonpj@microsoft.com <unknown>2008-08-21 12:31:00 +0000
commit10f18550c3684368b9d8e5b7adcccc14994cf170 (patch)
tree0d7e11fe43ed99441cf2d9ac74f3921962b89f3d /compiler/specialise/Specialise.lhs
parent0069a47ad1a539c894f66163cf30c7d98dc9b016 (diff)
downloadhaskell-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.lhs15
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')