From: simonpj Date: Thu, 28 Jul 2005 14:45:55 +0000 (+0000) Subject: [project @ 2005-07-28 14:45:55 by simonpj] X-Git-Tag: Initial_conversion_from_CVS_complete~288 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=f2506c8c109dfbf063fa2a239ea95c8f8cd167f1;p=ghc-hetmet.git [project @ 2005-07-28 14:45:55 by simonpj] Restore costant folding --- diff --git a/ghc/compiler/specialise/Rules.lhs b/ghc/compiler/specialise/Rules.lhs index 9220604..702902f 100644 --- a/ghc/compiler/specialise/Rules.lhs +++ b/ghc/compiler/specialise/Rules.lhs @@ -39,10 +39,9 @@ import Name ( Name, NamedThing(..), nameOccName ) import NameEnv import Unify ( tcMatchTyX, MatchEnv(..) ) import BasicTypes ( Activation, CompilerPhase, isActive ) - import Outputable import FastString -import Maybe ( isJust ) +import Maybes ( isJust, orElse ) import Bag import Util ( singleton ) import List ( isPrefixOf ) @@ -198,10 +197,13 @@ lookupRule :: (Activation -> Bool) -> InScopeSet lookupRule is_active in_scope rule_base fn args = matchRules is_active in_scope fn args rules where - rules | isLocalId fn = idCoreRules fn - | otherwise = case lookupNameEnv rule_base (idName fn) of - Just rules -> rules - Nothing -> [] + -- The rules for an Id come from two places: + -- (a) the ones it is born with (idCoreRules fn) + -- (b) rules added in subsequent modules (extra_rules) + -- PrimOps, for example, are born with a bunch of rules under (a) + rules = extra_rules ++ idCoreRules fn + extra_rules | isLocalId fn = [] + | otherwise = lookupNameEnv rule_base (idName fn) `orElse` [] matchRules :: (Activation -> Bool) -> InScopeSet -> Id -> [CoreExpr]