summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/coreSyn/CoreSyn.hs8
-rw-r--r--compiler/main/HscTypes.hs3
-rw-r--r--compiler/simplCore/CoreMonad.hs1
-rw-r--r--compiler/simplCore/SimplCore.hs9
-rw-r--r--compiler/simplCore/SimplMonad.hs2
-rw-r--r--compiler/specialise/Rules.hs8
6 files changed, 17 insertions, 14 deletions
diff --git a/compiler/coreSyn/CoreSyn.hs b/compiler/coreSyn/CoreSyn.hs
index 32ebd8a480..86939bdfad 100644
--- a/compiler/coreSyn/CoreSyn.hs
+++ b/compiler/coreSyn/CoreSyn.hs
@@ -71,7 +71,7 @@ module CoreSyn (
deAnnotate, deAnnotate', deAnnAlt, collectAnnBndrs,
-- * Core rule data types
- CoreRule(..), -- CoreSubst, CoreTidy, CoreFVs, PprCore only
+ CoreRule(..), RuleBase,
RuleName, RuleFun, IdUnfoldingFun, InScopeEnv,
-- ** Operations on 'CoreRule's
@@ -91,6 +91,7 @@ import Var
import Type
import Coercion
import Name
+import NameEnv( NameEnv )
import Literal
import DataCon
import Module
@@ -708,6 +709,11 @@ The CoreRule type and its friends are dealt with mainly in CoreRules,
but CoreFVs, Subst, PprCore, CoreTidy also inspect the representation.
-}
+-- | Gathers a collection of 'CoreRule's. Maps (the name of) an 'Id' to its rules
+type RuleBase = NameEnv [CoreRule]
+ -- The rules are are unordered;
+ -- we sort out any overlaps on lookup
+
-- | A 'CoreRule' is:
--
-- * \"Local\" if the function it is a rule for is defined in the
diff --git a/compiler/main/HscTypes.hs b/compiler/main/HscTypes.hs
index 09f643cc2e..90ed55978f 100644
--- a/compiler/main/HscTypes.hs
+++ b/compiler/main/HscTypes.hs
@@ -140,8 +140,7 @@ import Avail
import Module
import InstEnv ( InstEnv, ClsInst, identicalClsInstHead )
import FamInstEnv
-import Rules ( RuleBase )
-import CoreSyn ( CoreProgram )
+import CoreSyn ( CoreProgram, RuleBase )
import Name
import NameEnv
import NameSet
diff --git a/compiler/simplCore/CoreMonad.hs b/compiler/simplCore/CoreMonad.hs
index e9c828da6a..dec41bb4f7 100644
--- a/compiler/simplCore/CoreMonad.hs
+++ b/compiler/simplCore/CoreMonad.hs
@@ -62,7 +62,6 @@ import HscTypes
import Module
import DynFlags
import StaticFlags
-import Rules ( RuleBase )
import BasicTypes ( CompilerPhase(..) )
import Annotations
diff --git a/compiler/simplCore/SimplCore.hs b/compiler/simplCore/SimplCore.hs
index 3e820844ca..0fd929a2a6 100644
--- a/compiler/simplCore/SimplCore.hs
+++ b/compiler/simplCore/SimplCore.hs
@@ -15,7 +15,7 @@ import CoreSyn
import CoreSubst
import HscTypes
import CSE ( cseProgram )
-import Rules ( RuleBase, emptyRuleBase, mkRuleBase, unionRuleBase,
+import Rules ( emptyRuleBase, mkRuleBase, unionRuleBase,
extendRuleBaseList, ruleCheckProgram, addSpecInfo, )
import PprCore ( pprCoreBindings, pprCoreExpr )
import OccurAnal ( occurAnalysePgm, occurAnalyseExpr )
@@ -625,7 +625,8 @@ simplifyPgmIO pass@(CoreDoSimplify max_iterations mode)
InitialPhase -> (mg_vect_decls guts, vectVars)
_ -> ([], vectVars)
; tagged_binds = {-# SCC "OccAnal" #-}
- occurAnalysePgm this_mod active_rule rules maybeVects maybeVectVars binds
+ occurAnalysePgm this_mod active_rule rules
+ maybeVects maybeVectVars binds
} ;
Err.dumpIfSet_dyn dflags Opt_D_dump_occur_anal "Occurrence analysis"
(pprCoreBindings tagged_binds);
@@ -646,6 +647,10 @@ simplifyPgmIO pass@(CoreDoSimplify max_iterations mode)
-- Simplify the program
(env1, counts1) <- initSmpl dflags rule_base2 fam_envs us1 sz simpl_binds ;
+ -- Apply the substitution to rules defined in this module
+ -- for imported Ids. Eg RULE map my_f = blah
+ -- If we have a substitution my_f :-> other_f, we'd better
+ -- apply it to the rule to, or it'll never match
let { binds1 = getFloatBinds env1
; rules1 = substRulesForImportedIds (mkCoreSubst (text "imp-rules") env1) rules
} ;
diff --git a/compiler/simplCore/SimplMonad.hs b/compiler/simplCore/SimplMonad.hs
index 00691060e9..fbf23d7436 100644
--- a/compiler/simplCore/SimplMonad.hs
+++ b/compiler/simplCore/SimplMonad.hs
@@ -22,7 +22,7 @@ module SimplMonad (
import Id ( Id, mkSysLocal )
import Type ( Type )
import FamInstEnv ( FamInstEnv )
-import Rules ( RuleBase )
+import CoreSyn ( RuleBase )
import UniqSupply
import DynFlags
import CoreMonad
diff --git a/compiler/specialise/Rules.hs b/compiler/specialise/Rules.hs
index b66d973248..e6e5359f5a 100644
--- a/compiler/specialise/Rules.hs
+++ b/compiler/specialise/Rules.hs
@@ -9,9 +9,6 @@
-- | Functions for collecting together and applying rewrite rules to a module.
-- The 'CoreRule' datatype itself is declared elsewhere.
module Rules (
- -- * RuleBase
- RuleBase,
-
-- ** Constructing
emptyRuleBase, mkRuleBase, extendRuleBaseList,
unionRuleBase, pprRuleBase,
@@ -315,10 +312,7 @@ but that isn't quite right:
************************************************************************
-}
--- | Gathers a collection of 'CoreRule's. Maps (the name of) an 'Id' to its rules
-type RuleBase = NameEnv [CoreRule]
- -- The rules are are unordered;
- -- we sort out any overlaps on lookup
+-- RuleBase itself is defined in CoreSyn, along with CoreRule
emptyRuleBase :: RuleBase
emptyRuleBase = emptyNameEnv