final class org.graalvm.compiler.lir.RedundantMoveElimination$Optimization
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization
  super_class: java.lang.Object
{
  org.graalvm.util.EconomicMap<org.graalvm.compiler.core.common.cfg.AbstractBlockBase<?>, org.graalvm.compiler.lir.RedundantMoveElimination$BlockData> blockData;
    descriptor: Lorg/graalvm/util/EconomicMap;
    flags: (0x0000) 
    Signature: Lorg/graalvm/util/EconomicMap<Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;Lorg/graalvm/compiler/lir/RedundantMoveElimination$BlockData;>;

  jdk.vm.ci.code.RegisterArray callerSaveRegs;
    descriptor: Ljdk/vm/ci/code/RegisterArray;
    flags: (0x0000) 

  int[] eligibleRegs;
    descriptor: [I
    flags: (0x0000) 

  org.graalvm.util.EconomicMap<java.lang.Integer, java.lang.Integer> stackIndices;
    descriptor: Lorg/graalvm/util/EconomicMap;
    flags: (0x0000) 
    Signature: Lorg/graalvm/util/EconomicMap<Ljava/lang/Integer;Ljava/lang/Integer;>;

  int numRegs;
    descriptor: I
    flags: (0x0000) 

  private final org.graalvm.compiler.lir.framemap.FrameMap frameMap;
    descriptor: Lorg/graalvm/compiler/lir/framemap/FrameMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static final int INIT_VALUE;
    descriptor: I
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int COMPLEXITY_LIMIT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 30000

  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 105
            ldc Lorg/graalvm/compiler/lir/RedundantMoveElimination;
            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.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
         3: .line 169
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(org.graalvm.compiler.lir.framemap.FrameMap);
    descriptor: (Lorg/graalvm/compiler/lir/framemap/FrameMap;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.lir.framemap.FrameMap frameMap
         0: .line 131
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 107
            aload 0 /* this */
            getstatic org.graalvm.util.Equivalence.IDENTITY:Lorg/graalvm/util/Equivalence;
            invokestatic org.graalvm.util.EconomicMap.create:(Lorg/graalvm/util/Equivalence;)Lorg/graalvm/util/EconomicMap;
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.blockData:Lorg/graalvm/util/EconomicMap;
         2: .line 120
            aload 0 /* this */
            getstatic org.graalvm.util.Equivalence.DEFAULT:Lorg/graalvm/util/Equivalence;
            invokestatic org.graalvm.util.EconomicMap.create:(Lorg/graalvm/util/Equivalence;)Lorg/graalvm/util/EconomicMap;
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
         3: .line 132
            aload 0 /* this */
            aload 1 /* frameMap */
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.frameMap:Lorg/graalvm/compiler/lir/framemap/FrameMap;
         4: .line 133
            return
        end local 1 // org.graalvm.compiler.lir.framemap.FrameMap frameMap
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0    5     1  frameMap  Lorg/graalvm/compiler/lir/framemap/FrameMap;
    MethodParameters:
          Name  Flags
      frameMap  

  private void doOptimize(org.graalvm.compiler.lir.LIR);
    descriptor: (Lorg/graalvm/compiler/lir/LIR;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=9, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.lir.LIR lir
         0: .line 140
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.getDebug:()Lorg/graalvm/compiler/debug/DebugContext;
            astore 2 /* debug */
        start local 2 // org.graalvm.compiler.debug.DebugContext debug
         1: .line 141
            aconst_null
            astore 3
            aconst_null
            astore 4
         2: aload 2 /* debug */
            ldc "eliminate redundant moves"
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;)Lorg/graalvm/compiler/debug/Indent;
            astore 5 /* indent */
        start local 5 // org.graalvm.compiler.debug.Indent indent
         3: .line 142
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.frameMap:Lorg/graalvm/compiler/lir/framemap/FrameMap;
            invokevirtual org.graalvm.compiler.lir.framemap.FrameMap.getRegisterConfig:()Ljdk/vm/ci/code/RegisterConfig;
            astore 6 /* registerConfig */
        start local 6 // jdk.vm.ci.code.RegisterConfig registerConfig
         4: .line 143
            aload 0 /* this */
            aload 6 /* registerConfig */
            invokeinterface jdk.vm.ci.code.RegisterConfig.getCallerSaveRegisters:()Ljdk/vm/ci/code/RegisterArray;
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.callerSaveRegs:Ljdk/vm/ci/code/RegisterArray;
         5: .line 145
            aload 0 /* this */
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.initBlockData:(Lorg/graalvm/compiler/lir/LIR;)V
         6: .line 149
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            newarray 10
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.eligibleRegs:[I
         7: .line 150
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.eligibleRegs:[I
            iconst_m1
            invokestatic java.util.Arrays.fill:([II)V
         8: .line 151
            aload 6 /* registerConfig */
            invokeinterface jdk.vm.ci.code.RegisterConfig.getAllocatableRegisters:()Ljdk/vm/ci/code/RegisterArray;
            invokevirtual jdk.vm.ci.code.RegisterArray.iterator:()Ljava/util/Iterator;
            astore 8
            goto 12
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent jdk.vm.ci.code.RegisterConfig top java.util.Iterator
      StackMap stack:
         9: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast jdk.vm.ci.code.Register
            astore 7 /* reg */
        start local 7 // jdk.vm.ci.code.Register reg
        10: .line 152
            aload 7 /* reg */
            getfield jdk.vm.ci.code.Register.number:I
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            if_icmpge 12
        11: .line 153
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.eligibleRegs:[I
            aload 7 /* reg */
            getfield jdk.vm.ci.code.Register.number:I
            aload 7 /* reg */
            getfield jdk.vm.ci.code.Register.number:I
            iastore
        end local 7 // jdk.vm.ci.code.Register reg
        12: .line 151
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        13: .line 157
            aload 0 /* this */
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.solveDataFlow:(Lorg/graalvm/compiler/lir/LIR;)Z
            ifne 16
        14: .line 162
            aload 5 /* indent */
            ifnull 15
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        15: .line 158
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent jdk.vm.ci.code.RegisterConfig
      StackMap stack:
            return
        16: .line 161
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.eliminateMoves:(Lorg/graalvm/compiler/lir/LIR;)V
        end local 6 // jdk.vm.ci.code.RegisterConfig registerConfig
        17: .line 162
            aload 5 /* indent */
            ifnull 23
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 23
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        18: astore 3
            aload 5 /* indent */
            ifnull 19
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 5 // org.graalvm.compiler.debug.Indent indent
      StackMap locals:
      StackMap stack:
        19: aload 3
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: astore 4
            aload 3
            ifnonnull 21
            aload 4
            astore 3
            goto 22
      StackMap locals:
      StackMap stack:
        21: aload 3
            aload 4
            if_acmpeq 22
            aload 3
            aload 4
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        22: aload 3
            athrow
        23: .line 163
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.graalvm.compiler.debug.DebugContext debug
        end local 1 // org.graalvm.compiler.lir.LIR lir
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   24     0            this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   24     1             lir  Lorg/graalvm/compiler/lir/LIR;
            1   24     2           debug  Lorg/graalvm/compiler/debug/DebugContext;
            3   19     5          indent  Lorg/graalvm/compiler/debug/Indent;
            4   17     6  registerConfig  Ljdk/vm/ci/code/RegisterConfig;
           10   12     7             reg  Ljdk/vm/ci/code/Register;
      Exception table:
        from    to  target  type
           3    14      18  any
          16    17      18  any
           2    15      20  any
          16    20      20  any
    MethodParameters:
      Name  Flags
      lir   

  private void initBlockData(org.graalvm.compiler.lir.LIR);
    descriptor: (Lorg/graalvm/compiler/lir/LIR;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=15, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.lir.LIR lir
         0: .line 172
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.getDebug:()Lorg/graalvm/compiler/debug/DebugContext;
            astore 2 /* debug */
        start local 2 // org.graalvm.compiler.debug.DebugContext debug
         1: .line 173
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.linearScanOrder:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            astore 3 /* blocks */
        start local 3 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
         2: .line 174
            aload 0 /* this */
            iconst_0
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
         3: .line 176
            sipush 30000
            aload 3 /* blocks */
            arraylength
            idiv
            istore 4 /* maxStackLocations */
        start local 4 // int maxStackLocations
         4: .line 182
            aload 3 /* blocks */
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 23
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
         5: aload 8
            iload 6
            aaload
            astore 5 /* block */
        start local 5 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
         6: .line 183
            aload 1 /* lir */
            aload 5 /* block */
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
            astore 9 /* instructions */
        start local 9 // java.util.ArrayList instructions
         7: .line 184
            aload 9 /* instructions */
            invokevirtual java.util.ArrayList.iterator:()Ljava/util/Iterator;
            astore 11
            goto 21
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.util.ArrayList top java.util.Iterator
      StackMap stack:
         8: aload 11
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.LIRInstruction
            astore 10 /* op */
        start local 10 // org.graalvm.compiler.lir.LIRInstruction op
         9: .line 185
            aload 10 /* op */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isEligibleMove:(Lorg/graalvm/compiler/lir/LIRInstruction;)Z
            ifeq 21
        10: .line 186
            aload 10 /* op */
            invokestatic org.graalvm.compiler.lir.StandardOp$MoveOp.asMoveOp:(Lorg/graalvm/compiler/lir/LIRInstruction;)Lorg/graalvm/compiler/lir/StandardOp$MoveOp;
            invokeinterface org.graalvm.compiler.lir.StandardOp$MoveOp.getResult:()Ljdk/vm/ci/meta/AllocatableValue;
            astore 12 /* dest */
        start local 12 // jdk.vm.ci.meta.Value dest
        11: .line 187
            aload 12 /* dest */
            invokestatic jdk.vm.ci.code.ValueUtil.isRegister:(Ljdk/vm/ci/meta/Value;)Z
            ifeq 16
        12: .line 188
            aload 12 /* dest */
            checkcast jdk.vm.ci.code.RegisterValue
            invokevirtual jdk.vm.ci.code.RegisterValue.getRegister:()Ljdk/vm/ci/code/Register;
            getfield jdk.vm.ci.code.Register.number:I
            istore 13 /* regNum */
        start local 13 // int regNum
        13: .line 189
            iload 13 /* regNum */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            if_icmplt 21
        14: .line 190
            aload 0 /* this */
            iload 13 /* regNum */
            iconst_1
            iadd
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
        end local 13 // int regNum
        15: .line 192
            goto 21
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.util.ArrayList org.graalvm.compiler.lir.LIRInstruction java.util.Iterator jdk.vm.ci.meta.Value
      StackMap stack:
        16: aload 12 /* dest */
            invokestatic jdk.vm.ci.code.ValueUtil.isStackSlot:(Ljdk/vm/ci/meta/Value;)Z
            ifeq 21
        17: .line 193
            aload 12 /* dest */
            checkcast jdk.vm.ci.code.StackSlot
            astore 13 /* stackSlot */
        start local 13 // jdk.vm.ci.code.StackSlot stackSlot
        18: .line 194
            aload 0 /* this */
            aload 13 /* stackSlot */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getOffset:(Ljdk/vm/ci/code/StackSlot;)I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            astore 14 /* offset */
        start local 14 // java.lang.Integer offset
        19: .line 195
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            aload 14 /* offset */
            invokeinterface org.graalvm.util.EconomicMap.containsKey:(Ljava/lang/Object;)Z
            ifne 21
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            invokeinterface org.graalvm.util.EconomicMap.size:()I
            iload 4 /* maxStackLocations */
            if_icmpge 21
        20: .line 196
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            aload 14 /* offset */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            invokeinterface org.graalvm.util.EconomicMap.size:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface org.graalvm.util.EconomicMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 14 // java.lang.Integer offset
        end local 13 // jdk.vm.ci.code.StackSlot stackSlot
        end local 12 // jdk.vm.ci.meta.Value dest
        end local 10 // org.graalvm.compiler.lir.LIRInstruction op
        21: .line 184
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.util.ArrayList top java.util.Iterator
      StackMap stack:
            aload 11
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        end local 9 // java.util.ArrayList instructions
        end local 5 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        22: .line 182
            iinc 6 1
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
        23: iload 6
            iload 7
            if_icmplt 5
        24: .line 206
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            invokeinterface org.graalvm.util.EconomicMap.size:()I
            iadd
            istore 5 /* numLocations */
        start local 5 // int numLocations
        25: .line 207
            aload 2 /* debug */
            ldc "num locations = %d (regs = %d, stack = %d)"
            iload 5 /* numLocations */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            invokeinterface org.graalvm.util.EconomicMap.size:()I
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;III)V
        26: .line 208
            aload 3 /* blocks */
            dup
            astore 9
            arraylength
            istore 8
            iconst_0
            istore 7
            goto 31
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
        27: aload 9
            iload 7
            aaload
            astore 6 /* block */
        start local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        28: .line 209
            new org.graalvm.compiler.lir.RedundantMoveElimination$BlockData
            dup
            iload 5 /* numLocations */
            invokespecial org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.<init>:(I)V
            astore 10 /* data */
        start local 10 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        29: .line 210
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.blockData:Lorg/graalvm/util/EconomicMap;
            aload 6 /* block */
            aload 10 /* data */
            invokeinterface org.graalvm.util.EconomicMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 10 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        end local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        30: .line 208
            iinc 7 1
      StackMap locals:
      StackMap stack:
        31: iload 7
            iload 8
            if_icmplt 27
        32: .line 212
            return
        end local 5 // int numLocations
        end local 4 // int maxStackLocations
        end local 3 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
        end local 2 // org.graalvm.compiler.debug.DebugContext debug
        end local 1 // org.graalvm.compiler.lir.LIR lir
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   33     0               this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   33     1                lir  Lorg/graalvm/compiler/lir/LIR;
            1   33     2              debug  Lorg/graalvm/compiler/debug/DebugContext;
            2   33     3             blocks  [Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            4   33     4  maxStackLocations  I
            6   22     5              block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
            7   22     9       instructions  Ljava/util/ArrayList<Lorg/graalvm/compiler/lir/LIRInstruction;>;
            9   21    10                 op  Lorg/graalvm/compiler/lir/LIRInstruction;
           11   21    12               dest  Ljdk/vm/ci/meta/Value;
           13   15    13             regNum  I
           18   21    13          stackSlot  Ljdk/vm/ci/code/StackSlot;
           19   21    14             offset  Ljava/lang/Integer;
           25   33     5       numLocations  I
           28   30     6              block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
           29   30    10               data  Lorg/graalvm/compiler/lir/RedundantMoveElimination$BlockData;
    MethodParameters:
      Name  Flags
      lir   

  private int getOffset(jdk.vm.ci.code.StackSlot);
    descriptor: (Ljdk/vm/ci/code/StackSlot;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // jdk.vm.ci.code.StackSlot stackSlot
         0: .line 215
            aload 1 /* stackSlot */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.frameMap:Lorg/graalvm/compiler/lir/framemap/FrameMap;
            invokevirtual org.graalvm.compiler.lir.framemap.FrameMap.totalFrameSize:()I
            invokevirtual jdk.vm.ci.code.StackSlot.getOffset:(I)I
            ireturn
        end local 1 // jdk.vm.ci.code.StackSlot stackSlot
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0    1     1  stackSlot  Ljdk/vm/ci/code/StackSlot;
    MethodParameters:
           Name  Flags
      stackSlot  

  private boolean solveDataFlow(org.graalvm.compiler.lir.LIR);
    descriptor: (Lorg/graalvm/compiler/lir/LIR;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=28, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.lir.LIR lir
         0: .line 226
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.getDebug:()Lorg/graalvm/compiler/debug/DebugContext;
            astore 2 /* debug */
        start local 2 // org.graalvm.compiler.debug.DebugContext debug
         1: .line 227
            aconst_null
            astore 3
            aconst_null
            astore 4
         2: aload 2 /* debug */
            ldc "solve data flow"
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;)Lorg/graalvm/compiler/debug/Indent;
            astore 5 /* indent */
        start local 5 // org.graalvm.compiler.debug.Indent indent
         3: .line 229
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.linearScanOrder:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            astore 6 /* blocks */
        start local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
         4: .line 231
            iconst_0
            istore 7 /* numIter */
        start local 7 // int numIter
         5: .line 236
            iconst_1
            istore 8 /* currentValueNum */
        start local 8 // int currentValueNum
         6: .line 237
            iconst_1
            istore 9 /* firstRound */
        start local 9 // boolean firstRound
         7: .line 240
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int
      StackMap stack:
            iconst_0
            istore 10 /* changed */
        start local 10 // boolean changed
         8: .line 241
            aconst_null
            astore 11
            aconst_null
            astore 12
         9: aload 2 /* debug */
            ldc "new iteration"
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;)Lorg/graalvm/compiler/debug/Indent;
            astore 13 /* indent2 */
        start local 13 // org.graalvm.compiler.debug.Indent indent2
        10: .line 243
            aload 6 /* blocks */
            dup
            astore 17
            arraylength
            istore 16
            iconst_0
            istore 15
            goto 49
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
        11: aload 17
            iload 15
            aaload
            astore 14 /* block */
        start local 14 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        12: .line 245
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.blockData:Lorg/graalvm/util/EconomicMap;
            aload 14 /* block */
            invokeinterface org.graalvm.util.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.RedundantMoveElimination$BlockData
            astore 18 /* data */
        start local 18 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        13: .line 251
            iload 9 /* firstRound */
            ifeq 15
        14: .line 252
            aload 18 /* data */
            iload 8 /* currentValueNum */
            putfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryValueNum:I
        15: .line 254
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.lir.RedundantMoveElimination$BlockData
      StackMap stack:
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryValueNum:I
            istore 19 /* valueNum */
        start local 19 // int valueNum
        16: .line 255
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 17
            iload 19 /* valueNum */
            ifgt 17
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        17: .line 256
      StackMap locals: int
      StackMap stack:
            iconst_0
            istore 20 /* newState */
        start local 20 // boolean newState
        18: .line 258
            aload 14 /* block */
            aload 6 /* blocks */
            iconst_0
            aaload
            if_acmpeq 19
            aload 14 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.isExceptionEntry:()Z
            ifeq 22
        19: .line 267
      StackMap locals: int
      StackMap stack:
            aload 2 /* debug */
            ldc "kill all values at entry of block %d"
            aload 14 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getId:()I
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;I)V
        20: .line 268
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            iload 19 /* valueNum */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.clearValues:([II)V
        21: .line 269
            goto 28
        22: .line 273
      StackMap locals:
      StackMap stack:
            aload 14 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getPredecessors:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            dup
            astore 24
            arraylength
            istore 23
            iconst_0
            istore 22
            goto 27
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
        23: aload 24
            iload 22
            aaload
            astore 21 /* predecessor */
        start local 21 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase predecessor
        24: .line 274
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.blockData:Lorg/graalvm/util/EconomicMap;
            aload 21 /* predecessor */
            invokeinterface org.graalvm.util.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.RedundantMoveElimination$BlockData
            astore 25 /* predData */
        start local 25 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData predData
        25: .line 275
            iload 20 /* newState */
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            aload 25 /* predData */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.exitState:[I
            iload 19 /* valueNum */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.mergeState:([I[II)Z
            ior
            istore 20 /* newState */
        end local 25 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData predData
        end local 21 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase predecessor
        26: .line 273
            iinc 22 1
      StackMap locals:
      StackMap stack:
        27: iload 22
            iload 23
            if_icmplt 23
        28: .line 280
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int
      StackMap stack:
            iload 19 /* valueNum */
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            arraylength
            iadd
            istore 19 /* valueNum */
        29: .line 282
            iload 20 /* newState */
            ifne 30
            iload 9 /* firstRound */
            ifeq 46
        30: .line 283
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 21
            aconst_null
            astore 22
        31: aload 2 /* debug */
            ldc "update block %d"
            aload 14 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getId:()I
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;I)Lorg/graalvm/compiler/debug/Indent;
            astore 23 /* indent3 */
        start local 23 // org.graalvm.compiler.debug.Indent indent3
        32: .line 289
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.exitState:[I
            astore 24 /* iterState */
        start local 24 // int[] iterState
        33: .line 290
            aload 24 /* iterState */
            aload 18 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.copyState:([I[I)V
        34: .line 291
            aload 1 /* lir */
            aload 14 /* block */
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
            astore 25 /* instructions */
        start local 25 // java.util.ArrayList instructions
        35: .line 293
            aload 25 /* instructions */
            invokevirtual java.util.ArrayList.iterator:()Ljava/util/Iterator;
            astore 27
            goto 38
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent int[] java.util.ArrayList top java.util.Iterator
      StackMap stack:
        36: aload 27
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.LIRInstruction
            astore 26 /* op */
        start local 26 // org.graalvm.compiler.lir.LIRInstruction op
        37: .line 294
            aload 0 /* this */
            aload 2 /* debug */
            aload 24 /* iterState */
            aload 26 /* op */
            iload 19 /* valueNum */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.updateState:(Lorg/graalvm/compiler/debug/DebugContext;[ILorg/graalvm/compiler/lir/LIRInstruction;I)I
            istore 19 /* valueNum */
        end local 26 // org.graalvm.compiler.lir.LIRInstruction op
        38: .line 293
      StackMap locals:
      StackMap stack:
            aload 27
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 36
        39: .line 296
            iconst_1
            istore 10 /* changed */
        end local 25 // java.util.ArrayList instructions
        end local 24 // int[] iterState
        40: .line 297
            aload 23 /* indent3 */
            ifnull 46
            aload 23 /* indent3 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 46
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        41: astore 21
            aload 23 /* indent3 */
            ifnull 42
            aload 23 /* indent3 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 23 // org.graalvm.compiler.debug.Indent indent3
      StackMap locals:
      StackMap stack:
        42: aload 21
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        43: astore 22
            aload 21
            ifnonnull 44
            aload 22
            astore 21
            goto 45
      StackMap locals:
      StackMap stack:
        44: aload 21
            aload 22
            if_acmpeq 45
            aload 21
            aload 22
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        45: aload 21
            athrow
        46: .line 299
      StackMap locals:
      StackMap stack:
            iload 9 /* firstRound */
            ifeq 48
        47: .line 300
            iload 19 /* valueNum */
            istore 8 /* currentValueNum */
        end local 20 // boolean newState
        end local 19 // int valueNum
        end local 18 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        end local 14 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        48: .line 243
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
            iinc 15 1
      StackMap locals:
      StackMap stack:
        49: iload 15
            iload 16
            if_icmplt 11
        50: .line 303
            iconst_0
            istore 9 /* firstRound */
        51: .line 304
            aload 13 /* indent2 */
            ifnull 57
            aload 13 /* indent2 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 57
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] int int int int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        52: astore 11
            aload 13 /* indent2 */
            ifnull 53
            aload 13 /* indent2 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 13 // org.graalvm.compiler.debug.Indent indent2
      StackMap locals:
      StackMap stack:
        53: aload 11
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        54: astore 12
            aload 11
            ifnonnull 55
            aload 12
            astore 11
            goto 56
      StackMap locals:
      StackMap stack:
        55: aload 11
            aload 12
            if_acmpeq 56
            aload 11
            aload 12
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        56: aload 11
            athrow
        57: .line 305
      StackMap locals:
      StackMap stack:
            iinc 7 /* numIter */ 1
        58: .line 307
            iload 7 /* numIter */
            iconst_5
            if_icmple 61
        59: .line 316
            aload 5 /* indent */
            ifnull 60
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        60: .line 311
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        61: .line 314
      StackMap locals:
      StackMap stack:
            iload 10 /* changed */
            ifne 7
        end local 10 // boolean changed
        end local 9 // boolean firstRound
        end local 8 // int currentValueNum
        end local 7 // int numIter
        end local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
        62: .line 316
            aload 5 /* indent */
            ifnull 68
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 68
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        63: astore 3
            aload 5 /* indent */
            ifnull 64
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 5 // org.graalvm.compiler.debug.Indent indent
      StackMap locals:
      StackMap stack:
        64: aload 3
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        65: astore 4
            aload 3
            ifnonnull 66
            aload 4
            astore 3
            goto 67
      StackMap locals:
      StackMap stack:
        66: aload 3
            aload 4
            if_acmpeq 67
            aload 3
            aload 4
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        67: aload 3
            athrow
        68: .line 318
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 2 // org.graalvm.compiler.debug.DebugContext debug
        end local 1 // org.graalvm.compiler.lir.LIR lir
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   69     0             this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   69     1              lir  Lorg/graalvm/compiler/lir/LIR;
            1   69     2            debug  Lorg/graalvm/compiler/debug/DebugContext;
            3   64     5           indent  Lorg/graalvm/compiler/debug/Indent;
            4   62     6           blocks  [Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            5   62     7          numIter  I
            6   62     8  currentValueNum  I
            7   62     9       firstRound  Z
            8   62    10          changed  Z
           10   53    13          indent2  Lorg/graalvm/compiler/debug/Indent;
           12   48    14            block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
           13   48    18             data  Lorg/graalvm/compiler/lir/RedundantMoveElimination$BlockData;
           16   48    19         valueNum  I
           18   48    20         newState  Z
           24   26    21      predecessor  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
           25   26    25         predData  Lorg/graalvm/compiler/lir/RedundantMoveElimination$BlockData;
           32   42    23          indent3  Lorg/graalvm/compiler/debug/Indent;
           33   40    24        iterState  [I
           35   40    25     instructions  Ljava/util/ArrayList<Lorg/graalvm/compiler/lir/LIRInstruction;>;
           37   38    26               op  Lorg/graalvm/compiler/lir/LIRInstruction;
      Exception table:
        from    to  target  type
          32    40      41  any
          31    43      43  any
          10    51      52  any
           9    54      54  any
           3    59      63  any
          61    62      63  any
           2    60      65  any
          61    65      65  any
    MethodParameters:
      Name  Flags
      lir   

  private void eliminateMoves(org.graalvm.compiler.lir.LIR);
    descriptor: (Lorg/graalvm/compiler/lir/LIR;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=25, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.lir.LIR lir
         0: .line 327
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.getDebug:()Lorg/graalvm/compiler/debug/DebugContext;
            astore 2 /* debug */
        start local 2 // org.graalvm.compiler.debug.DebugContext debug
         1: .line 329
            aconst_null
            astore 3
            aconst_null
            astore 4
         2: aload 2 /* debug */
            ldc "eliminate moves"
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;)Lorg/graalvm/compiler/debug/Indent;
            astore 5 /* indent */
        start local 5 // org.graalvm.compiler.debug.Indent indent
         3: .line 331
            aload 1 /* lir */
            invokevirtual org.graalvm.compiler.lir.LIR.linearScanOrder:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            astore 6 /* blocks */
        start local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
         4: .line 333
            aload 6 /* blocks */
            dup
            astore 10
            arraylength
            istore 9
            iconst_0
            istore 8
            goto 39
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
         5: aload 10
            iload 8
            aaload
            astore 7 /* block */
        start local 7 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
         6: .line 335
            aconst_null
            astore 11
            aconst_null
            astore 12
         7: aload 2 /* debug */
            ldc "eliminate moves in block %d"
            aload 7 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getId:()I
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;I)Lorg/graalvm/compiler/debug/Indent;
            astore 13 /* indent2 */
        start local 13 // org.graalvm.compiler.debug.Indent indent2
         8: .line 337
            aload 1 /* lir */
            aload 7 /* block */
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
            astore 14 /* instructions */
        start local 14 // java.util.ArrayList instructions
         9: .line 338
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.blockData:Lorg/graalvm/util/EconomicMap;
            aload 7 /* block */
            invokeinterface org.graalvm.util.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.RedundantMoveElimination$BlockData
            astore 15 /* data */
        start local 15 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        10: .line 339
            iconst_0
            istore 16 /* hasDead */
        start local 16 // boolean hasDead
        11: .line 342
            aload 15 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            astore 17 /* iterState */
        start local 17 // int[] iterState
        12: .line 346
            aload 15 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryValueNum:I
            aload 15 /* data */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$BlockData.entryState:[I
            arraylength
            iadd
            istore 18 /* valueNum */
        start local 18 // int valueNum
        13: .line 348
            aload 14 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            istore 19 /* numInsts */
        start local 19 // int numInsts
        14: .line 349
            iconst_0
            istore 20 /* idx */
        start local 20 // int idx
        15: goto 29
        16: .line 350
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent java.util.ArrayList org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int[] int int int
      StackMap stack:
            aload 14 /* instructions */
            iload 20 /* idx */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.LIRInstruction
            astore 21 /* op */
        start local 21 // org.graalvm.compiler.lir.LIRInstruction op
        17: .line 351
            aload 21 /* op */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isEligibleMove:(Lorg/graalvm/compiler/lir/LIRInstruction;)Z
            ifeq 27
        18: .line 352
            aload 21 /* op */
            invokestatic org.graalvm.compiler.lir.StandardOp$ValueMoveOp.asValueMoveOp:(Lorg/graalvm/compiler/lir/LIRInstruction;)Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
            astore 22 /* moveOp */
        start local 22 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
        19: .line 353
            aload 0 /* this */
            aload 22 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getInput:()Ljdk/vm/ci/meta/AllocatableValue;
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getStateIdx:(Ljdk/vm/ci/meta/Value;)I
            istore 23 /* sourceIdx */
        start local 23 // int sourceIdx
        20: .line 354
            aload 0 /* this */
            aload 22 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getResult:()Ljdk/vm/ci/meta/AllocatableValue;
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getStateIdx:(Ljdk/vm/ci/meta/Value;)I
            istore 24 /* destIdx */
        start local 24 // int destIdx
        21: .line 355
            iload 23 /* sourceIdx */
            iflt 27
            iload 24 /* destIdx */
            iflt 27
            aload 17 /* iterState */
            iload 23 /* sourceIdx */
            iaload
            aload 17 /* iterState */
            iload 24 /* destIdx */
            iaload
            if_icmpne 27
        22: .line 356
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 23
            aload 17 /* iterState */
            iload 23 /* sourceIdx */
            iaload
            ifne 23
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        23: .line 357
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent java.util.ArrayList org.graalvm.compiler.lir.RedundantMoveElimination$BlockData int int[] int int int org.graalvm.compiler.lir.LIRInstruction org.graalvm.compiler.lir.StandardOp$ValueMoveOp int int
      StackMap stack:
            aload 2 /* debug */
            ldc "delete move %s"
            aload 21 /* op */
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;Ljava/lang/Object;)V
        24: .line 358
            aload 14 /* instructions */
            iload 20 /* idx */
            aconst_null
            invokevirtual java.util.ArrayList.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
        25: .line 359
            iconst_1
            istore 16 /* hasDead */
        26: .line 360
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination.deletedMoves:Lorg/graalvm/compiler/debug/CounterKey;
            aload 2 /* debug */
            invokeinterface org.graalvm.compiler.debug.CounterKey.increment:(Lorg/graalvm/compiler/debug/DebugContext;)V
        end local 24 // int destIdx
        end local 23 // int sourceIdx
        end local 22 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
        27: .line 364
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* debug */
            aload 17 /* iterState */
            aload 21 /* op */
            iload 18 /* valueNum */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.updateState:(Lorg/graalvm/compiler/debug/DebugContext;[ILorg/graalvm/compiler/lir/LIRInstruction;I)I
            istore 18 /* valueNum */
        end local 21 // org.graalvm.compiler.lir.LIRInstruction op
        28: .line 349
            iinc 20 /* idx */ 1
      StackMap locals:
      StackMap stack:
        29: iload 20 /* idx */
            iload 19 /* numInsts */
            if_icmplt 16
        end local 20 // int idx
        30: .line 366
            iload 16 /* hasDead */
            ifeq 32
        31: .line 367
            aload 14 /* instructions */
            aconst_null
            invokestatic java.util.Collections.singleton:(Ljava/lang/Object;)Ljava/util/Set;
            invokevirtual java.util.ArrayList.removeAll:(Ljava/util/Collection;)Z
            pop
        end local 19 // int numInsts
        end local 18 // int valueNum
        end local 17 // int[] iterState
        end local 16 // boolean hasDead
        end local 15 // org.graalvm.compiler.lir.RedundantMoveElimination$BlockData data
        end local 14 // java.util.ArrayList instructions
        32: .line 369
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] org.graalvm.compiler.core.common.cfg.AbstractBlockBase int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack:
            aload 13 /* indent2 */
            ifnull 38
            aload 13 /* indent2 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 38
      StackMap locals:
      StackMap stack: java.lang.Throwable
        33: astore 11
            aload 13 /* indent2 */
            ifnull 34
            aload 13 /* indent2 */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 13 // org.graalvm.compiler.debug.Indent indent2
      StackMap locals:
      StackMap stack:
        34: aload 11
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        35: astore 12
            aload 11
            ifnonnull 36
            aload 12
            astore 11
            goto 37
      StackMap locals:
      StackMap stack:
        36: aload 11
            aload 12
            if_acmpeq 37
            aload 11
            aload 12
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        37: aload 11
            athrow
        end local 7 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        38: .line 333
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] top int int org.graalvm.compiler.core.common.cfg.AbstractBlockBase[]
      StackMap stack:
            iinc 8 1
      StackMap locals:
      StackMap stack:
        39: iload 8
            iload 9
            if_icmplt 5
        end local 6 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
        40: .line 371
            aload 5 /* indent */
            ifnull 46
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
            goto 46
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.lir.LIR org.graalvm.compiler.debug.DebugContext java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        41: astore 3
            aload 5 /* indent */
            ifnull 42
            aload 5 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 5 // org.graalvm.compiler.debug.Indent indent
      StackMap locals:
      StackMap stack:
        42: aload 3
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        43: astore 4
            aload 3
            ifnonnull 44
            aload 4
            astore 3
            goto 45
      StackMap locals:
      StackMap stack:
        44: aload 3
            aload 4
            if_acmpeq 45
            aload 3
            aload 4
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        45: aload 3
            athrow
        46: .line 372
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.graalvm.compiler.debug.DebugContext debug
        end local 1 // org.graalvm.compiler.lir.LIR lir
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   47     0          this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   47     1           lir  Lorg/graalvm/compiler/lir/LIR;
            1   47     2         debug  Lorg/graalvm/compiler/debug/DebugContext;
            3   42     5        indent  Lorg/graalvm/compiler/debug/Indent;
            4   40     6        blocks  [Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            6   38     7         block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
            8   34    13       indent2  Lorg/graalvm/compiler/debug/Indent;
            9   32    14  instructions  Ljava/util/ArrayList<Lorg/graalvm/compiler/lir/LIRInstruction;>;
           10   32    15          data  Lorg/graalvm/compiler/lir/RedundantMoveElimination$BlockData;
           11   32    16       hasDead  Z
           12   32    17     iterState  [I
           13   32    18      valueNum  I
           14   32    19      numInsts  I
           15   30    20           idx  I
           17   28    21            op  Lorg/graalvm/compiler/lir/LIRInstruction;
           19   27    22        moveOp  Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
           20   27    23     sourceIdx  I
           21   27    24       destIdx  I
      Exception table:
        from    to  target  type
           8    32      33  any
           7    35      35  any
           3    40      41  any
           2    43      43  any
    MethodParameters:
      Name  Flags
      lir   

  private int updateState(org.graalvm.compiler.debug.DebugContext, int[], org.graalvm.compiler.lir.LIRInstruction, int);
    descriptor: (Lorg/graalvm/compiler/debug/DebugContext;[ILorg/graalvm/compiler/lir/LIRInstruction;I)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=11, args_size=5
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // org.graalvm.compiler.debug.DebugContext debug
        start local 2 // int[] state
        start local 3 // org.graalvm.compiler.lir.LIRInstruction op
        start local 4 // int initValueNum
         0: .line 380
            aconst_null
            astore 5
            aconst_null
            astore 6
         1: aload 1 /* debug */
            ldc "update state for op %s, initial value num = %d"
            aload 3 /* op */
            iload 4 /* initValueNum */
            invokevirtual org.graalvm.compiler.debug.DebugContext.logAndIndent:(Ljava/lang/String;Ljava/lang/Object;I)Lorg/graalvm/compiler/debug/Indent;
            astore 7 /* indent */
        start local 7 // org.graalvm.compiler.debug.Indent indent
         2: .line 381
            aload 3 /* op */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isEligibleMove:(Lorg/graalvm/compiler/lir/LIRInstruction;)Z
            ifeq 13
         3: .line 385
            aload 3 /* op */
            invokestatic org.graalvm.compiler.lir.StandardOp$ValueMoveOp.asValueMoveOp:(Lorg/graalvm/compiler/lir/LIRInstruction;)Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
            astore 8 /* moveOp */
        start local 8 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
         4: .line 386
            aload 0 /* this */
            aload 8 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getInput:()Ljdk/vm/ci/meta/AllocatableValue;
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getStateIdx:(Ljdk/vm/ci/meta/Value;)I
            istore 9 /* sourceIdx */
        start local 9 // int sourceIdx
         5: .line 387
            aload 0 /* this */
            aload 8 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getResult:()Ljdk/vm/ci/meta/AllocatableValue;
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getStateIdx:(Ljdk/vm/ci/meta/Value;)I
            istore 10 /* destIdx */
        start local 10 // int destIdx
         6: .line 388
            iload 9 /* sourceIdx */
            iflt 13
            iload 10 /* destIdx */
            iflt 13
         7: .line 389
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 8
            aload 2 /* state */
            iload 9 /* sourceIdx */
            iaload
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isObjectValue:(I)Z
            ifne 8
            aload 8 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getInput:()Ljdk/vm/ci/meta/AllocatableValue;
            invokestatic org.graalvm.compiler.core.common.LIRKind.isValue:(Ljdk/vm/ci/meta/Value;)Z
            ifne 8
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "move op moves object but input is not defined as object "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 8 /* moveOp */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         8: .line 390
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.debug.DebugContext int[] org.graalvm.compiler.lir.LIRInstruction int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent org.graalvm.compiler.lir.StandardOp$ValueMoveOp int int
      StackMap stack:
            aload 2 /* state */
            iload 10 /* destIdx */
            aload 2 /* state */
            iload 9 /* sourceIdx */
            iaload
            iastore
         9: .line 391
            aload 1 /* debug */
            ldc "move value %d from %d to %d"
            aload 2 /* state */
            iload 9 /* sourceIdx */
            iaload
            iload 9 /* sourceIdx */
            iload 10 /* destIdx */
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;III)V
        10: .line 392
            iload 4 /* initValueNum */
        11: .line 457
            aload 7 /* indent */
            ifnull 12
            aload 7 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        12: .line 392
      StackMap locals:
      StackMap stack: int
            ireturn
        end local 10 // int destIdx
        end local 9 // int sourceIdx
        end local 8 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
        13: .line 396
      StackMap locals:
      StackMap stack:
            iload 4 /* initValueNum */
            istore 8 /* valueNum */
        start local 8 // int valueNum
        14: .line 398
            aload 3 /* op */
            invokevirtual org.graalvm.compiler.lir.LIRInstruction.destroysCallerSavedRegisters:()Z
            ifeq 21
        15: .line 399
            aload 1 /* debug */
            ldc "kill all caller save regs"
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;)V
        16: .line 401
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.callerSaveRegs:Ljdk/vm/ci/code/RegisterArray;
            invokevirtual jdk.vm.ci.code.RegisterArray.iterator:()Ljava/util/Iterator;
            astore 10
            goto 20
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.debug.DebugContext int[] org.graalvm.compiler.lir.LIRInstruction int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent int top java.util.Iterator
      StackMap stack:
        17: aload 10
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast jdk.vm.ci.code.Register
            astore 9 /* reg */
        start local 9 // jdk.vm.ci.code.Register reg
        18: .line 402
            aload 9 /* reg */
            getfield jdk.vm.ci.code.Register.number:I
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            if_icmpge 20
        19: .line 404
            aload 2 /* state */
            aload 9 /* reg */
            getfield jdk.vm.ci.code.Register.number:I
            iload 8 /* valueNum */
            iinc 8 /* valueNum */ 1
            iconst_1
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.encodeValueNum:(IZ)I
            iastore
        end local 9 // jdk.vm.ci.code.Register reg
        20: .line 401
      StackMap locals:
      StackMap stack:
            aload 10
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 17
        21: .line 433
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.debug.DebugContext int[] org.graalvm.compiler.lir.LIRInstruction int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent int
      StackMap stack:
            new org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer
            dup
            aload 0 /* this */
            iload 8 /* valueNum */
            aload 2 /* state */
            aload 1 /* debug */
            invokespecial org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer.<init>:(Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;I[ILorg/graalvm/compiler/debug/DebugContext;)V
            astore 9 /* outputValueConsumer */
        start local 9 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer outputValueConsumer
        22: .line 435
            aload 3 /* op */
            aload 9 /* outputValueConsumer */
            invokevirtual org.graalvm.compiler.lir.LIRInstruction.visitEachTemp:(Lorg/graalvm/compiler/lir/ValueConsumer;)V
        23: .line 439
            aload 3 /* op */
            aload 9 /* outputValueConsumer */
            invokevirtual org.graalvm.compiler.lir.LIRInstruction.visitEachOutput:(Lorg/graalvm/compiler/lir/ValueConsumer;)V
        24: .line 441
            aload 9 /* outputValueConsumer */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer.opValueNum:I
            istore 8 /* valueNum */
        25: .line 443
            aload 3 /* op */
            invokevirtual org.graalvm.compiler.lir.LIRInstruction.hasState:()Z
            ifeq 29
        26: .line 451
            aload 1 /* debug */
            ldc "kill all object values"
            invokevirtual org.graalvm.compiler.debug.DebugContext.log:(Ljava/lang/String;)V
        27: .line 452
            aload 2 /* state */
            iload 8 /* valueNum */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.clearValuesOfKindObject:([II)V
        28: .line 453
            iload 8 /* valueNum */
            aload 2 /* state */
            arraylength
            iadd
            istore 8 /* valueNum */
        29: .line 456
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer
      StackMap stack:
            iload 8 /* valueNum */
        30: .line 457
            aload 7 /* indent */
            ifnull 31
            aload 7 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        31: .line 456
      StackMap locals:
      StackMap stack: int
            ireturn
        end local 9 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer outputValueConsumer
        end local 8 // int valueNum
      StackMap locals: org.graalvm.compiler.lir.RedundantMoveElimination$Optimization org.graalvm.compiler.debug.DebugContext int[] org.graalvm.compiler.lir.LIRInstruction int java.lang.Throwable java.lang.Throwable org.graalvm.compiler.debug.Indent
      StackMap stack: java.lang.Throwable
        32: astore 5
        33: .line 457
            aload 7 /* indent */
            ifnull 34
            aload 7 /* indent */
            invokeinterface org.graalvm.compiler.debug.Indent.close:()V
        end local 7 // org.graalvm.compiler.debug.Indent indent
      StackMap locals:
      StackMap stack:
        34: aload 5
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        35: astore 6
            aload 5
            ifnonnull 36
            aload 6
            astore 5
            goto 37
      StackMap locals:
      StackMap stack:
        36: aload 5
            aload 6
            if_acmpeq 37
            aload 5
            aload 6
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        37: aload 5
            athrow
        end local 4 // int initValueNum
        end local 3 // org.graalvm.compiler.lir.LIRInstruction op
        end local 2 // int[] state
        end local 1 // org.graalvm.compiler.debug.DebugContext debug
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   38     0                 this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   38     1                debug  Lorg/graalvm/compiler/debug/DebugContext;
            0   38     2                state  [I
            0   38     3                   op  Lorg/graalvm/compiler/lir/LIRInstruction;
            0   38     4         initValueNum  I
            2   34     7               indent  Lorg/graalvm/compiler/debug/Indent;
            4   13     8               moveOp  Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
            5   13     9            sourceIdx  I
            6   13    10              destIdx  I
           14   32     8             valueNum  I
           18   20     9                  reg  Ljdk/vm/ci/code/Register;
           22   32     9  outputValueConsumer  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization$1OutputValueConsumer;
      Exception table:
        from    to  target  type
           2    11      32  any
          13    30      32  any
           1    12      35  any
          13    31      35  any
          32    35      35  any
    MethodParameters:
              Name  Flags
      debug         
      state         final
      op            
      initValueNum  

  private static boolean mergeState(int[], int[], int);
    descriptor: ([I[II)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=8, args_size=3
        start local 0 // int[] dest
        start local 1 // int[] source
        start local 2 // int defNum
         0: .line 464
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 1
            aload 0 /* dest */
            arraylength
            aload 1 /* source */
            arraylength
            if_icmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 465
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 3 /* changed */
        start local 3 // boolean changed
         2: .line 466
            iconst_0
            istore 4 /* idx */
        start local 4 // int idx
         3: goto 17
         4: .line 467
      StackMap locals: int int
      StackMap stack:
            iload 2 /* defNum */
            iload 4 /* idx */
            iadd
            istore 5 /* phiNum */
        start local 5 // int phiNum
         5: .line 468
            aload 0 /* dest */
            iload 4 /* idx */
            iaload
            istore 6 /* dst */
        start local 6 // int dst
         6: .line 469
            aload 1 /* source */
            iload 4 /* idx */
            iaload
            istore 7 /* src */
        start local 7 // int src
         7: .line 470
            iload 6 /* dst */
            iload 7 /* src */
            if_icmpeq 16
            iload 7 /* src */
            ifeq 16
            iload 6 /* dst */
            iload 5 /* phiNum */
            iload 6 /* dst */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isObjectValue:(I)Z
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.encodeValueNum:(IZ)I
            if_icmpeq 16
         8: .line 471
            iload 6 /* dst */
            ifeq 13
         9: .line 472
            iload 5 /* phiNum */
            iload 6 /* dst */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isObjectValue:(I)Z
            ifne 10
            iload 7 /* src */
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isObjectValue:(I)Z
            ifne 10
            iconst_0
            goto 11
      StackMap locals: int[] int[] int int int int int int
      StackMap stack: int
        10: iconst_1
      StackMap locals: int[] int[] int int int int int int
      StackMap stack: int int
        11: invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.encodeValueNum:(IZ)I
            istore 6 /* dst */
        12: .line 473
            goto 14
        13: .line 474
      StackMap locals:
      StackMap stack:
            iload 7 /* src */
            istore 6 /* dst */
        14: .line 476
      StackMap locals:
      StackMap stack:
            aload 0 /* dest */
            iload 4 /* idx */
            iload 6 /* dst */
            iastore
        15: .line 477
            iconst_1
            istore 3 /* changed */
        end local 7 // int src
        end local 6 // int dst
        end local 5 // int phiNum
        16: .line 466
      StackMap locals:
      StackMap stack:
            iinc 4 /* idx */ 1
      StackMap locals:
      StackMap stack:
        17: iload 4 /* idx */
            aload 1 /* source */
            arraylength
            if_icmplt 4
        end local 4 // int idx
        18: .line 480
            iload 3 /* changed */
            ireturn
        end local 3 // boolean changed
        end local 2 // int defNum
        end local 1 // int[] source
        end local 0 // int[] dest
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   19     0     dest  [I
            0   19     1   source  [I
            0   19     2   defNum  I
            2   19     3  changed  Z
            3   18     4      idx  I
            5   16     5   phiNum  I
            6   16     6      dst  I
            7   16     7      src  I
    MethodParameters:
        Name  Flags
      dest    
      source  
      defNum  

  private static void copyState(int[], int[]);
    descriptor: ([I[I)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // int[] dest
        start local 1 // int[] source
         0: .line 484
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 1
            aload 0 /* dest */
            arraylength
            aload 1 /* source */
            arraylength
            if_icmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 485
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 2 /* idx */
        start local 2 // int idx
         2: goto 5
         3: .line 486
      StackMap locals: int
      StackMap stack:
            aload 0 /* dest */
            iload 2 /* idx */
            aload 1 /* source */
            iload 2 /* idx */
            iaload
            iastore
         4: .line 485
            iinc 2 /* idx */ 1
      StackMap locals:
      StackMap stack:
         5: iload 2 /* idx */
            aload 1 /* source */
            arraylength
            if_icmplt 3
        end local 2 // int idx
         6: .line 488
            return
        end local 1 // int[] source
        end local 0 // int[] dest
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0    dest  [I
            0    7     1  source  [I
            2    6     2     idx  I
    MethodParameters:
        Name  Flags
      dest    
      source  

  private static void clearValues(int[], int);
    descriptor: ([II)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // int[] state
        start local 1 // int defNum
         0: .line 491
            iconst_0
            istore 2 /* idx */
        start local 2 // int idx
         1: goto 5
         2: .line 492
      StackMap locals: int
      StackMap stack:
            iload 1 /* defNum */
            iload 2 /* idx */
            iadd
            istore 3 /* phiNum */
        start local 3 // int phiNum
         3: .line 494
            aload 0 /* state */
            iload 2 /* idx */
            iload 3 /* phiNum */
            iconst_1
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.encodeValueNum:(IZ)I
            iastore
        end local 3 // int phiNum
         4: .line 491
            iinc 2 /* idx */ 1
      StackMap locals:
      StackMap stack:
         5: iload 2 /* idx */
            aload 0 /* state */
            arraylength
            if_icmplt 2
        end local 2 // int idx
         6: .line 496
            return
        end local 1 // int defNum
        end local 0 // int[] state
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0   state  [I
            0    7     1  defNum  I
            1    6     2     idx  I
            3    4     3  phiNum  I
    MethodParameters:
        Name  Flags
      state   
      defNum  

  private static void clearValuesOfKindObject(int[], int);
    descriptor: ([II)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // int[] state
        start local 1 // int defNum
         0: .line 499
            iconst_0
            istore 2 /* idx */
        start local 2 // int idx
         1: goto 6
         2: .line 500
      StackMap locals: int
      StackMap stack:
            iload 1 /* defNum */
            iload 2 /* idx */
            iadd
            istore 3 /* phiNum */
        start local 3 // int phiNum
         3: .line 501
            aload 0 /* state */
            iload 2 /* idx */
            iaload
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.isObjectValue:(I)Z
            ifeq 5
         4: .line 502
            aload 0 /* state */
            iload 2 /* idx */
            iload 3 /* phiNum */
            iconst_1
            invokestatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.encodeValueNum:(IZ)I
            iastore
        end local 3 // int phiNum
         5: .line 499
      StackMap locals:
      StackMap stack:
            iinc 2 /* idx */ 1
      StackMap locals:
      StackMap stack:
         6: iload 2 /* idx */
            aload 0 /* state */
            arraylength
            if_icmplt 2
        end local 2 // int idx
         7: .line 505
            return
        end local 1 // int defNum
        end local 0 // int[] state
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    8     0   state  [I
            0    8     1  defNum  I
            1    7     2     idx  I
            3    5     3  phiNum  I
    MethodParameters:
        Name  Flags
      state   
      defNum  

  private int getStateIdx(jdk.vm.ci.meta.Value);
    descriptor: (Ljdk/vm/ci/meta/Value;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
        start local 1 // jdk.vm.ci.meta.Value location
         0: .line 511
            aload 1 /* location */
            invokestatic jdk.vm.ci.code.ValueUtil.isRegister:(Ljdk/vm/ci/meta/Value;)Z
            ifeq 5
         1: .line 512
            aload 1 /* location */
            checkcast jdk.vm.ci.code.RegisterValue
            invokevirtual jdk.vm.ci.code.RegisterValue.getRegister:()Ljdk/vm/ci/code/Register;
            getfield jdk.vm.ci.code.Register.number:I
            istore 2 /* regNum */
        start local 2 // int regNum
         2: .line 513
            iload 2 /* regNum */
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            if_icmpge 4
         3: .line 514
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.eligibleRegs:[I
            iload 2 /* regNum */
            iaload
            ireturn
         4: .line 516
      StackMap locals: int
      StackMap stack:
            iconst_m1
            ireturn
        end local 2 // int regNum
         5: .line 518
      StackMap locals:
      StackMap stack:
            aload 1 /* location */
            invokestatic jdk.vm.ci.code.ValueUtil.isStackSlot:(Ljdk/vm/ci/meta/Value;)Z
            ifeq 10
         6: .line 519
            aload 1 /* location */
            checkcast jdk.vm.ci.code.StackSlot
            astore 2 /* slot */
        start local 2 // jdk.vm.ci.code.StackSlot slot
         7: .line 520
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.stackIndices:Lorg/graalvm/util/EconomicMap;
            aload 0 /* this */
            aload 2 /* slot */
            invokevirtual org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.getOffset:(Ljdk/vm/ci/code/StackSlot;)I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface org.graalvm.util.EconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 3 /* index */
        start local 3 // java.lang.Integer index
         8: .line 521
            aload 3 /* index */
            ifnull 10
         9: .line 522
            aload 3 /* index */
            invokevirtual java.lang.Integer.intValue:()I
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.numRegs:I
            iadd
            ireturn
        end local 3 // java.lang.Integer index
        end local 2 // jdk.vm.ci.code.StackSlot slot
        10: .line 525
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 1 // jdk.vm.ci.meta.Value location
        end local 0 // org.graalvm.compiler.lir.RedundantMoveElimination$Optimization this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Lorg/graalvm/compiler/lir/RedundantMoveElimination$Optimization;
            0   11     1  location  Ljdk/vm/ci/meta/Value;
            2    5     2    regNum  I
            7   10     2      slot  Ljdk/vm/ci/code/StackSlot;
            8   10     3     index  Ljava/lang/Integer;
    MethodParameters:
          Name  Flags
      location  

  private static int encodeValueNum(int, boolean);
    descriptor: (IZ)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // int valueNum
        start local 1 // boolean isObjectKind
         0: .line 532
            getstatic org.graalvm.compiler.lir.RedundantMoveElimination$Optimization.$assertionsDisabled:Z
            ifne 1
            iload 0 /* valueNum */
            ifgt 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 533
      StackMap locals:
      StackMap stack:
            iload 1 /* isObjectKind */
            ifeq 3
         2: .line 534
            iload 0 /* valueNum */
            ineg
            ireturn
         3: .line 536
      StackMap locals:
      StackMap stack:
            iload 0 /* valueNum */
            ireturn
        end local 1 // boolean isObjectKind
        end local 0 // int valueNum
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0      valueNum  I
            0    4     1  isObjectKind  Z
    MethodParameters:
              Name  Flags
      valueNum      
      isObjectKind  

  private static boolean isObjectValue(int);
    descriptor: (I)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // int encodedValueNum
         0: .line 544
            iload 0 /* encodedValueNum */
            ifge 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // int encodedValueNum
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0  encodedValueNum  I
    MethodParameters:
                 Name  Flags
      encodedValueNum  

  private static boolean isEligibleMove(org.graalvm.compiler.lir.LIRInstruction);
    descriptor: (Lorg/graalvm/compiler/lir/LIRInstruction;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // org.graalvm.compiler.lir.LIRInstruction op
         0: .line 551
            aload 0 /* op */
            invokestatic org.graalvm.compiler.lir.StandardOp$ValueMoveOp.isValueMoveOp:(Lorg/graalvm/compiler/lir/LIRInstruction;)Z
            ifeq 5
         1: .line 552
            aload 0 /* op */
            invokestatic org.graalvm.compiler.lir.StandardOp$ValueMoveOp.asValueMoveOp:(Lorg/graalvm/compiler/lir/LIRInstruction;)Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
            astore 1 /* moveOp */
        start local 1 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
         2: .line 553
            aload 1 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getInput:()Ljdk/vm/ci/meta/AllocatableValue;
            astore 2 /* source */
        start local 2 // jdk.vm.ci.meta.Value source
         3: .line 554
            aload 1 /* moveOp */
            invokeinterface org.graalvm.compiler.lir.StandardOp$ValueMoveOp.getResult:()Ljdk/vm/ci/meta/AllocatableValue;
            astore 3 /* dest */
        start local 3 // jdk.vm.ci.meta.Value dest
         4: .line 558
            aload 2 /* source */
            invokevirtual jdk.vm.ci.meta.Value.getValueKind:()Ljdk/vm/ci/meta/ValueKind;
            aload 3 /* dest */
            invokevirtual jdk.vm.ci.meta.Value.getValueKind:()Ljdk/vm/ci/meta/ValueKind;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ireturn
        end local 3 // jdk.vm.ci.meta.Value dest
        end local 2 // jdk.vm.ci.meta.Value source
        end local 1 // org.graalvm.compiler.lir.StandardOp$ValueMoveOp moveOp
         5: .line 560
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 0 // org.graalvm.compiler.lir.LIRInstruction op
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0      op  Lorg/graalvm/compiler/lir/LIRInstruction;
            2    5     1  moveOp  Lorg/graalvm/compiler/lir/StandardOp$ValueMoveOp;
            3    5     2  source  Ljdk/vm/ci/meta/Value;
            4    5     3    dest  Ljdk/vm/ci/meta/Value;
    MethodParameters:
      Name  Flags
      op    
}
SourceFile: "RedundantMoveElimination.java"
NestHost: org.graalvm.compiler.lir.RedundantMoveElimination
InnerClasses:
  private final BlockData = org.graalvm.compiler.lir.RedundantMoveElimination$BlockData of org.graalvm.compiler.lir.RedundantMoveElimination
  private final Optimization = org.graalvm.compiler.lir.RedundantMoveElimination$Optimization of org.graalvm.compiler.lir.RedundantMoveElimination
  OutputValueConsumer = org.graalvm.compiler.lir.RedundantMoveElimination$Optimization$1OutputValueConsumer
  public abstract MoveOp = org.graalvm.compiler.lir.StandardOp$MoveOp of org.graalvm.compiler.lir.StandardOp
  public abstract ValueMoveOp = org.graalvm.compiler.lir.StandardOp$ValueMoveOp of org.graalvm.compiler.lir.StandardOp