Merge "Tweak handling of arguments when argument register reuse is disabled."
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 f621c67..7103abe 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
@@ -555,7 +555,17 @@
if (argumentInterval.getUses().size() > 1) {
LiveIntervalsUse use = argumentInterval.firstUseWithConstraint();
if (use != null) {
- LiveIntervals split = argumentInterval.splitBefore(use.getPosition());
+ LiveIntervals split;
+ if (argumentInterval.getUses().size() == 2) {
+ // If there is only one real use (definition plus one real use), split before
+ // that one use.
+ split = argumentInterval.splitBefore(use.getPosition());
+ } else {
+ // If there are multiple real users, split right after the definition to make it
+ // more likely that arguments get in usable registers from the start.
+ split = argumentInterval
+ .splitBefore(argumentInterval.getValue().definition.getNumber() + 1);
+ }
unhandled.add(split);
}
}