Description
In build_ifg_physical we compute a register pressure for each block with a corresponding low-to-high register pressure transition. That is the first transition from low to high pressure in a block (starting from the top).
Stepping backwards, when lowering the pressure, when a definition is reached, we only subtract the pressure by one, and not by the number of regs that the definition is actually using (could be 2 because of longs and doubles). The following comparison might then miss to detect a transition:
In Pressure::lower():
..
_current_pressure -= lrg.reg_pressure();
if (_current_pressure == _high_pressure_limit) {
..
}
..
Stepping backwards, when lowering the pressure, when a definition is reached, we only subtract the pressure by one, and not by the number of regs that the definition is actually using (could be 2 because of longs and doubles). The following comparison might then miss to detect a transition:
In Pressure::lower():
..
_current_pressure -= lrg.reg_pressure();
if (_current_pressure == _high_pressure_limit) {
..
}
..