- 06 Oct, 2006 3 commits
-
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
- 05 Oct, 2006 1 commit
-
-
davve@dtek.chalmers.se authored
-
- 29 Sep, 2006 1 commit
-
-
brianlsmith@gmail.com authored
-
- 05 Oct, 2006 2 commits
-
-
simonpj@microsoft.com authored
-
Ian Lynagh authored
-
- 03 Oct, 2006 6 commits
-
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
- 05 Oct, 2006 10 commits
-
-
Ian Lynagh authored
-
simonpj@microsoft.com authored
This patch teaches SpecConstr about casts; see Note [SpecConstr for casts]
-
simonpj@microsoft.com authored
Note [Float coercions] ~~~~~~~~~~~~~~~~~~~~~~ When we find the binding x = e `cast` co we'd like to transform it to x' = e x = x `cast` co -- A trivial binding There's a chance that e will be a constructor application or function, or something like that, so moving the coerion to the usage site may well cancel the coersions and lead to further optimisation. Example: data family T a :: * data instance T Int = T Int foo :: Int -> Int -> Int foo m n = ... where x = T m go 0 = 0 go n = case x of { T m -> go (n-m) } -- This case should optimise
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
The substitution used to carry "fragile" OccInfo to call sites via the DoneId constructor of SimplEnv.SimplSR. This was always a tricky thing to do, and for some time I've been removing the need for it. Now at last I think we can nuke it altogether. Hooray. I did a full nonfib run, and got zero perf changes.
-
simonpj@microsoft.com authored
This is another attempt to fix the interaction between recursion and RULES. I just had it wrong before! Now the significance of the flag on IAmALoopBreaker is given in BasicTypes | IAmALoopBreaker -- Used by the occurrence analyser to mark loop-breakers -- in a group of recursive definitions !RulesOnly -- True <=> This loop breaker mentions the other binders -- in its recursive group only in its RULES, not -- in its rhs -- See OccurAnal Note [RulesOnly]
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
- 21 Sep, 2006 1 commit
-
-
bjorn@bringert.net authored
-
- 20 Sep, 2006 1 commit
-
-
bjorn@bringert.net authored
-
- 19 Sep, 2006 2 commits
-
-
bjorn@bringert.net authored
-
bjorn@bringert.net authored
-
- 18 Sep, 2006 2 commits
-
-
bjorn@bringert.net authored
-
bjorn@bringert.net authored
-
- 17 Sep, 2006 2 commits
-
-
bjorn@bringert.net authored
-
bjorn@bringert.net authored
-
- 04 Oct, 2006 9 commits
-
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
Note [Recursive unboxing] ~~~~~~~~~~~~~~~~~~~~~~~~~ Be careful not to try to unbox this! data T = MkT !T Int But it's the *argument* type that matters. This is fine: data S = MkS S !Int because Int is non-recursive. Before this patch, we were only doing the unboxing if the *parent* data type was non-recursive (eg that meant S was not unboxed), but that is over-conservative. This showed up with indexed data types (thanks to Roman for finding it) because indexed data types are conservatively regarded as always recursive.
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
Note [Scrutinee with cast] ~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider this: f = \ t -> case (v `cast` co) of V a b -> a : f t Exactly the same optimistaion (unrolling one call to f) will work here, despite the cast. See mk_alt_env in the Case branch of libCase. This patch does the job. For a change, it was really easy.
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
Remove ILX from the GHC altogether (although I left the source file IlxGen in case anyone wants to see it)
-
simonpj@microsoft.com authored
-