diff --git a/pkg/native_compiler/lib/back_end/register_allocator.dart b/pkg/native_compiler/lib/back_end/register_allocator.dart index 728fe140383..03001ce21c8 100644 --- a/pkg/native_compiler/lib/back_end/register_allocator.dart +++ b/pkg/native_compiler/lib/back_end/register_allocator.dart @@ -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; diff --git a/pkg/native_compiler/testcases/register_allocator_test.dart.expect b/pkg/native_compiler/testcases/register_allocator_test.dart.expect index d0874bcc716..4dcc645b06a 100644 --- a/pkg/native_compiler/testcases/register_allocator_test.dart.expect +++ b/pkg/native_compiler/testcases/register_allocator_test.dart.expect @@ -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)