... | @@ -35,7 +35,7 @@ Look at the picture first. The yellow boxes are compiler passes, while the blue |
... | @@ -35,7 +35,7 @@ Look at the picture first. The yellow boxes are compiler passes, while the blue |
|
- error messages can display precisely the syntax that the user wrote; and
|
|
- error messages can display precisely the syntax that the user wrote; and
|
|
- desugaring is not required to preserve type-inference properties.
|
|
- desugaring is not required to preserve type-inference properties.
|
|
|
|
|
|
- The **SimplCore** pass ([compiler/simplCore/SimplCore.hs](/trac/ghc/browser/ghc/compiler/simplCore/SimplCore.hs)) is a bunch of Core-to-Core passes that optimise the program; see [A transformation-based optimiser for Haskell (SCP'98)](http://research.microsoft.com/%7Esimonpj/Papers/comp-by-trans-scp.ps.gz) for a more-or-less accurate overview. See [Commentary/Compiler/Core2CorePipeline](commentary/compiler/core2-core-pipeline) for an overview of the Core-to-Core optimisation pipeline. The main passes are:
|
|
- The **SimplCore** pass ([compiler/simplCore/SimplCore.hs](/trac/ghc/browser/ghc/compiler/simplCore/SimplCore.hs)) is a bunch of Core-to-Core passes that optimise the program; see [A transformation-based optimiser for Haskell (SCP'98)](http://research.microsoft.com/%7Esimonpj/Papers/comp-by-trans-scp.ps.gz) for a more-or-less accurate overview. See [Commentary/Compiler/Core2CorePipeline](commentary/compiler/core-to-core-pipeline) for an overview of the Core-to-Core optimisation pipeline. The main passes are:
|
|
|
|
|
|
- The **Simplifier**, which applies lots of small, local optimisations to the program. The simplifier is big and complicated, because it implements a *lot* of transformations; and tries to make them cascade nicely. The transformation-based optimiser paper gives lots of details, but two other papers are particularly relevant: [Secrets of the Glasgow Haskell Compiler inliner (JFP'02)](http://research.microsoft.com/%7Esimonpj/Papers/inlining/index.htm) and [ Playing by the rules: rewriting as a practical optimisation technique in GHC (Haskell workshop 2001)](http://research.microsoft.com/%7Esimonpj/Papers/rules.htm). (`-ddump-simpl`)
|
|
- The **Simplifier**, which applies lots of small, local optimisations to the program. The simplifier is big and complicated, because it implements a *lot* of transformations; and tries to make them cascade nicely. The transformation-based optimiser paper gives lots of details, but two other papers are particularly relevant: [Secrets of the Glasgow Haskell Compiler inliner (JFP'02)](http://research.microsoft.com/%7Esimonpj/Papers/inlining/index.htm) and [ Playing by the rules: rewriting as a practical optimisation technique in GHC (Haskell workshop 2001)](http://research.microsoft.com/%7Esimonpj/Papers/rules.htm). (`-ddump-simpl`)
|
|
- The **float-out** and **float-in** transformations, which move let-bindings outwards and inwards respectively. See [Let-floating: moving bindings to give faster programs (ICFP '96)](http://research.microsoft.com/%7Esimonpj/papers/float.ps.gz).
|
|
- The **float-out** and **float-in** transformations, which move let-bindings outwards and inwards respectively. See [Let-floating: moving bindings to give faster programs (ICFP '96)](http://research.microsoft.com/%7Esimonpj/papers/float.ps.gz).
|
... | | ... | |