Improved specialisation of recursive groups
[ghc-hetmet.git] / compiler / simplCore / Simplify.lhs
index 07bd02c..866b2d4 100644 (file)
@@ -13,7 +13,6 @@ import SimplMonad
 import Type hiding      ( substTy, extendTvSubst )
 import SimplEnv
 import SimplUtils
-import Literal         ( mkStringLit )
 import MkId            ( rUNTIME_ERROR_ID )
 import Id
 import Var
@@ -26,7 +25,7 @@ import NewDemand        ( isStrictDmd )
 import PprCore          ( pprParendExpr, pprCoreExpr )
 import CoreUnfold       ( mkUnfolding, callSiteInline, CallCtxt(..) )
 import CoreUtils
-import Rules            ( lookupRule )
+import Rules            ( lookupRule, getRules )
 import BasicTypes       ( isMarkedStrict )
 import CostCentre       ( currentCCS )
 import TysPrim          ( realWorldStatePrimTy )
@@ -1034,12 +1033,13 @@ completeCall env var cont
         -- is recursive, and hence a loop breaker:
         --      foldr k z (build g) = g k z
         -- So it's up to the programmer: rules can cause divergence
-        ; rules <- getRules
+        ; rule_base <- getSimplRules
         ; let   in_scope   = getInScope env
+               rules      = getRules rule_base var
                 maybe_rule = case activeRule dflags env of
                                 Nothing     -> Nothing  -- No rules apply
                                 Just act_fn -> lookupRule act_fn in_scope
-                                                          rules var args
+                                                          var args rules 
         ; case maybe_rule of {
             Just (rule, rule_rhs) -> do
                 tick (RuleFired (ru_name rule))
@@ -1263,7 +1263,7 @@ rebuildCase env scrut case_bndr alts cont
                -- inaccessible.  So we simply put an error case here instead.
            pprTrace "mkCase: null alts" (ppr case_bndr <+> ppr scrut) $
            let res_ty' = contResultType env' (substTy env' (coreAltsType alts)) dup_cont
-               lit = Lit (mkStringLit "Impossible alternative")
+               lit = mkStringLit "Impossible alternative"
            in return (env', mkApps (Var rUNTIME_ERROR_ID) [Type res_ty', lit])
 
          else do