diff options
| author | klebinger.andreas@gmx.at <klebinger.andreas@gmx.at> | 2019-02-18 00:28:39 +0100 |
|---|---|---|
| committer | Ben Gamari <ben@smart-cactus.org> | 2019-10-13 15:07:06 -0400 |
| commit | 9a90f27f080123c636a3401b103ea68aa843e34d (patch) | |
| tree | 581dabf4a1720457bce175902d8e9b5f6f1a0d93 /compiler/ghc.cabal.in | |
| parent | d584e3f08cfee6e28b70bf53c573d86e44f326f8 (diff) | |
| download | haskell-wip/gc/base.tar.gz | |
Add loop level analysis to the NCG backend.wip/gc/base
For backends maintaining the CFG during codegen
we can now find loops and their nesting level.
This is based on the Cmm CFG and dominator analysis.
As a result we can estimate edge frequencies a lot better
for methods, resulting in far better code layout.
Speedup on nofib: ~1.5%
Increase in compile times: ~1.9%
To make this feasible this commit adds:
* Dominator analysis based on the Lengauer-Tarjan Algorithm.
* An algorithm estimating global edge frequences from branch
probabilities - In CFG.hs
A few static branch prediction heuristics:
* Expect to take the backedge in loops.
* Expect to take the branch NOT exiting a loop.
* Expect integer vs constant comparisons to be false.
We also treat heap/stack checks special for branch prediction
to avoid them being treated as loops.
(cherry picked from commit 056aa12d60f34ee90db2527586c82fc6f16eba39)
Diffstat (limited to 'compiler/ghc.cabal.in')
| -rw-r--r-- | compiler/ghc.cabal.in | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in index a612733de6..3ff27ea098 100644 --- a/compiler/ghc.cabal.in +++ b/compiler/ghc.cabal.in @@ -593,6 +593,7 @@ Library Instruction BlockLayout CFG + Dominators Format Reg RegClass |
