final class org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer
  super_class: java.lang.Object
{
  private final org.graalvm.compiler.lir.LIR lir;
    descriptor: Lorg/graalvm/compiler/lir/LIR;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static final org.graalvm.compiler.debug.CounterKey BLOCKS_DELETED;
    descriptor: Lorg/graalvm/compiler/debug/CounterKey;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  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 51
            ldc Lorg/graalvm/compiler/lir/ControlFlowOptimizer;
            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.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
         3: .line 59
            ldc "BlocksDeleted"
            invokestatic org.graalvm.compiler.debug.DebugContext.counter:(Ljava/lang/CharSequence;)Lorg/graalvm/compiler/debug/CounterKey;
            putstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.BLOCKS_DELETED:Lorg/graalvm/compiler/debug/CounterKey;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>(org.graalvm.compiler.lir.LIR);
    descriptor: (Lorg/graalvm/compiler/lir/LIR;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
        start local 1 // org.graalvm.compiler.lir.LIR lir
         0: .line 55
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 56
            aload 0 /* this */
            aload 1 /* lir */
            putfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
         2: .line 57
            return
        end local 1 // org.graalvm.compiler.lir.LIR lir
        end local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/graalvm/compiler/lir/ControlFlowOptimizer$Optimizer;
            0    3     1   lir  Lorg/graalvm/compiler/lir/LIR;
    MethodParameters:
      Name  Flags
      lir   

  private boolean canDeleteBlock(org.graalvm.compiler.core.common.cfg.AbstractBlockBase<?>);
    descriptor: (Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
        start local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
         0: .line 69
            aload 1 /* block */
            ifnull 1
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getSuccessorCount:()I
            iconst_1
            if_icmpne 1
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getPredecessorCount:()I
            ifeq 1
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getSuccessors:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            iconst_0
            aaload
            aload 1 /* block */
            if_acmpne 2
         1: .line 70
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 73
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
            astore 2 /* instructions */
        start local 2 // java.util.ArrayList instructions
         3: .line 75
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 4
            aload 2 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            iconst_2
            if_icmpge 4
            new java.lang.AssertionError
            dup
            ldc "block must have label and branch"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         4: .line 76
      StackMap locals: java.util.ArrayList
      StackMap stack:
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 5
            aload 2 /* instructions */
            iconst_0
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            instanceof org.graalvm.compiler.lir.StandardOp$LabelOp
            ifne 5
            new java.lang.AssertionError
            dup
            ldc "first instruction must always be a label"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         5: .line 77
      StackMap locals:
      StackMap stack:
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 6
            aload 2 /* instructions */
            aload 2 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            iconst_1
            isub
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            instanceof org.graalvm.compiler.lir.StandardOp$JumpOp
            ifne 6
            new java.lang.AssertionError
            dup
            ldc "last instruction must always be a branch"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         6: .line 78
      StackMap locals:
      StackMap stack:
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 12
            aload 2 /* instructions */
            aload 2 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            iconst_1
            isub
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.StandardOp$JumpOp
            invokevirtual org.graalvm.compiler.lir.StandardOp$JumpOp.destination:()Lorg/graalvm/compiler/lir/LabelRef;
            invokevirtual org.graalvm.compiler.lir.LabelRef.label:()Lorg/graalvm/compiler/asm/Label;
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getSuccessors:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            iconst_0
            aaload
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
         7: .line 79
            iconst_0
         8: .line 78
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.StandardOp$LabelOp
         9: .line 79
            invokevirtual org.graalvm.compiler.lir.StandardOp$LabelOp.getLabel:()Lorg/graalvm/compiler/asm/Label;
        10: .line 78
            if_acmpeq 12
            new java.lang.AssertionError
            dup
        11: .line 79
            ldc "branch target must be the successor"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        12: .line 82
      StackMap locals:
      StackMap stack:
            aload 2 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            iconst_2
            if_icmpne 13
            aload 2 /* instructions */
            aload 2 /* instructions */
            invokevirtual java.util.ArrayList.size:()I
            iconst_1
            isub
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.LIRInstruction
            invokevirtual org.graalvm.compiler.lir.LIRInstruction.hasState:()Z
            ifne 13
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.isExceptionEntry:()Z
            ifne 13
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
        13: iconst_0
            ireturn
        end local 2 // java.util.ArrayList instructions
        end local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        end local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   14     0          this  Lorg/graalvm/compiler/lir/ControlFlowOptimizer$Optimizer;
            0   14     1         block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
            3   14     2  instructions  Ljava/util/ArrayList<Lorg/graalvm/compiler/lir/LIRInstruction;>;
    Signature: (Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;)Z
    MethodParameters:
       Name  Flags
      block  

  private void alignBlock(org.graalvm.compiler.core.common.cfg.AbstractBlockBase<?>);
    descriptor: (Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
        start local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
         0: .line 86
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.isAligned:()Z
            ifne 6
         1: .line 87
            aload 1 /* block */
            iconst_1
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.setAlign:(Z)V
         2: .line 88
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            aload 1 /* block */
            invokevirtual org.graalvm.compiler.lir.LIR.getLIRforBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Ljava/util/ArrayList;
            astore 2 /* instructions */
        start local 2 // java.util.ArrayList instructions
         3: .line 89
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 4
            aload 2 /* instructions */
            iconst_0
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            instanceof org.graalvm.compiler.lir.StandardOp$LabelOp
            ifne 4
            new java.lang.AssertionError
            dup
            ldc "first instruction must always be a label"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         4: .line 90
      StackMap locals: java.util.ArrayList
      StackMap stack:
            aload 2 /* instructions */
            iconst_0
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.graalvm.compiler.lir.StandardOp$LabelOp
            astore 3 /* label */
        start local 3 // org.graalvm.compiler.lir.StandardOp$LabelOp label
         5: .line 91
            aload 2 /* instructions */
            iconst_0
            new org.graalvm.compiler.lir.StandardOp$LabelOp
            dup
            aload 3 /* label */
            invokevirtual org.graalvm.compiler.lir.StandardOp$LabelOp.getLabel:()Lorg/graalvm/compiler/asm/Label;
            iconst_1
            invokespecial org.graalvm.compiler.lir.StandardOp$LabelOp.<init>:(Lorg/graalvm/compiler/asm/Label;Z)V
            invokevirtual java.util.ArrayList.set:(ILjava/lang/Object;)Ljava/lang/Object;
            pop
        end local 3 // org.graalvm.compiler.lir.StandardOp$LabelOp label
        end local 2 // java.util.ArrayList instructions
         6: .line 93
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        end local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0          this  Lorg/graalvm/compiler/lir/ControlFlowOptimizer$Optimizer;
            0    7     1         block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
            3    6     2  instructions  Ljava/util/ArrayList<Lorg/graalvm/compiler/lir/LIRInstruction;>;
            5    6     3         label  Lorg/graalvm/compiler/lir/StandardOp$LabelOp;
    Signature: (Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;)V
    MethodParameters:
       Name  Flags
      block  

  private void deleteEmptyBlocks(org.graalvm.compiler.core.common.cfg.AbstractBlockBase<?>[]);
    descriptor: ([Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
        start local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
         0: .line 96
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 1
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            aload 1 /* blocks */
            invokestatic org.graalvm.compiler.lir.LIR.verifyBlocks:(Lorg/graalvm/compiler/lir/LIR;[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 97
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         2: goto 12
         3: .line 98
      StackMap locals: int
      StackMap stack:
            aload 1 /* blocks */
            iload 2 /* i */
            aaload
            astore 3 /* block */
        start local 3 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
         4: .line 99
            aload 0 /* this */
            aload 3 /* block */
            invokevirtual org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.canDeleteBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Z
            ifeq 11
         5: .line 101
            aload 3 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.delete:()V
         6: .line 103
            aload 3 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.getSuccessors:()[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            iconst_0
            aaload
            astore 4 /* other */
        start local 4 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase other
         7: .line 104
            aload 3 /* block */
            invokevirtual org.graalvm.compiler.core.common.cfg.AbstractBlockBase.isAligned:()Z
            ifeq 9
         8: .line 105
            aload 0 /* this */
            aload 4 /* other */
            invokevirtual org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.alignBlock:(Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)V
         9: .line 108
      StackMap locals: org.graalvm.compiler.core.common.cfg.AbstractBlockBase org.graalvm.compiler.core.common.cfg.AbstractBlockBase
      StackMap stack:
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.BLOCKS_DELETED:Lorg/graalvm/compiler/debug/CounterKey;
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            invokevirtual org.graalvm.compiler.lir.LIR.getDebug:()Lorg/graalvm/compiler/debug/DebugContext;
            invokeinterface org.graalvm.compiler.debug.CounterKey.increment:(Lorg/graalvm/compiler/debug/DebugContext;)V
        10: .line 109
            aload 1 /* blocks */
            iload 2 /* i */
            aconst_null
            aastore
        end local 4 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase other
        end local 3 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase block
        11: .line 97
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
        12: iload 2 /* i */
            aload 1 /* blocks */
            arraylength
            if_icmplt 3
        end local 2 // int i
        13: .line 112
            getstatic org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.$assertionsDisabled:Z
            ifne 14
            aload 0 /* this */
            getfield org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer.lir:Lorg/graalvm/compiler/lir/LIR;
            aload 1 /* blocks */
            invokestatic org.graalvm.compiler.lir.LIR.verifyBlocks:(Lorg/graalvm/compiler/lir/LIR;[Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;)Z
            ifne 14
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        14: .line 113
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.graalvm.compiler.core.common.cfg.AbstractBlockBase[] blocks
        end local 0 // org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   15     0    this  Lorg/graalvm/compiler/lir/ControlFlowOptimizer$Optimizer;
            0   15     1  blocks  [Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase;
            2   13     2       i  I
            4   11     3   block  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
            7   11     4   other  Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;
    Signature: ([Lorg/graalvm/compiler/core/common/cfg/AbstractBlockBase<*>;)V
    MethodParameters:
        Name  Flags
      blocks  
}
SourceFile: "ControlFlowOptimizer.java"
NestHost: org.graalvm.compiler.lir.ControlFlowOptimizer
InnerClasses:
  private final Optimizer = org.graalvm.compiler.lir.ControlFlowOptimizer$Optimizer of org.graalvm.compiler.lir.ControlFlowOptimizer
  public JumpOp = org.graalvm.compiler.lir.StandardOp$JumpOp of org.graalvm.compiler.lir.StandardOp
  public final LabelOp = org.graalvm.compiler.lir.StandardOp$LabelOp of org.graalvm.compiler.lir.StandardOp