
1 Aug
2007
1 Aug
'07
8:37 a.m.
Some compilers unroll recursive functions by inlining them N times, for some fixed N (say 3 or so). This reduces the loop overheads. GHC doesn't do this, although it'd be nice, because it makes repeated traversals of the code, and it's hard to spot when the function has been unrolled 3 times and then stop. If you look at the code after unrolling 3 times, from scratch, there's another call just waiting to be inlined.
couldn't the number of unfoldings be encoded in the name of the function? f x = if p x then x else f (g x) f x = if p x then x else let x' = (g x) in if p x' then x' else f#1 (g x') where f#1 would be f for all other purposes, but with one unfolding used up, and N being the bound for the f#i. claus