#2297: Profiler is inconsistent about biography for GHC's heap
--------------------------+-------------------------------------------------
    Reporter:  igloo      |       Owner:             
        Type:  bug        |      Status:  new        
    Priority:  normal     |   Milestone:  6.10 branch
   Component:  Profiling  |     Version:  6.9        
    Severity:  normal     |    Keywords:             
  Difficulty:  Unknown    |    Testcase:             
Architecture:  Unknown    |          Os:  Unknown    
--------------------------+-------------------------------------------------
 My slightly modified `rnBind` has this clause (`i` is an `Int`):
 {{{
 rnBind sig_fn
        trim
        i
        (L loc (FunBind { fun_id = name,
                          fun_infix = inf,
                          fun_matches = matches,
                          -- no pattern FVs
                          bind_fvs = _
                        }))
        -- invariant: no free vars here when it's a FunBind
   = i `seq` setSrcSpan loc $
     do  { let plain_name = unLoc name

     ; (matches', fvs) <- bindSigTyVarsFV (sig_fn plain_name) $
                 -- bindSigTyVars tests for Opt_ScopedTyVars
                  rnMatchGroup (FunRhs plain_name inf) matches

     ; checkPrecMatch inf plain_name matches'

     ; return
         (L loc (trace ("Using FunBind for " ++ show i)
                 (FunBind { fun_id = name,
                                   fun_infix = inf,
                                   fun_matches = matches',
                      bind_fvs = trim fvs,
                                   fun_co_fn = idHsWrapper,
                                   fun_tick = Nothing })),
           [plain_name],
           fvs)
       }
 }}}
 If I comment out the trace and run
 {{{
 ghc --make J -fforce-recomp +RTS -p -hcrnBind -hyHsBindLR -hb
 }}}
 then I get `notrace.png`, all VOID. However, with the trace I get
 `trace.png`, LAG turning into DRAG. The two graphs are also a slightly
 different shape, which is curious.

 Also attached is the core for with and without the tracing. I think the
 only interesting difference is
 {{{
 -      a30_ [ALWAYS Just L] :: NameSet.FreeVars
 +      a30_ [ALWAYS Just L] :: HsBinds.HsBindLR Name.Name Name.Name
        [Str: DmdType]
 -      a30_ = w1_ ww3_ } in
 -    let {
 -      a31_ :: HsBinds.HsWrapper
 -      []
 -      a31_ =
 -        __scc {rnBind ghc-6.9.20080517:RnBinds !}
 -        __scc {idHsWrapper ghc-6.9.20080517:HsBinds} HsBinds.WpHole } in
 -    let {
 -      a32_ :: HsBinds.HsWrapper
 -      []
 -      a32_ =
 -        __scc {rnBind ghc-6.9.20080517:RnBinds !}
 -        __scc {idHsWrapper ghc-6.9.20080517:HsBinds} HsBinds.WpHole } in
 -    let {
 -      a33_ :: HsBinds.HsBindLR Name.Name Name.Name
 -      [Str: DmdType]
 -      a33_ =
 -        HsBinds.FunBind
 -          @ Name.Name
 -          @ Name.Name
 -          name_
 -          inf_
 -          ww2_
 -          a32_
 -          a30_
 -          (Data.Maybe.Nothing @ (GHC.Base.Int, [Name.Name])) } in
 +      a30_ =
 +        Debug.Trace.trace
 +          @ (HsBinds.HsBindLR Name.Name Name.Name)
 +          lvl45_
 +          (HsBinds.FunBind
 +             @ Name.Name
 +             @ Name.Name
 +             name_
 +             inf_
 +             ww2_
 +             (__scc {rnBind ghc-6.9.20080517:RnBinds !}
 +              __scc {idHsWrapper ghc-6.9.20080517:HsBinds}
 HsBinds.WpHole)
 +             (w1_ ww3_)
 +             (Data.Maybe.Nothing @ (GHC.Base.Int, [Name.Name]))) } in
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2297>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to