summaryrefslogtreecommitdiff
path: root/validate
diff options
context:
space:
mode:
authorJan Stolarek <jan.stolarek@p.lodz.pl>2013-09-12 14:29:37 +0100
committerJan Stolarek <jan.stolarek@p.lodz.pl>2013-09-12 17:04:41 +0100
commitad15c2b4bd37082ce989268b3d2f86a2cd34386a (patch)
tree7e72bd4792691f93f27ae8bae6589963755c4cf7 /validate
parent66aa489fcbfca30dc3c3b553fce4f1e4debfb7c1 (diff)
downloadhaskell-ad15c2b4bd37082ce989268b3d2f86a2cd34386a.tar.gz
Improve sinking pass
This commit does two things: * Allows duplicating of global registers and literals by inlining them. Previously we would only inline global register or literal if it was used only once. * Changes method of determining conflicts between a node and an assignment. New method has two advantages. It relies on DefinerOfRegs and UserOfRegs typeclasses, so if a set of registers defined or used by a node should ever change, `conflicts` function will use the changed definition. This definition also catches more cases than the previous one (namely CmmCall and CmmForeignCall) which is a step towards making it possible to run sinking pass before stack layout (currently this doesn't work). This patch also adds a lot of comments that are result of about two-week long investigation of how sinking pass works and why it does what it does.
Diffstat (limited to 'validate')
0 files changed, 0 insertions, 0 deletions