diff options
author | Jan Stolarek <jan.stolarek@p.lodz.pl> | 2013-09-12 14:29:37 +0100 |
---|---|---|
committer | Jan Stolarek <jan.stolarek@p.lodz.pl> | 2013-09-12 17:04:41 +0100 |
commit | ad15c2b4bd37082ce989268b3d2f86a2cd34386a (patch) | |
tree | 7e72bd4792691f93f27ae8bae6589963755c4cf7 /validate | |
parent | 66aa489fcbfca30dc3c3b553fce4f1e4debfb7c1 (diff) | |
download | haskell-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