
Hi, I created a first prototype of this optimization (branch wip/common-context), and the results are a clear, although very small win in some benchmarks, and no regression (ignoring the flaky cacheprof): -------------------------------------------------------------------------------- Program Size Allocs Runtime Elapsed TotalMem -------------------------------------------------------------------------------- cacheprof -0.0% +0.1% +2.4% +2.4% +0.0% fibheaps -0.0% -0.3% 0.02 0.02 +0.0% fluid -0.1% -0.0% 0.01 0.01 +0.0% gamteb -0.0% -0.3% 0.04 0.04 +0.0% ida -0.0% -1.4% 0.06 0.06 +0.0% scs -0.0% -0.2% -0.5% -0.5% +0.0% simple -0.0% -0.8% 0.15 0.15 +0.0% -------------------------------------------------------------------------------- Min -0.1% -1.4% -4.5% -4.5% +0.0% Max -0.0% +0.1% +3.3% +3.3% +6.7% Geometric Mean -0.0% -0.0% +0.2% +0.2% +0.1% I don’t have much experience with performance numbers in GHC yet, but I guess a geometric mean of -0.0% is not something to get excited about. Maybe in conjunction with CPR and nested CPR, there will be a combined benefit. Not sure why size does not go down generally, as I expected the optimization to take code that is generated more than once, and move it to where it is generated only once. Greetings, Joachim -- Joachim “nomeata” Breitner mail@joachim-breitner.de • http://www.joachim-breitner.de/ Jabber: nomeata@joachim-breitner.de • GPG-Key: 0x4743206C Debian Developer: nomeata@debian.org