[modular_aot] Fix LiveRange.findRegisterUseAfter

Issue: https://github.com/dart-lang/sdk/issues/61635
Change-Id: I6a599d32001d6df31e61b8ea5c68569792cc82bc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/508704
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
This commit is contained in:
Alexander Markov
2026-06-03 12:10:01 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 6b9aecbe5f
commit 8b77454b37
2 changed files with 81 additions and 75 deletions
@@ -1228,10 +1228,13 @@ class LiveRange {
assert(!isPhysical);
for (int i = currentUse; i <= uses.length; ++i) {
final use = uses[uses.length - i];
if (use.pos >= pos &&
(use.constraint is AnyCpuRegister ||
use.constraint is AnyFpuRegister)) {
return use;
if (use.pos >= pos) {
final constr = use.constraint;
if (constr is AnyCpuRegister ||
constr is AnyFpuRegister ||
constr is PhysicalRegister) {
return use;
}
}
}
return null;
@@ -53,9 +53,9 @@ B0 = EntryBlock() dominates:(B7, B6)
v1 = Parameter(this) # RA: R0 <- ()
v2 = Parameter(error) # RA: R1 <- ()
v3 = Parameter(stackTrace) # RA: R2 <- ()
ParallelMove output(R2 -> vloc:R0, R1 -> vloc:stack[1], R0 -> vloc:stack[0])
ParallelMove spill(R0 -> stack[2])
v5 = InterfaceCall getter BroadcastStreamController._mayAddEvent(v1) # RA: R0 <- (stack[0]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R2 -> vloc:R2, R1 -> vloc:R1, R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[0], R1 -> stack[1], R2 -> stack[2])
v5 = InterfaceCall getter BroadcastStreamController._mayAddEvent(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
Branch(v5, true: B6, false: B7) # RA: (R0)
B6 = TargetBlock() idom:B0
@@ -123,8 +123,8 @@ B0 = EntryBlock()
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[0])
v10 = DirectCall Map.unmodifiable(v8, v9) # RA: R0 <- (-, -) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[1], stack[0] -> R0)
DirectCall _InvocationMirror._withType(v3, v4, v5, v6, v7, v10) # RA: R0 <- (R0, -, -, -, -, stack[1]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1)
DirectCall _InvocationMirror._withType(v3, v4, v5, v6, v7, v10) # RA: R0 <- (R1, -, -, -, -, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(param[0] -> R1, stack[0] -> R2)
v12 = DirectCall NoSuchMethodError.withInvocation(v1, v3) # RA: R0 <- (R1, R2) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
@@ -151,8 +151,8 @@ B0 = EntryBlock()
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[1])
v14 = DirectCall Map.unmodifiable(v12, v13) # RA: R0 <- (-, -) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[2], stack[0] -> R0, stack[1] -> R1)
DirectCall _InvocationMirror._withType(v4, v5, v6, v7, v11, v14) # RA: R0 <- (R0, -, -, -, R1, stack[2]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1, stack[1] -> R2)
DirectCall _InvocationMirror._withType(v4, v5, v6, v7, v11, v14) # RA: R0 <- (R1, -, -, -, R2, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(param[0] -> R1, stack[0] -> R2)
v16 = DirectCall NoSuchMethodError.withInvocation(v1, v4) # RA: R0 <- (R1, R2) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
@@ -226,9 +226,9 @@ B0 = EntryBlock() dominates:(B15, B25, B14)
v3 = Parameter(onError) # RA: R2 <- ()
v4 = Parameter(onDone) # RA: R3 <- ()
v5 = Parameter(cancelOnError) # RA: R5 <- ()
ParallelMove output(R5 -> vloc:R0, R3 -> vloc:stack[3], R2 -> vloc:stack[2], R1 -> vloc:stack[1], R0 -> vloc:stack[0])
ParallelMove spill(R0 -> stack[4])
v9 = InterfaceCall getter AsBroadcastStream._controller(v1) # RA: R0 <- (stack[0]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R5 -> vloc:R4, R3 -> vloc:R3, R2 -> vloc:R2, R1 -> vloc:R1, R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[0], R1 -> stack[1], R2 -> stack[2], R3 -> stack[3], R4 -> stack[4])
v9 = InterfaceCall getter AsBroadcastStream._controller(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
CompareAndBranch ==(v9, v12, true: B14, false: B15) # RA: (R0, -)
B14 = TargetBlock() idom:B0
@@ -265,8 +265,9 @@ B21 = TargetBlock() idom:B15 dominates:(B37, B49, B36)
B36 = TargetBlock() idom:B21
ParallelMove output(stack[0] -> R0)
v41 = InterfaceCall getter AsBroadcastStream._source(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[7], stack[5] -> R0)
v44 = InterfaceCall method-extractor _AsBroadcastStreamController.add(v18) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[5] -> R1)
ParallelMove spill(R0 -> stack[7])
v44 = InterfaceCall method-extractor _AsBroadcastStreamController.add(v18) # RA: R0 <- (R1) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[7] -> R1)
v46 = InterfaceCall Stream.listen(v41, v44) # RA: R0 <- (R1, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1)
@@ -1439,8 +1440,9 @@ B0 = EntryBlock() dominates:(B11, B10)
v2 = Parameter(action) # RA: param[1] <- ()
ParallelMove output(param[1] -> vloc:R0, param[0] -> vloc:param[0])
v6 = InterfaceCall getter LinkedList._modificationCount(v1) # RA: R0 <- (param[0]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[0], param[0] -> R0)
v9 = InterfaceCall getter LinkedList.isEmpty(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, param[0] -> R1)
ParallelMove spill(R0 -> stack[0])
v9 = InterfaceCall getter LinkedList.isEmpty(v1) # RA: R0 <- (R1) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
Branch(v9, true: B10, false: B11) # RA: (R0)
B10 = TargetBlock() idom:B0
@@ -1470,8 +1472,8 @@ B30 = TargetBlock() idom:B21 dominates:(B48, B47) in-loop:B21
v41 = NullCheck(v40) # RA: R0 <- (R0)
ParallelMove output(param[0] -> R0, R0 -> stack[1])
v45 = InterfaceCall getter LinkedList._first(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[3], stack[1] -> R0)
v46 = DirectCall identical(v41, v45) # RA: R0 <- (R0, stack[3]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[1] -> R1)
v46 = DirectCall identical(v41, v45) # RA: R0 <- (R1, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
Branch(v46, true: B47, false: B48) # RA: (R0)
B48 = TargetBlock() idom:B30 in-loop:B21
@@ -1483,9 +1485,9 @@ B47 = TargetBlock() idom:B30
B31 = TargetBlock() idom:B21
v35 = AllocateObject ConcurrentModificationError() # RA: R0 <- () temps: [R1, R2, R3, R4]
ParallelMove output(R0 -> vloc:R0, param[0] -> R1)
ParallelMove spill(R0 -> stack[4])
ParallelMove spill(R0 -> stack[3])
DirectCall ConcurrentModificationError.(v35, v1) # RA: R0 <- (R0, R1) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(stack[4] -> R1)
ParallelMove output(stack[3] -> R1)
Throw(v35) # RA: (R1)
--- getter LinkedList._modificationCount
@@ -1704,8 +1706,8 @@ B0 = EntryBlock() dominates:(B13, B12)
v6 = Parameter(arg2) # RA: param[5] <- ()
ParallelMove output(param[5] -> vloc:R0, param[4] -> vloc:param[4], param[3] -> vloc:param[3], param[2] -> vloc:param[2])
v9 = LoadStaticField(Zone._current) # RA: R0 <- () temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[0], param[2] -> R0)
v11 = DirectCall identical(v9, v3) # RA: R0 <- (stack[0], R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, param[2] -> R1)
v11 = DirectCall identical(v9, v3) # RA: R0 <- (R0, R1) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
Branch(v11, true: B12, false: B13) # RA: (R0)
B12 = TargetBlock() idom:B0
@@ -1725,34 +1727,34 @@ B24 = TargetBlock() idom:B13 dominates:(B41, B40)
v37 = TypeCast(v3, _Zone, unchecked) # RA: R0 <- (R6)
v38 = DirectCall Zone._enter(v37) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[1])
ParallelMove spill(R0 -> stack[0])
TryEntry(try-body: B40, catch-block: B41)
B40 = TargetBlock() exception-handler:B41 idom:B24 dominates:(B47)
ParallelMove output(param[3] -> R0, param[4] -> R1, param[5] -> R2)
v46 = ClosureCall(v4, v5, v6) # RA: R0 <- (R0, R1, R2) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[2])
ParallelMove spill(R0 -> stack[1])
Goto(B47)
B47 = JoinBlock(B40) idom:B40
ParallelMove output(stack[1] -> R0)
ParallelMove output(stack[0] -> R0)
DirectCall Zone._leave(v38) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(stack[2] -> R1)
ParallelMove output(stack[1] -> R1)
ParallelMove input(vloc:R1 -> R0)
Return(v46) # RA: (R0)
B41 = CatchBlock() idom:B24
v49 = Parameter(#exception) # RA: R1 <- ()
v50 = Parameter(#stackTrace) # RA: R2 <- ()
ParallelMove control(stack[1] -> R0)
ParallelMove output(R1 -> stack[3], R2 -> stack[4])
ParallelMove control(stack[0] -> R0)
ParallelMove output(R1 -> stack[2], R2 -> stack[3])
DirectCall Zone._leave(v38) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(stack[3] -> R1, stack[4] -> R2)
ParallelMove output(stack[2] -> R1, stack[3] -> R2)
Throw(v49, v50) # RA: (R1, R2)
B25 = TargetBlock() idom:B13
v29 = AllocateObject ArgumentError() # RA: R0 <- () temps: [R1, R2, R3, R4]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[5])
ParallelMove spill(R0 -> stack[4])
DirectCall ArgumentError.value(v29, v3, v31, v32) # RA: R0 <- (R0, R6, -, -) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(stack[5] -> R1)
ParallelMove output(stack[4] -> R1)
Throw(v29) # RA: (R1)
--- replaceAll
@@ -1767,10 +1769,11 @@ B0 = EntryBlock() dominates:(B16, B45, B15)
v3 = Parameter(replacement) # RA: param[2] <- ()
ParallelMove output(param[2] -> vloc:param[2], param[1] -> vloc:param[1], param[0] -> vloc:R0)
v7 = DirectCall _GrowableList.(v6, v4) # RA: R0 <- (-, -) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[0], param[2] -> R0)
v11 = InterfaceCall getter String.length(v3) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, param[2] -> R1)
ParallelMove spill(R0 -> stack[0])
v11 = InterfaceCall getter String.length(v3) # RA: R0 <- (R1) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[6])
ParallelMove spill(R0 -> stack[5])
v148 = UnboxInt(v11) # RA: R1 <- (R0)
CompareAndBranch int ==(v148, v149, true: B15, false: B16) # RA: (R1, -)
B15 = TargetBlock() idom:B0 dominates:(B23)
@@ -1784,7 +1787,7 @@ B15 = TargetBlock() idom:B0 dominates:(B23)
Goto(B23)
B23 = JoinBlock(B15, B27) idom:B15 dominates:(B28, B27) loop-header (depth:1 body:(B23, B27) back-edges:(B27))
v141 = Phi(v149, v39) # RA: R2 <- (-, R0)
v138 = Phi(v4, v42) # RA: R1 <- (-, R1)
v138 = Phi(v4, v42) # RA: R1 <- (-, R2)
ParallelMove output(R1 -> stack[1], R2 -> stack[2])
v26 = InterfaceCall Iterator.moveNext(v21) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
@@ -1795,20 +1798,20 @@ B27 = TargetBlock() idom:B23 in-loop:B23
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[4])
v37 = InterfaceCall getter Match.start(v31) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[5], stack[0] -> R0, stack[1] -> R1)
v38 = DirectCall _addReplaceSlice(v7, v138, v37) # RA: R0 <- (R0, R1, stack[5]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1, stack[1] -> R2)
v38 = DirectCall _addReplaceSlice(v7, v138, v37) # RA: R0 <- (R1, R2, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
v150 = UnboxInt(v38) # RA: R0 <- (R0)
ParallelMove output(stack[2] -> R1)
v39 = BinaryIntOp +(v141, v150) # RA: R1 <- (R1, R0)
ParallelMove output(stack[4] -> R0, R1 -> stack[2])
v42 = InterfaceCall getter Match.end(v31) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R1, stack[2] -> R0)
ParallelMove spill(R1 -> stack[1])
ParallelMove input(stack[3] -> R0, R0 -> R2)
ParallelMove output(R0 -> vloc:R2, stack[2] -> R0)
ParallelMove spill(R2 -> stack[1])
ParallelMove input(stack[3] -> R0, R0 -> R2, R2 -> R1)
Goto(B23)
B28 = TargetBlock() idom:B23
ParallelMove control(stack[1] -> R1, stack[2] -> R0)
ParallelMove control(stack[1] -> R2, stack[2] -> R0)
Goto(B45)
B16 = TargetBlock() idom:B0 dominates:(B52)
ParallelMove control(param[1] -> R1)
@@ -1817,49 +1820,49 @@ B16 = TargetBlock() idom:B0 dominates:(B52)
ParallelMove output(R0 -> vloc:R0)
v50 = InterfaceCall getter Iterable.iterator(v49) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[7])
ParallelMove input(R0 -> R2, UnboxedIntConstant(0) -> R0, IntConstant(0) -> R1)
ParallelMove spill(R0 -> stack[6])
ParallelMove input(R0 -> R1, UnboxedIntConstant(0) -> R0, IntConstant(0) -> R2)
Goto(B52)
B52 = JoinBlock(B16, B56) idom:B16 dominates:(B57, B56) loop-header (depth:1 body:(B52, B56) back-edges:(B56))
v143 = Phi(v149, v75) # RA: R0 <- (-, R0)
v140 = Phi(v4, v78) # RA: R1 <- (-, R1)
ParallelMove output(R2 -> R0, R1 -> stack[1], R0 -> stack[2])
v140 = Phi(v4, v78) # RA: R2 <- (-, R2)
ParallelMove output(R1 -> R0, R2 -> stack[1], R0 -> stack[2])
v55 = InterfaceCall Iterator.moveNext(v50) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
Branch(v55, true: B56, false: B57) # RA: (R0)
B56 = TargetBlock() idom:B52 in-loop:B52
ParallelMove output(stack[7] -> R0)
ParallelMove output(stack[6] -> R0)
v60 = InterfaceCall getter Iterator.current(v50) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[8])
ParallelMove spill(R0 -> stack[7])
v66 = InterfaceCall getter Match.start(v60) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[9], stack[0] -> R0, stack[1] -> R1)
v67 = DirectCall _addReplaceSlice(v7, v140, v66) # RA: R0 <- (R0, R1, stack[9]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1, stack[1] -> R2)
v67 = DirectCall _addReplaceSlice(v7, v140, v66) # RA: R0 <- (R1, R2, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
v151 = UnboxInt(v67) # RA: R0 <- (R0)
ParallelMove output(stack[2] -> R1)
v68 = BinaryIntOp +(v143, v151) # RA: R0 <- (R1, R0)
ParallelMove output(stack[0] -> R0, R0 -> stack[10])
ParallelMove output(stack[0] -> R0, R0 -> stack[8])
InterfaceCall List.add(v7, v3) # RA: R0 <- (R0, param[2]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(stack[6] -> R2)
ParallelMove output(stack[5] -> R2)
v152 = UnboxInt(v11) # RA: R0 <- (R2)
ParallelMove output(stack[10] -> R1)
ParallelMove output(stack[8] -> R1)
v75 = BinaryIntOp +(v68, v152) # RA: R1 <- (R1, R0)
ParallelMove output(R2 -> R0, R1 -> stack[2])
v78 = InterfaceCall getter Match.end(v60) # RA: R0 <- (stack[8]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R1, stack[2] -> R0)
ParallelMove spill(R1 -> stack[1])
ParallelMove input(stack[7] -> R2)
v78 = InterfaceCall getter Match.end(v60) # RA: R0 <- (stack[7]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R2, stack[2] -> R0)
ParallelMove spill(R2 -> stack[1])
ParallelMove input(stack[6] -> R1)
Goto(B52)
B57 = TargetBlock() idom:B52
ParallelMove control(stack[1] -> R1, stack[2] -> R0)
ParallelMove control(stack[1] -> R2, stack[2] -> R0)
Goto(B45)
B45 = JoinBlock(B57, B28) idom:B0 dominates:(B85, B92, B84)
v142 = Phi(v143, v141) # RA: R0 <- (R0, R0)
v139 = Phi(v140, v138) # RA: R1 <- (R1, R1)
ParallelMove output(R1 -> stack[1], R0 -> stack[2])
v153 = UnboxInt(v139) # RA: R2 <- (R1)
CompareAndBranch int ==(v153, v149, true: B84, false: B85) # RA: (R2, -)
v139 = Phi(v140, v138) # RA: R2 <- (R2, R2)
ParallelMove output(R2 -> stack[1], R0 -> stack[2])
v153 = UnboxInt(v139) # RA: R1 <- (R2)
CompareAndBranch int ==(v153, v149, true: B84, false: B85) # RA: (R1, -)
B84 = TargetBlock() idom:B45 dominates:(B90, B89)
CompareAndBranch int ==(v142, v149, true: B89, false: B90) # RA: (R0, -)
B89 = TargetBlock() idom:B84
@@ -1867,27 +1870,27 @@ B89 = TargetBlock() idom:B84
ParallelMove input(vloc:R0 -> R0)
Return(v1) # RA: (R0)
B90 = TargetBlock() idom:B84
ParallelMove control(param[0] -> R2)
ParallelMove control(param[0] -> R1)
Goto(B92)
B85 = TargetBlock() idom:B45
ParallelMove control(param[0] -> R2)
ParallelMove control(param[0] -> R1)
Goto(B92)
B92 = JoinBlock(B85, B90) idom:B45 dominates:(B110, B123, B109)
ParallelMove output(R2 -> R0)
ParallelMove output(R1 -> R0)
v101 = InterfaceCall getter String.length(v1) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:stack[11], stack[0] -> R0, stack[1] -> R1)
v102 = DirectCall _addReplaceSlice(v7, v139, v101) # RA: R0 <- (R0, R1, stack[11]) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0, stack[0] -> R1, stack[1] -> R2)
v102 = DirectCall _addReplaceSlice(v7, v139, v101) # RA: R0 <- (R1, R2, R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
v154 = UnboxInt(v102) # RA: R0 <- (R0)
ParallelMove output(stack[2] -> R1)
v103 = BinaryIntOp +(v142, v154) # RA: R0 <- (R1, R0)
ParallelMove output(param[2] -> R0, R0 -> stack[12])
ParallelMove output(param[2] -> R0, R0 -> stack[9])
v106 = DirectCall _isOneByte(v3) # RA: R0 <- (R0) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove spill(R0 -> stack[13])
ParallelMove spill(R0 -> stack[10])
Branch(v106, true: B109, false: B110) # RA: (R0)
B109 = TargetBlock() idom:B92 dominates:(B116, B115)
ParallelMove output(stack[12] -> R1)
ParallelMove output(stack[9] -> R1)
CompareAndBranch int <(v103, v155, true: B115, false: B116) # RA: (R1, -)
B115 = TargetBlock() idom:B109 dominates:(B121, B120)
ParallelMove output(param[0] -> R0)
@@ -1895,7 +1898,7 @@ B115 = TargetBlock() idom:B109 dominates:(B121, B120)
ParallelMove output(R0 -> vloc:R0)
Branch(v119, true: B120, false: B121) # RA: (R0)
B120 = TargetBlock() idom:B115
ParallelMove output(stack[12] -> R3)
ParallelMove output(stack[9] -> R3)
v156 = BoxInt(v103) # RA: R3 <- (R3) temps: [R0, R1, R2]
ParallelMove output(param[0] -> R1, stack[0] -> R0)
v130 = DirectCall _joinReplaceAllOneByteResult(v1, v7, v156) # RA: R0 <- (R1, R0, R3) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
@@ -1903,17 +1906,17 @@ B120 = TargetBlock() idom:B115
ParallelMove input(vloc:R0 -> R0)
Return(v130) # RA: (R0)
B121 = TargetBlock() idom:B115
ParallelMove control(param[0] -> R1, stack[0] -> R0, stack[12] -> R3)
ParallelMove control(param[0] -> R1, stack[0] -> R0, stack[9] -> R3)
Goto(B123)
B116 = TargetBlock() idom:B109
ParallelMove control(param[0] -> R1, stack[0] -> R0, R1 -> R3)
Goto(B123)
B110 = TargetBlock() idom:B92
ParallelMove control(param[0] -> R1, stack[0] -> R0, stack[12] -> R3)
ParallelMove control(param[0] -> R1, stack[0] -> R0, stack[9] -> R3)
Goto(B123)
B123 = JoinBlock(B110, B116, B121) idom:B92
v157 = BoxInt(v103) # RA: R3 <- (R3) temps: [R2, R4, R5]
ParallelMove output(stack[13] -> R2)
ParallelMove output(stack[10] -> R2)
v136 = DirectCall _joinReplaceAllResult(v1, v7, v157, v106) # RA: R0 <- (R1, R0, R3, R2) temps: [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R19, R20, R23, R25, V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30]
ParallelMove output(R0 -> vloc:R0)
ParallelMove input(vloc:R0 -> R0)