1. 07 Aug, 2007 9 commits
  2. 03 Aug, 2007 3 commits
  3. 09 Aug, 2007 6 commits
  4. 03 Aug, 2007 1 commit
  5. 09 Aug, 2007 1 commit
  6. 14 Jul, 2007 1 commit
    • Clemens Fruhwirth's avatar
      joinToTargets to emit fixup code even when movement graph contains cycles · 64f0661e
      Clemens Fruhwirth authored
      First, cycles can only start of with registers and their destination
      must involve a register location. This is because memory locations are
      allocated exclusively for a virtual register and hence can never cause
      a conflict in the assignment, hence need no fixup code. Therefore, we
      only have to deal with InReg -> InReg, or InReg -> InReg/InMem
      movements.  
      
      The strategy is to take the first cycle element, which is guaranteed
      to start with a register, spill it to a fresh memory location, compute
      the fixup for the rest, and restore from the spill slot to its
      destinations. The "rest" will degenerate into an acyclic scc, so we do
      not need take care of the empty list case in CyclicScc. 
       ***END OF DESCRIPTION***
      
      Place the long patch description above the ***END OF DESCRIPTION*** marker.
      The first line of this file will be the patch name.
      
      
      This patch contains the following changes:
      
      M ./compiler/nativeGen/RegisterAlloc.hs -6 +27
      64f0661e
  7. 05 Aug, 2007 2 commits
    • simonpj@microsoft.com's avatar
      Make SpecConstr specialise for constant arguments again · 57a4597d
      simonpj@microsoft.com authored
      Consider
        lvl = Just True
      
        foo :: Maybe Bool -> Int -> Int
        foo (Just True) i = i
        foo _           i = foo lvl i
      
      SpecConstr should specialise foo, but it wasn't doing so (spotted
      by Roman).
      
      Reason: lvl's unfolding wasn't in the cloned version of lvl.
      Solution: extend the value environment to record top-level bindings too
      
      At the same time I made it work if 'lvl' is a lambda, in which case it
      is again worth specialisg.  This meant renaming ConEnv to ValueEnv,
      and adding a case for 'LambdaVal'.
      
      (To make specialisation on lambdas work properly, we have to do lambda
      lifting as well, but this gets part of the way, and fixes a bug too.)
      
      57a4597d
    • simonpj@microsoft.com's avatar
  8. 04 Aug, 2007 4 commits
  9. 09 Aug, 2007 1 commit
  10. 08 Aug, 2007 2 commits
  11. 07 Aug, 2007 1 commit
  12. 06 Aug, 2007 1 commit
  13. 07 Aug, 2007 3 commits
  14. 06 Aug, 2007 1 commit
  15. 05 Aug, 2007 4 commits