[GHC] #8900: Strictness analysis regression

GHC ghc-devs at haskell.org
Tue Mar 25 08:18:52 UTC 2014


#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):

 > one difference between 7.6.3 and HEAD is the extra stack spilling before
 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


More information about the ghc-tickets mailing list