class org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure
  super_class: java.lang.Object
{
  private static final int NONE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -1

  private int begin;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private jdk.vm.ci.code.Register reg;
    descriptor: Ljdk/vm/ci/code/Register;
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<jdk.vm.ci.meta.AllocatableValue> dst;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljdk/vm/ci/meta/AllocatableValue;>;

  private java.util.List<jdk.vm.ci.meta.Value> src;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljdk/vm/ci/meta/Value;>;

  private jdk.vm.ci.meta.AllocatableValue slot;
    descriptor: Ljdk/vm/ci/meta/AllocatableValue;
    flags: (0x0002) ACC_PRIVATE

  private boolean removed;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 76
            ldc Lorg/graalvm/compiler/lir/amd64/phases/StackMoveOptimizationPhase;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.$assertionsDisabled:Z
         3: .line 77
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
         0: .line 76
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 79
            aload 0 /* this */
            iconst_m1
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
         2: .line 80
            aload 0 /* this */
            aconst_null
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
         3: .line 84
            aload 0 /* this */
            iconst_0
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.removed:Z
         4: .line 76
            return
        end local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/graalvm/compiler/lir/amd64/phases/StackMoveOptimizationPhase$Closure;

  public void process(java.util.List<org.graalvm.compiler.lir.LIRInstruction>);
    descriptor: (Ljava/util/List;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
        start local 1 // java.util.List instructions
         0: .line 87
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         1: goto 21
         2: .line 88
      StackMap locals: int
      StackMap stack:
            aload 1 /* instructions */
            iload 2 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.LIRInstruction
            astore 3 /* inst */
        start local 3 // org.graalvm.compiler.lir.LIRInstruction inst
         3: .line 90
            aload 3 /* inst */
            invokestatic org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase.isStackMove:(Lorg/graalvm/compiler/lir/LIRInstruction;)Z
            ifeq 18
         4: .line 91
            aload 3 /* inst */
            invokestatic org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase.asStackMove:(Lorg/graalvm/compiler/lir/LIRInstruction;)Lorg/graalvm/compiler/lir/amd64/AMD64Move$AMD64StackMove;
            astore 4 /* move */
        start local 4 // org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove move
         5: .line 93
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
            ifnull 7
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
            aload 4 /* move */
            invokevirtual org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove.getScratchRegister:()Ljdk/vm/ci/code/Register;
            invokevirtual jdk.vm.ci.code.Register.equals:(Ljava/lang/Object;)Z
            ifne 7
         6: .line 95
            aload 0 /* this */
            aload 1 /* instructions */
            invokevirtual org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.replaceStackMoves:(Ljava/util/List;)V
         7: .line 99
      StackMap locals: org.graalvm.compiler.lir.LIRInstruction org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
            ifnonnull 11
         8: .line 100
            getstatic org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.$assertionsDisabled:Z
            ifne 9
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.src:Ljava/util/List;
            ifnull 9
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         9: .line 101
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
        10: .line 102
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.src:Ljava/util/List;
        11: .line 105
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
            aload 4 /* move */
            invokevirtual org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove.getResult:()Ljdk/vm/ci/meta/AllocatableValue;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        12: .line 106
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.src:Ljava/util/List;
            aload 4 /* move */
            invokevirtual org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove.getInput:()Ljdk/vm/ci/meta/AllocatableValue;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        13: .line 108
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
            iconst_m1
            if_icmpne 20
        14: .line 110
            aload 0 /* this */
            iload 2 /* i */
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
        15: .line 111
            aload 0 /* this */
            aload 4 /* move */
            invokevirtual org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove.getScratchRegister:()Ljdk/vm/ci/code/Register;
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
        16: .line 112
            aload 0 /* this */
            aload 4 /* move */
            invokevirtual org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove.getBackupSlot:()Ljdk/vm/ci/meta/AllocatableValue;
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.slot:Ljdk/vm/ci/meta/AllocatableValue;
        end local 4 // org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove move
        17: .line 115
            goto 20
      StackMap locals:
      StackMap stack:
        18: aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
            iconst_m1
            if_icmpeq 20
        19: .line 117
            aload 0 /* this */
            aload 1 /* instructions */
            invokevirtual org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.replaceStackMoves:(Ljava/util/List;)V
        end local 3 // org.graalvm.compiler.lir.LIRInstruction inst
        20: .line 87
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
        21: iload 2 /* i */
            aload 1 /* instructions */
            invokeinterface java.util.List.size:()I
            if_icmplt 2
        end local 2 // int i
        22: .line 121
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.removed:Z
            ifeq 24
        23: .line 122
            aload 1 /* instructions */
            aconst_null
            invokestatic java.util.Collections.singleton:(Ljava/lang/Object;)Ljava/util/Set;
            invokeinterface java.util.List.removeAll:(Ljava/util/Collection;)Z
            pop
        24: .line 125
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.util.List instructions
        end local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   25     0          this  Lorg/graalvm/compiler/lir/amd64/phases/StackMoveOptimizationPhase$Closure;
            0   25     1  instructions  Ljava/util/List<Lorg/graalvm/compiler/lir/LIRInstruction;>;
            1   22     2             i  I
            3   20     3          inst  Lorg/graalvm/compiler/lir/LIRInstruction;
            5   17     4          move  Lorg/graalvm/compiler/lir/amd64/AMD64Move$AMD64StackMove;
    Signature: (Ljava/util/List<Lorg/graalvm/compiler/lir/LIRInstruction;>;)V
    MethodParameters:
              Name  Flags
      instructions  

  private void replaceStackMoves(java.util.List<org.graalvm.compiler.lir.LIRInstruction>);
    descriptor: (Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
        start local 1 // java.util.List instructions
         0: .line 128
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            istore 2 /* size */
        start local 2 // int size
         1: .line 129
            iload 2 /* size */
            iconst_1
            if_icmple 7
         2: .line 130
            new org.graalvm.compiler.lir.amd64.AMD64Move$AMD64MultiStackMove
            dup
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
            iload 2 /* size */
            anewarray jdk.vm.ci.meta.AllocatableValue
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast jdk.vm.ci.meta.AllocatableValue[]
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.src:Ljava/util/List;
            iload 2 /* size */
            anewarray jdk.vm.ci.meta.AllocatableValue
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast jdk.vm.ci.meta.Value[]
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.slot:Ljdk/vm/ci/meta/AllocatableValue;
            invokespecial org.graalvm.compiler.lir.amd64.AMD64Move$AMD64MultiStackMove.<init>:([Ljdk/vm/ci/meta/AllocatableValue;[Ljdk/vm/ci/meta/Value;Ljdk/vm/ci/code/Register;Ljdk/vm/ci/meta/AllocatableValue;)V
            astore 3 /* multiMove */
        start local 3 // org.graalvm.compiler.lir.amd64.AMD64Move$AMD64MultiStackMove multiMove
         3: .line 132
            aload 1 /* instructions */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
            aload 3 /* multiMove */
            invokeinterface java.util.List.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 134
            aload 1 /* instructions */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
            iconst_1
            iadd
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
            iload 2 /* size */
            iadd
            invokeinterface java.util.List.subList:(II)Ljava/util/List;
            aconst_null
            invokestatic java.util.Collections.fill:(Ljava/util/List;Ljava/lang/Object;)V
         5: .line 136
            aload 0 /* this */
            iconst_1
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.removed:Z
         6: .line 137
            getstatic org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase.eliminatedBackup:Lorg/graalvm/compiler/debug/DebugCounter;
            iload 2 /* size */
            iconst_1
            isub
            i2l
            invokeinterface org.graalvm.compiler.debug.DebugCounter.add:(J)V
        end local 3 // org.graalvm.compiler.lir.amd64.AMD64Move$AMD64MultiStackMove multiMove
         7: .line 140
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.dst:Ljava/util/List;
            invokeinterface java.util.List.clear:()V
         8: .line 141
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.src:Ljava/util/List;
            invokeinterface java.util.List.clear:()V
         9: .line 142
            aload 0 /* this */
            iconst_m1
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.begin:I
        10: .line 143
            aload 0 /* this */
            aconst_null
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.reg:Ljdk/vm/ci/code/Register;
        11: .line 144
            aload 0 /* this */
            aconst_null
            putfield org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure.slot:Ljdk/vm/ci/meta/AllocatableValue;
        12: .line 145
            return
        end local 2 // int size
        end local 1 // java.util.List instructions
        end local 0 // org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   13     0          this  Lorg/graalvm/compiler/lir/amd64/phases/StackMoveOptimizationPhase$Closure;
            0   13     1  instructions  Ljava/util/List<Lorg/graalvm/compiler/lir/LIRInstruction;>;
            1   13     2          size  I
            3    7     3     multiMove  Lorg/graalvm/compiler/lir/amd64/AMD64Move$AMD64MultiStackMove;
    Signature: (Ljava/util/List<Lorg/graalvm/compiler/lir/LIRInstruction;>;)V
    MethodParameters:
              Name  Flags
      instructions  
}
SourceFile: "StackMoveOptimizationPhase.java"
NestHost: org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase
InnerClasses:
  public final AMD64MultiStackMove = org.graalvm.compiler.lir.amd64.AMD64Move$AMD64MultiStackMove of org.graalvm.compiler.lir.amd64.AMD64Move
  public final AMD64StackMove = org.graalvm.compiler.lir.amd64.AMD64Move$AMD64StackMove of org.graalvm.compiler.lir.amd64.AMD64Move
  private Closure = org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase$Closure of org.graalvm.compiler.lir.amd64.phases.StackMoveOptimizationPhase