src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/lsra/IntervalWalker.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/lsra/IntervalWalker.java Mon Mar 20 17:39:46 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/lsra/IntervalWalker.java Mon Mar 20 17:39:46 2017
*** 87,99 ****
--- 87,99 ----
* intervals
*/
IntervalWalker(LinearScan allocator, Interval unhandledFixed, Interval unhandledAny) {
this.allocator = allocator;
! unhandledLists = new RegisterBindingLists(unhandledFixed, unhandledAny, Interval.EndMarker);
! activeLists = new RegisterBindingLists(Interval.EndMarker, Interval.EndMarker, Interval.EndMarker);
! inactiveLists = new RegisterBindingLists(Interval.EndMarker, Interval.EndMarker, Interval.EndMarker);
! unhandledLists = new RegisterBindingLists(unhandledFixed, unhandledAny, allocator.intervalEndMarker);
! activeLists = new RegisterBindingLists(allocator.intervalEndMarker, allocator.intervalEndMarker, allocator.intervalEndMarker);
! inactiveLists = new RegisterBindingLists(allocator.intervalEndMarker, allocator.intervalEndMarker, allocator.intervalEndMarker);
currentPosition = -1;
}
protected void removeFromList(Interval interval) {
if (interval.state == State.Active) {
*** 182,200 ****
--- 182,200 ----
private Interval nextInterval(int toOpId) {
RegisterBinding binding;
Interval any = unhandledLists.any;
Interval fixed = unhandledLists.fixed;
! if (any != Interval.EndMarker) {
! if (!any.isEndMarker()) {
// intervals may start at same position . prefer fixed interval
! binding = fixed != Interval.EndMarker && fixed.from() <= any.from() ? RegisterBinding.Fixed : RegisterBinding.Any;
! binding = !fixed.isEndMarker() && fixed.from() <= any.from() ? RegisterBinding.Fixed : RegisterBinding.Any;
assert binding == RegisterBinding.Fixed && fixed.from() <= any.from() || binding == RegisterBinding.Any && any.from() <= fixed.from() : "wrong interval!!!";
! assert any == Interval.EndMarker || fixed == Interval.EndMarker || any.from() != fixed.from() ||
! assert any.isEndMarker() || fixed.isEndMarker() || any.from() != fixed.from() ||
binding == RegisterBinding.Fixed : "if fixed and any-Interval start at same position, fixed must be processed first";
! } else if (fixed != Interval.EndMarker) {
! } else if (!fixed.isEndMarker()) {
binding = RegisterBinding.Fixed;
} else {
return null;
}
Interval currentInterval = unhandledLists.get(binding);
*** 203,213 ****
--- 203,213 ----
return null;
}
currentBinding = binding;
unhandledLists.set(binding, currentInterval.next);
! currentInterval.next = Interval.EndMarker;
! currentInterval.next = allocator.intervalEndMarker;
currentInterval.rewindRange();
return currentInterval;
}
/**
*** 269,279 ****
--- 269,279 ----
* Note that for {@linkplain RegisterBinding#Fixed fixed} and {@linkplain RegisterBinding#Any
* any} intervals this is done in {@link #nextInterval(int)}.
*/
private void updateUnhandledStackIntervals(int opId) {
Interval currentInterval = unhandledLists.get(RegisterBinding.Stack);
! while (currentInterval != Interval.EndMarker && currentInterval.from() <= opId) {
! while (!currentInterval.isEndMarker() && currentInterval.from() <= opId) {
Interval next = currentInterval.next;
if (currentInterval.to() > opId) {
currentInterval.state = State.Active;
activeLists.addToListSortedByCurrentFromPositions(RegisterBinding.Stack, currentInterval);
intervalMoved(currentInterval, State.Unhandled, State.Active);
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/lsra/IntervalWalker.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File