diff options
author | simonpj@microsoft.com <unknown> | 2007-02-02 17:35:27 +0000 |
---|---|---|
committer | simonpj@microsoft.com <unknown> | 2007-02-02 17:35:27 +0000 |
commit | bea2ece06bbeab1d8abbde420b2fff383edd34be (patch) | |
tree | fc4b4eca5b58eb39545f2bec9b0d90d68ab9f02c /compiler/specialise | |
parent | dd06e44c0dbb08ee1d8591530471db09802d4f78 (diff) | |
download | haskell-bea2ece06bbeab1d8abbde420b2fff383edd34be.tar.gz |
Look through Notes when generating and matching RULES
Diffstat (limited to 'compiler/specialise')
-rw-r--r-- | compiler/specialise/Rules.lhs | 10 | ||||
-rw-r--r-- | compiler/specialise/SpecConstr.lhs | 9 |
2 files changed, 19 insertions, 0 deletions
diff --git a/compiler/specialise/Rules.lhs b/compiler/specialise/Rules.lhs index 35b44ab98c..b3c9791e41 100644 --- a/compiler/specialise/Rules.lhs +++ b/compiler/specialise/Rules.lhs @@ -423,6 +423,16 @@ match menv subst (Var v1) e2 | Just subst <- match_var menv subst v1 e2 = Just subst +match menv subst e1 (Note n e2) + = match menv subst e1 e2 + -- Note [Notes in RULE matching] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- Look through Notes. In particular, we don't want to + -- be confused by InlineMe notes. Maybe we should be more + -- careful about profiling notes, but for now I'm just + -- riding roughshod over them. + --- See Note [Notes in call patterns] in SpecConstr + -- Here is another important rule: if the term being matched is a -- variable, we expand it so long as its unfolding is a WHNF -- (Its occurrence information is not necessarily up to date, diff --git a/compiler/specialise/SpecConstr.lhs b/compiler/specialise/SpecConstr.lhs index 92e4131c95..99d51f1669 100644 --- a/compiler/specialise/SpecConstr.lhs +++ b/compiler/specialise/SpecConstr.lhs @@ -925,6 +925,15 @@ argToPat :: InScopeEnv -- What's in scope at the fn defn site argToPat in_scope con_env arg@(Type ty) arg_occ = return (False, arg) +argToPat in_scope con_env (Note n arg) arg_occ + = argToPat in_scope con_env arg arg_occ + -- Note [Notes in call patterns] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- Ignore Notes. In particular, we want to ignore any InlineMe notes + -- Perhaps we should not ignore profiling notes, but I'm going to + -- ride roughshod over them all for now. + --- See Note [Notes in RULE matching] in Rules + argToPat in_scope con_env (Let _ arg) arg_occ = argToPat in_scope con_env arg arg_occ -- Look through let expressions |