This boosts applications with hot integer loops suffering from register pressure. Below are results for a stress test with high register pressure in integer loop.
Moreover now developers can try more aggressive (in terms of register pressure) optimizations like unroll, inline, aggressive invariant motion, copy propagation...
--spilling versus splitting: Since both spilling and splitting live ranges reduce register pressure, how does the register allocator make a trade-off between these techniques, and how does it select the live ranges to operate on?
Because spill-code live ranges span only one instruction (and, in our machine model, registers are freed at instruction boundaries), spilling such a live range does not lower register pressure but increases spill code instead.
The net effect of combining splitting with delayed spilling is that the register allocator may spill only those segments of a virtual register's live range that do not contain references but span regions of high register pressure. This effect can be observed for numerous programs and is the reason for the performance improvements discussed in Section 4.
[lr.sub.1] (z) and [lr.sub.2](z) are transparent live ranges and spilled to reduce register pressure. Although the two live ranges do not have spill cost, they need shuffle code to move values between registers and memory.
This step consists of four major components: compute degree, remove nodes with degree less than N, lower register pressure, and commit the live-range unioning decision.
Lowering Register Pressure. If simplification of [MATHEMATICAL EXPRESSION NOT REPRODUCIBLE IN ASCII] blocks, then fusing the interference graphs of [MATHEMATICAL EXPRESSION NOT REPRODUCIBLE IN ASCII] and [MATHEMATICAL EXPRESSION NOT REPRODUCIBLE IN ASCII] along edge E induces high register pressure.
The definition and use may be far apart, and the live range contains a lot of blocks with high register pressure. Splitting the live range is not possible, even though splitting the parts of the live range that have high register pressure is desirable.
Let us, therefore, turn our attention to programs with significant register pressure.
alvinn, nasa7, tomcatv, doduc, and fpppp are the programs with high register pressure, and here we see the limitations of the all-or-nothing approach to spilling that is the foundation of Chaitin-style register allocation.