Merge "Minor extension of method usesRegister"
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index 87a5f83..c6477f3 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -1760,9 +1760,8 @@
     Iterator<LiveIntervals> inactiveIterator = inactive.iterator();
     while (inactiveIterator.hasNext()) {
       LiveIntervals intervals = inactiveIterator.next();
-      if ((intervals.usesRegister(candidate) ||
-          (needsRegisterPair && intervals.usesRegister(candidate + 1))) &&
-          intervals.overlaps(unhandledInterval)) {
+      if (intervals.usesRegister(candidate, needsRegisterPair)
+          && intervals.overlaps(unhandledInterval)) {
         if (intervals.isLinked() && !intervals.isArgumentInterval()) {
           // If the inactive register is linked but not an argument, it needs to get the
           // same register again at the next use after the start of the unhandled interval.
@@ -1800,8 +1799,7 @@
     Iterator<LiveIntervals> activeIterator = active.iterator();
     while (activeIterator.hasNext()) {
       LiveIntervals intervals = activeIterator.next();
-      if (intervals.usesRegister(candidate) ||
-          (needsRegisterPair && intervals.usesRegister(candidate + 1))) {
+      if (intervals.usesRegister(candidate, needsRegisterPair)) {
         activeIterator.remove();
         freeRegistersForIntervals(intervals);
         LiveIntervals splitChild = intervals.splitBefore(unhandledInterval.getStart());
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LiveIntervals.java b/src/main/java/com/android/tools/r8/ir/regalloc/LiveIntervals.java
index f353a67..0c711b9 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LiveIntervals.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LiveIntervals.java
@@ -296,18 +296,21 @@
     return splitParent.computeMaxNonSpilledRegister();
   }
 
-  public boolean usesRegister(int n) {
-    if (register == n || (getType().isWide() && register + 1 == n)) {
+  public boolean usesRegister(int n, boolean otherIsWide) {
+    if (register == n) {
+      return true;
+    }
+    if (getType().isWide() && register + 1 == n) {
+      return true;
+    }
+    if (otherIsWide && register == n + 1) {
       return true;
     }
     return false;
   }
 
   public boolean hasConflictingRegisters(LiveIntervals other) {
-    if (other.usesRegister(register) || (getType().isWide() && other.usesRegister(register + 1))) {
-      return true;
-    }
-    return false;
+    return other.usesRegister(register, getType().isWide());
   }
 
   public void clearRegisterAssignment() {