--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/lsra/TraceLinearScanLifetimeAnalysisPhase.java 2017-08-28 14:09:41.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/lsra/TraceLinearScanLifetimeAnalysisPhase.java 2017-08-28 14:09:41.000000000 -0700 @@ -541,16 +541,23 @@ assert instructionIndex == 0 : "not at start?" + instructionIndex; handleTraceBegin(blocks[0]); + if (TraceRAuseInterTraceHints.getValue(allocator.getLIR().getOptions())) { + addInterTraceHints(); + } // fix spill state for phi/incoming intervals for (TraceInterval interval : allocator.intervals()) { - if (interval != null && interval.spillState().equals(SpillState.NoDefinitionFound) && interval.spillDefinitionPos() != -1) { - // there was a definition in a phi/incoming - interval.setSpillState(SpillState.NoSpillStore); + if (interval != null) { + if (interval.spillState().equals(SpillState.NoDefinitionFound) && interval.spillDefinitionPos() != -1) { + // there was a definition in a phi/incoming + interval.setSpillState(SpillState.NoSpillStore); + } + if (interval.preSpilledAllocated()) { + // pre-spill unused, start in memory intervals + allocator.assignSpillSlot(interval); + } } } - if (TraceRAuseInterTraceHints.getValue(allocator.getLIR().getOptions())) { - addInterTraceHints(); - } + for (FixedInterval interval1 : allocator.fixedIntervals()) { if (interval1 != null) { /* We use [-1, 0] to avoid intersection with incoming values. */