When a fixed interval for a register is inactive, the register is free
until that interval becomes active, or (and this was missing), until
another interval uses it before that position. So instead of blindly
overwriting the freeUntilPos, take the qMin of the existing one with
the intersection position.
Change-Id: I2730a748ef1e46b4782fbb9814e800eca52172f0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
if (it.isFP() == needsFPReg && it.reg() != LifeTimeInterval::Invalid) {
const int intersectionPos = nextIntersection(current, it, position);
if (!isPhiTarget && it.isFixedInterval() && current.end() == intersectionPos)
- freeUntilPos[it.reg()] = intersectionPos + 1;
+ freeUntilPos[it.reg()] = qMin(freeUntilPos[it.reg()], intersectionPos + 1);
else if (intersectionPos != -1)
freeUntilPos[it.reg()] = qMin(freeUntilPos[it.reg()], intersectionPos);
}