[commit: ghc] wip/T7994-calledArity: Some very prelimary explanations (f33d231)
git at git.haskell.org
git at git.haskell.org
Tue Jan 28 15:18:14 UTC 2014
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T7994-calledArity
Link : http://ghc.haskell.org/trac/ghc/changeset/f33d2313c0999e4da43b385fbcc1b36f2cf096f3/ghc
>---------------------------------------------------------------
commit f33d2313c0999e4da43b385fbcc1b36f2cf096f3
Author: Joachim Breitner <mail at joachim-breitner.de>
Date: Tue Jan 28 11:26:09 2014 +0000
Some very prelimary explanations
>---------------------------------------------------------------
f33d2313c0999e4da43b385fbcc1b36f2cf096f3
compiler/coreSyn/CoreArity.lhs | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/compiler/coreSyn/CoreArity.lhs b/compiler/coreSyn/CoreArity.lhs
index d4c0a6b..287087b 100644
--- a/compiler/coreSyn/CoreArity.lhs
+++ b/compiler/coreSyn/CoreArity.lhs
@@ -1031,12 +1031,23 @@ freshEtaId n subst ty
\end{code}
-Call arity anlysis: For let-bound things, find out the minimum arity it is
-called with, so that the value can be eta-expanded to that arity, creating
-better code (main goal: good foldl as foldr).
+%************************************************************************
+%* *
+ Called Arity Analyis
+%* *
+%************************************************************************
+
+
+For let-bound things, find out the minimum arity it is called with, so that the
+value can be eta-expanded to that arity, creating better code (main goal: good
+foldl as foldr).
+
+Main problem: Thunks! We must not lose sharing. So one needs to consider how
+often something is called. We use the following approximation:
-Be sure to only consider tail calls. This allows us to detect that there is at
-most one call to n in
+ Only consider tail calls!
+
+This allows us to detect that there is at most one call to n in
let n = case .. of .. -- A thunk!
in case .. of
@@ -1045,6 +1056,21 @@ most one call to n in
False > n
False -> n
+despite a call from a recursive function, becuase
+
+ A tail-recursive function can make at most one tail-call somewhere else.
+
+
+The following code is not yet very quick. Possible improvements:
+ * Re-use existing information in nested fixed-points.
+ * Upon failure in fixed-pointing, go directly to 0 (or the manifestArity).
+
+Possibe improvements in precision:
+ * Always start with at least the manifestArity.
+ * When analysing a recursive RHS, starting with its manifestArity,
+ even if it calls itself at a lower arity, that is still good enough to stop.
+ * In the above, use exprArity instead of manifestArity.
+
\begin{code}
callArityAnalProgram :: DynFlags -> CoreProgram -> CoreProgram
More information about the ghc-commits
mailing list