
Hi all, While looking at the GCC 4.7 [1] release notes I saw something that's perhaps worth stealing. Taken from the release notes: The inter-procedural constant propagation pass has been rewritten. It now performs generic function specialization. For example when compiling the following: void foo(bool flag) { if (flag) ... do something ... else ... do something else ... } void bar (void) { foo (false); foo (true); foo (false); foo (true); foo (false); foo (true); } GCC will now produce two copies of foo. One with flag being true, while other with flag being false. This leads to performance improvements previously possibly only by inlining all calls. Cloning causes a lot less code size growth. I found myself wanting something like this just today. A common pattern I see in code is this: data Options = Options { ... } defaultOptions :: Options defaultOptions = ... foo :: ... foo = fooWith defaultOptions fooWith :: Options -> ... fooWith = ... It'd be nice if we could get foo to specialize on its input arguments, without having to mark all of fooWith as INLINE. 1. http://gcc.gnu.org/gcc-4.7/changes.html -- Johan