
one difference between 7.6.3 and HEAD is the extra stack spilling before
#8900: Strictness analysis regression --------------------------------------------+------------------------------ Reporter: tibbe | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 7.8.1-rc2 Resolution: fixed | Keywords: Operating System: MacOS X | Architecture: x86_64 Type of failure: Runtime performance bug | (amd64) Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Comment (by simonmar): the eval check I reported in #8905 I was surprised by this, because I would expect HEAD and 7.6.3 to generate very similar code with respect to spilling before a call. #8905 is about an improvement we can make in the new code generator, that wasn't possible in the old codegen. Looking at your dumps I see this for HEAD in `$wpoly_go_info`: {{{ c5k9: I64[Sp - 40] = PicBaseReg + block_c53R_info; R1 = R6; I64[Sp - 32] = R2; I64[Sp - 24] = R3; P64[Sp - 16] = R4; I64[Sp - 8] = R5; Sp = Sp - 40; if (R1 & 7 != 0) goto c53R; else goto c53S; }}} and this for 7.6.3: {{{ I64[Sp - 32] = R5; I64[Sp - 24] = R4; I64[Sp - 16] = R3; I64[Sp - 8] = R2; R1 = R6; I64[Sp - 40] = PicBaseReg + s30b_info; Sp = Sp - 40; if (R1 & 7 != 0) goto c3zM; }}} they look identical to me modulo reordering and things falling into different stack slots. Maybe the problematic bit is somewhere else - could you point to it? Some of the other differences you're seeing are due to the fact that the new codegen (with the NCG) doesn't break up functions at proc-points, so you see larger chunks of code where 7.6.3 broke things into smaller pieces. Most of the time this won't make any difference to the generated code, unless there's a join point (a let-no-escape) where HEAD should generate better code. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8900#comment:24 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler