[GHC] #15058: scc001 unexpected passes in prof way on CircleCI

GHC ghc-devs at haskell.org
Sun Jul 1 11:10:17 UTC 2018


#15058: scc001 unexpected passes in prof way on CircleCI
-------------------------------------+-------------------------------------
        Reporter:  bgamari           |                Owner:  (none)
            Type:  bug               |               Status:  closed
        Priority:  high              |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.2.2
      Resolution:  fixed             |             Keywords:  ci-breakage
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #10037            |  Differential Rev(s):  Phab:D4712
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by osa1:

Old description:

> This was already fixed with c4219d9f7d1, but I realized this too late and
> actually debugged this. See below for my summary.
>
> This is also not related with #4012 (different optimization parameters of
> course result in different compiled code) and #12935 (Core outputs are
> different, not related with object code) so removing those from "related
> tickets".
>
> ----
>
> The diff is not helpful because it doesn't show the original output and
> expected files so we miss some context. Basically with `-O0` (default,
> prof way) `h` is top level and gets a cost centre accordingly, but with
> `-O` (profasm way) it's inlined with its SCC.
>
> With -O0 (default, prof way):
>
> {{{
> h_rsH = scctick<h> case ds_r1I1 of { (h1_a1qY) -> h1_a1qY }
>
> main :: IO ()
> main
>   = scctick<main>
>     >>
>       GHC.Base.$fMonadIO
>       ($ (print GHC.Show.$fShowBool) (tick<f> GHC.Types.True))
>       (>>
>          GHC.Base.$fMonadIO
>          ($ (print GHC.Show.$fShowInt) (tick<g> GHC.Types.I# 3#))
>          ($ (print GHC.Show.$fShowChar) (h_rsH (GHC.Types.C# 'a'#))))
> }}}
>
> With -O (profasm WAY):
>
> {{{
> Main.main2
>   = scc<main>
>     tick<h>
>     case Main.main5 of { (h_a1se) ->
>     case scc<h> h_a1se Main.main4 of { GHC.Types.C# ds1_a1Zn ->
>     case ds1_a1Zn of ds2_a1Zp {
>       __DEFAULT ->
>         GHC.Types.:
>           GHC.Show.$fShowChar3 (GHC.Show.$wshowLitChar ds2_a1Zp
> Main.main3);
>       '\''# -> GHC.Show.$fShowChar1
>     }
>     }
>     }
> }}}
>
> And profiling outputs are correct in both cases. prof way: (h is a CAF)
>
> {{{
> COST CENTRE  MODULE                SRC                    no.     entries
> %time %alloc   %time %alloc
>
> MAIN         MAIN                  <built-in>             115          0
> 0.0    1.2     0.0  100.0
>  CAF         Main                  <entire-module>        229          0
> 0.0    0.1     0.0    1.5
>   (...)      Main                  scc001.hs:16:1-16      235          1
> 0.0    0.0     0.0    0.0
>   h          Main                  scc001.hs:16:1-16      234          1
> 0.0    0.0     0.0    0.0
>   main       Main                  scc001.hs:(5,1)-(7,23) 230          1
> 0.0    1.4     0.0    1.4
>    f         Main                  scc001.hs:10:1-7       232          1
> 0.0    0.0     0.0    0.0
>    g         Main                  scc001.hs:13:1-7       233          1
> 0.0    0.0     0.0    0.0
> }}}
>
> profasm way: (h is inlined, no CAFs for it)
>
> {{{
> COST CENTRE  MODULE                SRC                    no.     entries
> %time %alloc   %time %alloc
>
> MAIN         MAIN                  <built-in>             115          0
> 0.0    1.2     0.0  100.0
>  CAF         Main                  <entire-module>        229          0
> 0.0    0.1     0.0    0.3
>   (...)      Main                  scc001.hs:16:1-16      235          1
> 0.0    0.0     0.0    0.0
>   main       Main                  scc001.hs:(5,1)-(7,23) 230          1
> 0.0    0.3     0.0    0.3
>    g         Main                  scc001.hs:13:1-7       233          1
> 0.0    0.0     0.0    0.0
>    h         Main                  scc001.hs:16:1-16      234          1
> 0.0    0.0     0.0    0.0
> }}}
>
> Some ways to fix:
>
> - If we really want to test this with multiple ways, use two different
> tests depending on whether the ways add -O or not. Use two different
> prof.sample files.
> - Only test with ways that add or don't add -O, use single prof.sample.
>
> I don't understand why scc001 is considered as "unexpected pass" in the
> summary in CircleCI link above. In the logs I see that it actually
> failed, and I don't see any unexpected passes.

New description:

 This should supposedly fail due to #10037.

--

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15058#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list