summaryrefslogtreecommitdiff
path: root/compiler/parser
diff options
context:
space:
mode:
authorklebinger.andreas@gmx.at <klebinger.andreas@gmx.at>2019-02-18 00:28:39 +0100
committerBen Gamari <ben@smart-cactus.org>2019-10-13 15:07:06 -0400
commit9a90f27f080123c636a3401b103ea68aa843e34d (patch)
tree581dabf4a1720457bce175902d8e9b5f6f1a0d93 /compiler/parser
parentd584e3f08cfee6e28b70bf53c573d86e44f326f8 (diff)
downloadhaskell-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/parser')
0 files changed, 0 insertions, 0 deletions