SwitchResult(..), intSwitchSet,
DynFlags, DynFlag(..), dopt, dopt_CoreToDo
)
-import CoreLint ( showPass, endPass )
import CoreSyn
import CoreFVs ( ruleRhsFreeVars )
import HscTypes ( PersistentCompilerState(..),
)
import CSE ( cseProgram )
import Rules ( RuleBase, emptyRuleBase, ruleBaseFVs, ruleBaseIds,
- extendRuleBaseList, addRuleBaseFVs, pprRuleBase )
+ extendRuleBaseList, addRuleBaseFVs, pprRuleBase,
+ ruleCheckProgram )
import Module ( moduleEnvElts )
import CoreUnfold
import PprCore ( pprCoreBindings, pprCoreExpr )
import Simplify ( simplTopBinds, simplExpr )
import SimplUtils ( simplBinders )
import SimplMonad
-import ErrUtils ( dumpIfSet, dumpIfSet_dyn )
+import ErrUtils ( dumpIfSet, dumpIfSet_dyn, showPass )
+import CoreLint ( endPass )
import FloatIn ( floatInwards )
import FloatOut ( floatOutwards )
import Id ( idName, isDataConWrapId, setIdLocalExported, isImplicitId )
= _scc_ "CoreUsageSPInf" noStats dfs (doUsageSPInf dfs us binds)
doCorePass dfs rb us binds CoreDoGlomBinds
= noStats dfs (glomBinds dfs binds)
+doCorePass dfs rb us binds (CoreDoRuleCheck pat)
+ = noStats dfs (ruleCheck dfs pat binds)
doCorePass dfs rb us binds CoreDoNothing
= noStats dfs (return binds)
(pprCoreBindings binds)
return binds
+ruleCheck dflags pat binds = do showPass dflags "RuleCheck"
+ printDump (ruleCheckProgram pat binds)
+ return binds
+
-- most passes return no stats and don't change rules
noStats dfs thing = do { binds <- thing; return (zeroSimplCount dfs, binds) }
+
\end{code}
This doesn't match unless you do eta reduction on the build argument.
\begin{code}
-simplRule rule@(id, BuiltinRule _)
+simplRule rule@(id, BuiltinRule _ _)
= returnSmpl rule
simplRule rule@(id, Rule name bndrs args rhs)
= simplBinders bndrs $ \ bndrs' ->