-
Simon Peyton Jones authored
This patch fixes a bad omission in CSE, thanks to 'michaelt' for spotting it, and correctly identifying the fix (in cseRhs). The trouble was with x1 = C a b x2 = C x1 b y1 = C a b y2 = C y1 b we were not commoning up y2=x2, because we failed to substitute y1:=x1, so y2's RHS looked different to x2's I also refactoring, so taht the cs_map in a CSEnv map is cs_map :: CoreMap (OutExpr, Id) instead of cs_map :: CoreMap (OutExpr, OutExpr) Much nicer! This doesn't make much difference to allocation, but it gives a surprisingly big benefit to binary size. -------------------------------------------------------------------------------- Program Size Allocs Runtime Elapsed TotalMem -------------------------------------------------------------------------------- ansi -1.7% -0.8% 0.00 0.00 +0.0% bspt -1.6% -1.5% 0.01 0.01 +0.0% cacheprof -1.8% -0.2% +1.6% +1.9% +2.7% fft -1.4% -1.3% 0.06 0.06 +11.1% ida -1.4% -1.0% 0.12 0.12 +0.0% rfib -1.4% -0.1% 0.03 0.03 +0.0% scs -1.6% -0.1% +1.5% +1.5% +0.0% spectral-norm -1.3% -0.1% -0.2% -0.2% +0.0% tak -1.4% -0.1% 0.02 0.02 +0.0% veritas -1.4% -0.1% 0.00 0.00 +0.0% -------------------------------------------------------------------------------- Min -2.5% -1.5% -11.8% -11.8% -8.0% Max -1.0% +0.0% +2.7% +2.5% +11.1% Geometric Mean -1.3% -0.1% -2.6% -2.6% +0.0%
0001d161