1. 05 Jan, 2012 1 commit
    • Simon Marlow's avatar
      Fixup to 4464c92b · 974f4510
      Simon Marlow authored
      Instead of enterLocalIdLabel we should get the label from the
      ClosureInfo, because that knows better whether the label should be
      local or not.
      
      Needed by #5357
      974f4510
  2. 04 Jan, 2012 1 commit
  3. 04 Nov, 2011 1 commit
  4. 06 Sep, 2011 2 commits
    • batterseapower's avatar
      Implement -XConstraintKind · 9729fe7c
      batterseapower authored
      Basically as documented in http://hackage.haskell.org/trac/ghc/wiki/KindFact,
      this patch adds a new kind Constraint such that:
      
        Show :: * -> Constraint
        (?x::Int) :: Constraint
        (Int ~ a) :: Constraint
      
      And you can write *any* type with kind Constraint to the left of (=>):
      even if that type is a type synonym, type variable, indexed type or so on.
      
      The following (somewhat related) changes are also made:
       1. We now box equality evidence. This is required because we want
          to give (Int ~ a) the *lifted* kind Constraint
       2. For similar reasons, implicit parameters can now only be of
          a lifted kind. (?x::Int#) => ty is now ruled out
       3. Implicit parameter constraints are now allowed in superclasses
          and instance contexts (this just falls out as OK with the new
          constraint solver)
      
      Internally the following major changes were made:
       1. There is now no PredTy in the Type data type. Instead
          GHC checks the kind of a type to figure out if it is a predicate
       2. There is now no AClass TyThing: we represent classes as TyThings
          just as a ATyCon (classes had TyCons anyway)
       3. What used to be (~) is now pretty-printed as (~#). The box
          constructor EqBox :: (a ~# b) -> (a ~ b)
       4. The type LCoercion is used internally in the constraint solver
          and type checker to represent coercions with free variables
          of type (a ~ b) rather than (a ~# b)
      9729fe7c
    • Simon Marlow's avatar
      fix the eager-blackholing check, which I inadvertently broke in · 6ffaf6ff
      Simon Marlow authored
      1c2f8953 (symptom was broken
      biographical profiling, see #5451).
      6ffaf6ff
  5. 25 Aug, 2011 4 commits
  6. 03 Aug, 2011 1 commit
  7. 28 Jul, 2011 5 commits
  8. 07 Jul, 2011 1 commit
  9. 30 Jun, 2011 1 commit
  10. 25 Mar, 2010 1 commit
  11. 06 Jul, 2009 1 commit
  12. 17 Mar, 2009 1 commit
    • Simon Marlow's avatar
      FIX biographical profiling (#3039, probably #2297) · f8f4cb3f
      Simon Marlow authored
      Since we introduced pointer tagging, we no longer always enter a
      closure to evaluate it.  However, the biographical profiler relies on
      closures being entered in order to mark them as "used", so we were
      getting spurious amounts of data attributed to VOID.  It turns out
      there are various places that need to be fixed, and I think at least
      one of them was also wrong before pointer tagging (CgCon.cgReturnDataCon).
      f8f4cb3f
  13. 13 Jan, 2009 1 commit
  14. 29 Dec, 2008 1 commit
  15. 18 Dec, 2008 1 commit
  16. 05 Dec, 2008 1 commit
  17. 14 Aug, 2008 1 commit
    • dias@eecs.harvard.edu's avatar
      Merging in the new codegen branch · 176fa33f
      dias@eecs.harvard.edu authored
      This merge does not turn on the new codegen (which only compiles
      a select few programs at this point),
      but it does introduce some changes to the old code generator.
      
      The high bits:
      1. The Rep Swamp patch is finally here.
         The highlight is that the representation of types at the
         machine level has changed.
         Consequently, this patch contains updates across several back ends.
      2. The new Stg -> Cmm path is here, although it appears to have a
         fair number of bugs lurking.
      3. Many improvements along the CmmCPSZ path, including:
         o stack layout
         o some code for infotables, half of which is right and half wrong
         o proc-point splitting
      176fa33f
  18. 18 Nov, 2008 1 commit
    • Simon Marlow's avatar
      Add optional eager black-holing, with new flag -feager-blackholing · d600bf7a
      Simon Marlow authored
      Eager blackholing can improve parallel performance by reducing the
      chances that two threads perform the same computation.  However, it
      has a cost: one extra memory write per thunk entry.  
      
      To get the best results, any code which may be executed in parallel
      should be compiled with eager blackholing turned on.  But since
      there's a cost for sequential code, we make it optional and turn it on
      for the parallel package only.  It might be a good idea to compile
      applications (or modules) with parallel code in with
      -feager-blackholing.
      
      ToDo: document -feager-blackholing.
      d600bf7a
  19. 18 Sep, 2008 1 commit
  20. 20 Jul, 2008 1 commit
  21. 12 Apr, 2008 1 commit
  22. 15 Mar, 2008 1 commit
  23. 04 Sep, 2007 1 commit
  24. 03 Sep, 2007 1 commit
  25. 01 Sep, 2007 1 commit
  26. 31 Jul, 2007 1 commit
    • Clemens Fruhwirth's avatar
      Change the strategy to determine dynamic data access · 81b2276f
      Clemens Fruhwirth authored
      Instead of attaching the information whether a Label is going to be
      accessed dynamically or not (distinction between IdLabel/DynLabel and
      additional flags in ModuleInitLabel and PlainModuleInitLabel), we hand
      dflags through the CmmOpt monad and the NatM monad. Before calling
      labelDynamic in PositionIndependentCode, we extract thisPackage from
      dflags and supply the current package to labelDynamic, so it can take
      this information into account instead of extracting it from the labels
      itself. This simplifies a lot of code in codeGen that just hands
      through this_pkg.
      81b2276f
  27. 27 Jul, 2007 1 commit
    • Simon Marlow's avatar
      Pointer Tagging · 6015a94f
      Simon Marlow authored
        
      This patch implements pointer tagging as per our ICFP'07 paper "Faster
      laziness using dynamic pointer tagging".  It improves performance by
      10-15% for most workloads, including GHC itself.
      
      The original patches were by Alexey Rodriguez Yakushev
      <mrchebas@gmail.com>, with additions and improvements by me.  I've
      re-recorded the development as a single patch.
      
      The basic idea is this: we use the low 2 bits of a pointer to a heap
      object (3 bits on a 64-bit architecture) to encode some information
      about the object pointed to.  For a constructor, we encode the "tag"
      of the constructor (e.g. True vs. False), for a function closure its
      arity.  This enables some decisions to be made without dereferencing
      the pointer, which speeds up some common operations.  In particular it
      enables us to avoid costly indirect jumps in many cases.
      
      More information in the commentary:
      
      http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging
      6015a94f
  28. 02 Jul, 2007 1 commit
    • Michael D. Adams's avatar
      Multiple improvements to CPS algorithm. · a2d5d3c9
      Michael D. Adams authored
      These include:
       - Stack size detection now includes function arguments.
       - Stack size detection now avoids stack checks just because of
         the GC block.
       - A CmmCall followed by a CmmBranch will no longer generate an extra
         continuation consisting just of the brach.
       - Multiple CmmCall/CmmBranch pairs that all go to the same place
         will try to use the same continuation.  If they can't (because
         the return value signature is different), adaptor block are built.
       - Function entry statements are now in a separate block.
         (Fixed bug with branches to the entry block having unintended effects.)
       - Other changes that I can't recall right now.
      a2d5d3c9
  29. 27 Jun, 2007 2 commits
  30. 11 Jan, 2007 1 commit
    • chevalier@alum.wellesley.edu's avatar
      Remove bogus assertion in getCallMethod · c0987224
      chevalier@alum.wellesley.edu authored
      With my as-yet-uncommitted changes to the demand analyzer, code got
       generated for some programs that caused this assertion to fail.  The
       transformation I was doing was correct; it was the assertion that
       wasn't. So, the assertion is removed.
       
       This is actually Simon PJ's patch rather than mine, but I noticed that
       it wasn't checked in and it seems completely safe to do so.
      c0987224
  31. 18 Oct, 2006 1 commit
    • simonpj@microsoft.com's avatar
      Add the primitive type Any, and use it for Dynamics · c128930d
      simonpj@microsoft.com authored
      GHC's code generator can only enter a closure if it's guaranteed
      not to be a function.  In the Dynamic module, we were using the 
      type (forall a.a) as the type to which the dynamic type was unsafely
      cast:
      	type Obj = forall a.a
      
      Gut alas this polytype was sometimes instantiated to (), something 
      like this (it only bit when profiling was enabled)
      	let y::() = dyn ()
      	in (y `cast` ..) p q
      As a result, an ASSERT in ClosureInfo fired (hooray).
      
      I've tided this up by making a new, primitive, lifted type Any, and
      arranging that Dynamic uses Any, thus:
      	type Obj = ANy
      
      While I was at it, I also arranged that when the type checker instantiates 
      un-constrained type variables, it now instantiates them to Any, not ()
      	e.g.  length Any []
      
      [There remains a Horrible Hack when we want Any-like things at arbitrary 
      kinds.  This essentially never happens, but see comments with 
      TysPrim.mkAnyPrimTyCon.]
      
      Anyway, this fixes Trac #905
      c128930d