1. 11 Feb, 2017 1 commit
  2. 05 Sep, 2016 1 commit
  3. 10 Apr, 2016 1 commit
    • Herbert Valerio Riedel's avatar
      Reduce default for -fmax-pmcheck-iterations from 1e7 to 2e6 · d2e05c6b
      Herbert Valerio Riedel authored
      The commit 28f951ed introduced the
      `-fmax-pmcheck-iterations` flag and set the default limit to 1e7
      iterations.
      
      However, this value is still high enough that it can result GHC to
      exhibit memory spikes beyond 1 GiB of RAM usage (heap profile showed
      several `(:)`s, as well as `THUNK_2_0`, and `PmCon` during the memory
      spikes)
      
      A value of 2e6 seems to be a safer upper bound which still manages to
      let the checker not run into the limit in most cases.
      
      Test Plan: Validate, try building a few Hackage packages
      
      Reviewers: austin, gkaracha, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2095
      d2e05c6b
  4. 21 Aug, 2015 1 commit
    • thomie's avatar
      Refactor: delete most of the module FastTypes · 2f29ebbb
      thomie authored
      This reverses some of the work done in #1405, and goes back to the
      assumption that the bootstrap compiler understands GHC-haskell.
      
      In particular:
        * use MagicHash instead of _ILIT and _CLIT
        * pattern matching on I# if possible, instead of using iUnbox
          unnecessarily
        * use Int#/Char#/Addr# instead of the following type synonyms:
          - type FastInt   = Int#
          - type FastChar  = Char#
          - type FastPtr a = Addr#
        * inline the following functions:
          - iBox           = I#
          - cBox           = C#
          - fastChr        = chr#
          - fastOrd        = ord#
          - eqFastChar     = eqChar#
          - shiftLFastInt  = uncheckedIShiftL#
          - shiftR_FastInt = uncheckedIShiftRL#
          - shiftRLFastInt = uncheckedIShiftRL#
        * delete the following unused functions:
          - minFastInt
          - maxFastInt
          - uncheckedIShiftRA#
          - castFastPtr
          - panicDocFastInt and pprPanicFastInt
        * rename panicFastInt back to panic#
      
      These functions remain, since they actually do something:
        * iUnbox
        * bitAndFastInt
        * bitOrFastInt
      
      Test Plan: validate
      
      Reviewers: austin, bgamari
      
      Subscribers: rwbarton
      
      Differential Revision: https://phabricator.haskell.org/D1141
      
      GHC Trac Issues: #1405
      2f29ebbb
  5. 15 May, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Add LANGUAGE pragmas to compiler/ source files · 23892440
      Herbert Valerio Riedel authored
      In some cases, the layout of the LANGUAGE/OPTIONS_GHC lines has been
      reorganized, while following the convention, to
      
      - place `{-# LANGUAGE #-}` pragmas at the top of the source file, before
        any `{-# OPTIONS_GHC #-}`-lines.
      
      - Moreover, if the list of language extensions fit into a single
        `{-# LANGUAGE ... -#}`-line (shorter than 80 characters), keep it on one
        line. Otherwise split into `{-# LANGUAGE ... -#}`-lines for each
        individual language extension. In both cases, try to keep the
        enumeration alphabetically ordered.
        (The latter layout is preferable as it's more diff-friendly)
      
      While at it, this also replaces obsolete `{-# OPTIONS ... #-}` pragma
      occurences by `{-# OPTIONS_GHC ... #-}` pragmas.
      23892440
  6. 16 Jan, 2014 1 commit
  7. 16 Oct, 2013 2 commits
    • Jan Stolarek's avatar
      Remove unused code · a05ffbd9
      Jan Stolarek authored
      I am removing old loopification code that has been commented out
      for long long time. We now have loopification implemented in
      the code generator (see Note [Self-recursive tail calls]) so we
      won't need to resurect this old code.
      a05ffbd9
    • Jan Stolarek's avatar
      Trailing whitespaces · 738e2f12
      Jan Stolarek authored
      738e2f12
  8. 12 Nov, 2012 2 commits
    • Simon Marlow's avatar
      Fix warnings · 92957808
      Simon Marlow authored
      92957808
    • Simon Marlow's avatar
      Remove OldCmm, convert backends to consume new Cmm · d92bd17f
      Simon Marlow authored
      This removes the OldCmm data type and the CmmCvt pass that converts
      new Cmm to OldCmm.  The backends (NCGs, LLVM and C) have all been
      converted to consume new Cmm.
      
      The main difference between the two data types is that conditional
      branches in new Cmm have both true/false successors, whereas in OldCmm
      the false case was a fallthrough.  To generate slightly better code we
      occasionally need to invert a conditional to ensure that the
      branch-not-taken becomes a fallthrough; this was previously done in
      CmmCvt, and it is now done in CmmContFlowOpt.
      
      We could go further and use the Hoopl Block representation for native
      code, which would mean that we could use Hoopl's postorderDfs and
      analyses for native code, but for now I've left it as is, using the
      old ListGraph representation for native code.
      d92bd17f
  9. 30 Oct, 2012 1 commit
  10. 23 Oct, 2012 1 commit
  11. 08 Oct, 2012 1 commit
    • Simon Marlow's avatar
      Produce new-style Cmm from the Cmm parser · a7c0387d
      Simon Marlow authored
      The main change here is that the Cmm parser now allows high-level cmm
      code with argument-passing and function calls.  For example:
      
      foo ( gcptr a, bits32 b )
      {
        if (b > 0) {
           // we can make tail calls passing arguments:
           jump stg_ap_0_fast(a);
        }
      
        return (x,y);
      }
      
      More details on the new cmm syntax are in Note [Syntax of .cmm files]
      in CmmParse.y.
      
      The old syntax is still more-or-less supported for those occasional
      code fragments that really need to explicitly manipulate the stack.
      However there are a couple of differences: it is now obligatory to
      give a list of live GlobalRegs on every jump, e.g.
      
        jump %ENTRY_CODE(Sp(0)) [R1];
      
      Again, more details in Note [Syntax of .cmm files].
      
      I have rewritten most of the .cmm files in the RTS into the new
      syntax, except for AutoApply.cmm which is generated by the genapply
      program: this file could be generated in the new syntax instead and
      would probably be better off for it, but I ran out of enthusiasm.
      
      Some other changes in this batch:
      
       - The PrimOp calling convention is gone, primops now use the ordinary
         NativeNodeCall convention.  This means that primops and "foreign
         import prim" code must be written in high-level cmm, but they can
         now take more than 10 arguments.
      
       - CmmSink now does constant-folding (should fix #7219)
      
       - .cmm files now go through the cmmPipeline, and as a result we
         generate better code in many cases.  All the object files generated
         for the RTS .cmm files are now smaller.  Performance should be
         better too, but I haven't measured it yet.
      
       - RET_DYN frames are removed from the RTS, lots of code goes away
      
       - we now have some more canned GC points to cover unboxed-tuples with
         2-4 pointers, which will reduce code size a little.
      a7c0387d
  12. 25 Sep, 2012 1 commit
  13. 12 Sep, 2012 1 commit
  14. 06 Aug, 2012 2 commits
  15. 30 Jul, 2012 1 commit
    • Simon Marlow's avatar
      New codegen: do not split proc-points when using the NCG · f1ed6a10
      Simon Marlow authored
      Proc-point splitting is only required by backends that do not support
      having proc-points within a code block (that is, everything except the
      native backend, i.e. LLVM and C).
      
      Not doing proc-point splitting saves some compilation time, and might
      produce slightly better code in some cases.
      f1ed6a10
  16. 04 Jul, 2012 1 commit
  17. 20 Jun, 2012 1 commit
  18. 12 Jun, 2012 1 commit
  19. 15 Mar, 2012 1 commit
  20. 09 Mar, 2012 1 commit
  21. 06 Mar, 2012 2 commits
  22. 02 Mar, 2012 1 commit
  23. 27 Feb, 2012 1 commit
  24. 23 Feb, 2012 1 commit
  25. 15 Feb, 2012 1 commit
    • Simon Marlow's avatar
      Improvements to the mini-inliner · 3d8ab554
      Simon Marlow authored
       - inline x = R1, even if x occurs many times
       - inline past a store, if the expression is not a load
         (we could further refine this of course, but the idea here
         is to get reasonable code for not much effort)
      3d8ab554
  26. 10 Jan, 2012 1 commit
    • dterei's avatar
      Track STG live register information for use in LLVM · 4384e146
      dterei authored
      We now carry around with CmmJump statements a list of
      the STG registers that are live at that jump site.
      This is used by the LLVM backend so it can avoid
      unnesecarily passing around dead registers, improving
      perfromance. This gives us the framework to finally
      fix trac #4308.
      4384e146
  27. 06 Jan, 2012 2 commits
  28. 29 Nov, 2011 1 commit
  29. 05 Nov, 2011 3 commits
  30. 25 Aug, 2011 1 commit
  31. 06 Jul, 2011 1 commit
    • batterseapower's avatar
      Refactoring: explicitly mark whether we have an info table in RawCmm · 41ca0b8d
      batterseapower authored
      I introduced this to support explicitly recording the info table label
      in RawCmm for another patch I am working on, but it turned out to lead
      to significant simplification in those parts of the compiler that
      consume RawCmm.
      
      Now, instead of lots of tests for null [CmmStatic] we have a simple
      test of a Maybe, and have reduced the number of guys that need to know
      how to convert entry->info labels by a TON. There are only 3 callers
      of that function now!
      41ca0b8d
  32. 23 Jun, 2011 1 commit
    • tibbe's avatar
      Iteratively try to fold expressions before constant propagation · e9bc0dde
      tibbe authored
      Before this change the constant expression
      
         _ccI::I64 = (16 >> 7) + 1;
      
      wouldn't be propagated, as it wouldn't be completely folded.  This
      meant that this expression wouldn't be unrolled
      
          thawArray# arr# 0# 16# s#
      
      The new code generator already does this correctly.
      e9bc0dde
  33. 17 Jun, 2011 1 commit
    • Edward Z. Yang's avatar
      Port MachOp folding to new code generator. · b8e0ce7b
      Edward Z. Yang authored
      
      
          * Rewrote cmmMachOpFold to cmmMachOpFoldM, which returns
            Nothing if no folding took place.
          * Wrote some generic mapping functions which take functions
            of form 'a -> Maybe a' and are smart about sharing.
          * Split up optimizations from PIC and PPC work in the native
            codegen, so they'll be easier to turn off later
            (they are not currently being turned off, however.)
          * Whitespace fixes!
      
      ToDo: Turn off MachOp folding when new codegenerator is being used.
      Signed-off-by: Edward Z. Yang's avatarEdward Z. Yang <ezyang@mit.edu>
      b8e0ce7b