diff --git a/js/src/jit/BacktrackingAllocator.cpp b/js/src/jit/BacktrackingAllocator.cpp index 740dd7f824f8..166713fbd79f 100644 --- a/js/src/jit/BacktrackingAllocator.cpp +++ b/js/src/jit/BacktrackingAllocator.cpp @@ -1559,6 +1559,16 @@ BacktrackingAllocator::trySplitAfterLastRegisterUse(LiveInterval *interval, Live CodePosition lastRegisterFrom, lastRegisterTo, lastUse; + // If the definition of the interval is in a register, consider that a + // register use too for our purposes here. + if (isRegisterDefinition(interval)) { + CodePosition spillStart = minimalDefEnd(insData[interval->start()].ins()).next(); + if (!conflict || spillStart < conflict->start()) { + lastUse = lastRegisterFrom = interval->start(); + lastRegisterTo = spillStart; + } + } + for (UsePositionIterator iter(interval->usesBegin()); iter != interval->usesEnd(); iter++)