summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/GHC/Core/Opt/OccurAnal.hs7
-rw-r--r--compiler/GHC/Core/Opt/Simplify/Utils.hs10
2 files changed, 9 insertions, 8 deletions
diff --git a/compiler/GHC/Core/Opt/OccurAnal.hs b/compiler/GHC/Core/Opt/OccurAnal.hs
index bfabae9f51..c5e4dee1a0 100644
--- a/compiler/GHC/Core/Opt/OccurAnal.hs
+++ b/compiler/GHC/Core/Opt/OccurAnal.hs
@@ -1586,7 +1586,9 @@ nodeScore !env new_bndr lb_deps
is_con_app (App f _) = is_con_app f
is_con_app (Lam _ e) = is_con_app e
is_con_app (Tick _ e) = is_con_app e
- is_con_app _ = False
+ is_con_app (Let _ e) = is_con_app e -- let x = let y = blah in (a,b)
+ is_con_app _ = False -- We will float the y out, so treat
+ -- the x-binding as a con-app (#20941)
maxExprSize :: Int
maxExprSize = 20 -- Rather arbitrary
@@ -1935,6 +1937,9 @@ occAnalUnfolding !env is_rec mb_join_arity unf
(WithUsageDetails usage args') = occAnalList env' args
final_usage = markAllManyNonTail (delDetailsList usage bndrs)
`addLamCoVarOccs` bndrs
+ `delDetailsList` bndrs
+ -- delDetailsList; no need to use tagLamBinders because we
+ -- never inline DFuns so the occ-info on binders doesn't matter
unf -> WithUsageDetails emptyDetails unf
diff --git a/compiler/GHC/Core/Opt/Simplify/Utils.hs b/compiler/GHC/Core/Opt/Simplify/Utils.hs
index 409f3176eb..13a8a1b853 100644
--- a/compiler/GHC/Core/Opt/Simplify/Utils.hs
+++ b/compiler/GHC/Core/Opt/Simplify/Utils.hs
@@ -1130,13 +1130,9 @@ getUnfoldingInRuleMatch env
mode = getMode env
id_unf id | unf_is_active id = idUnfolding id
| otherwise = NoUnfolding
- unf_is_active id
- | not (sm_rules mode) = -- active_unfolding_minimal id
- isStableUnfolding (realIdUnfolding id)
- -- Do we even need to test this? I think this InScopeEnv
- -- is only consulted if activeRule returns True, which
- -- never happens if sm_rules is False
- | otherwise = isActive (sm_phase mode) (idInlineActivation id)
+ unf_is_active id = isActive (sm_phase mode) (idInlineActivation id)
+ -- When sm_rules was off we used to test for a /stable/ unfolding,
+ -- but that seems wrong (#20941)
----------------------
activeRule :: SimplMode -> Activation -> Bool