[Git][ghc/ghc][master] Improve Note [Binder-swap during float-out]
Marge Bot (@marge-bot)
gitlab at gitlab.haskell.org
Sat Jul 15 07:25:00 UTC 2023
Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
ca1e636a by Rodrigo Mesquita at 2023-07-15T03:24:42-04:00
Improve Note [Binder-swap during float-out]
- - - - -
1 changed file:
- compiler/GHC/Core/Opt/SetLevels.hs
Changes:
=====================================
compiler/GHC/Core/Opt/SetLevels.hs
=====================================
@@ -44,13 +44,33 @@
case x of wild { p -> ...wild... }
we substitute x for wild in the RHS of the case alternatives:
case x of wild { p -> ...x... }
- This means that a sub-expression involving x is not "trapped" inside the RHS.
+ This means that a sub-expression involving x is not "trapped" inside the RHS
+ (i.e. it can now be floated out, whereas if it mentioned wild it could not).
And it's not inconvenient because we already have a substitution.
- Note that this is EXACTLY BACKWARDS from the what the simplifier does.
- The simplifier tries to get rid of occurrences of x, in favour of wild,
- in the hope that there will only be one remaining occurrence of x, namely
- the scrutinee of the case, and we can inline it.
+ For example, consider:
+
+ f x = letrec go y = case x of z { (a,b) -> ...(expensive z)... }
+ in ...
+
+ If we do the reverse binder-swap we get
+
+ f x = letrec go y = case x of z { (a,b) -> ...(expensive x)... }
+ in ...
+
+ and now we can float out:
+
+ f x = let t = expensive x
+ in letrec go y = case x of z { (a,b) -> ...(t)... }
+ in ...
+
+ Now (expensive x) is computed once, rather than once each time around the 'go' loop.
+
+ Note that this is EXACTLY BACKWARDS from the what the simplifier does.
+ The simplifier tries to get rid of occurrences of x, in favour of wild,
+ in the hope that there will only be one remaining occurrence of x, namely
+ the scrutinee of the case, and we can inline it.
+
-}
module GHC.Core.Opt.SetLevels (
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ca1e636a9c4d8947a680c36167683616d09f4625
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ca1e636a9c4d8947a680c36167683616d09f4625
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230715/b851b2fe/attachment-0001.html>
More information about the ghc-commits
mailing list