Skip to content
  • Sylvain Henry's avatar
    Make Logger independent of DynFlags · 4dc681c7
    Sylvain Henry authored
    Introduce LogFlags as a independent subset of DynFlags used for logging.
    As a consequence in many places we don't have to pass both Logger and
    DynFlags anymore.
    
    The main reason for this refactoring is that I want to refactor the
    systools interfaces: for now many systools functions use DynFlags both
    to use the Logger and to fetch their parameters (e.g. ldInputs for the
    linker). I'm interested in refactoring the way they fetch their
    parameters (i.e. use dedicated XxxOpts data types instead of DynFlags)
    for #19877. But if I did this refactoring before refactoring the Logger,
    we would have duplicate parameters (e.g. ldInputs from DynFlags and
    linkerInputs from LinkerOpts). Hence this patch first.
    
    Some flags don't really belong to LogFlags because they are subsystem
    specific (e.g. most DumpFlags). For example -ddump-asm should better be
    passed in NCGConfig somehow. This patch doesn't fix this tight coupling:
    the dump flags are part of the UI but they are passed all the way down
    for example to infer the file name for the dumps.
    
    Because LogFlags are a subset of the DynFlags, we must update the former
    when the latter changes (not so often). As a consequence we now use
    accessors to read/write DynFlags in HscEnv instead of using `hsc_dflags`
    directly.
    
    In the process I've also made some subsystems less dependent on DynFlags:
    
    - CmmToAsm: by passing some missing flags via NCGConfig (see new fields
      in GHC.CmmToAsm.Config)
    - Core.Opt.*:
        - by passing -dinline-check value into UnfoldingOpts
        - by fixing some Core passes interfaces (e.g. CallArity, FloatIn)
          that took DynFlags argument for no good reason.
        - as a side-effect GHC.Core.Opt.Pipeline.doCorePass is much less
          convoluted.
    4dc681c7