public class org.jruby.ir.passes.DominatorTreeBuilder extends org.jruby.ir.passes.CompilerPass
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.ir.passes.DominatorTreeBuilder
  super_class: org.jruby.ir.passes.CompilerPass
{
  private static int NULL;
    descriptor: I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static final org.jruby.util.log.Logger LOG;
    descriptor: Lorg/jruby/util/log/Logger;
    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 12
            ldc Lorg/jruby/ir/passes/DominatorTreeBuilder;
            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.jruby.ir.passes.DominatorTreeBuilder.$assertionsDisabled:Z
         3: .line 13
            iconst_m1
            putstatic org.jruby.ir.passes.DominatorTreeBuilder.NULL:I
         4: .line 14
            ldc Lorg/jruby/ir/passes/DominatorTreeBuilder;
            invokestatic org.jruby.util.log.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/jruby/util/log/Logger;
            putstatic org.jruby.ir.passes.DominatorTreeBuilder.LOG:Lorg/jruby/util/log/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
         0: .line 12
            aload 0 /* this */
            invokespecial org.jruby.ir.passes.CompilerPass.<init>:()V
            return
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ir/passes/DominatorTreeBuilder;

  public java.lang.String getLabel();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
         0: .line 18
            ldc "Build Dominator Tree"
            areturn
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/ir/passes/DominatorTreeBuilder;

  public java.lang.Object execute(org.jruby.ir.IRScope, java.lang.Object[]);
    descriptor: (Lorg/jruby/ir/IRScope;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
        start local 1 // org.jruby.ir.IRScope scope
        start local 2 // java.lang.Object[] data
         0: .line 23
            aload 2 /* data */
            iconst_0
            aaload
            checkcast org.jruby.ir.representations.CFG
            astore 3 /* cfg */
        start local 3 // org.jruby.ir.representations.CFG cfg
         1: .line 26
            aload 0 /* this */
            aload 3 /* cfg */
            aload 3 /* cfg */
            invokevirtual org.jruby.ir.representations.CFG.postOrderList:()Ljava/util/LinkedList;
            aload 3 /* cfg */
            invokevirtual org.jruby.ir.representations.CFG.getMaxNodeID:()I
            invokevirtual org.jruby.ir.passes.DominatorTreeBuilder.buildDominatorTree:(Lorg/jruby/ir/representations/CFG;Ljava/util/LinkedList;I)V
         2: .line 27
            goto 5
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.IRScope java.lang.Object[] org.jruby.ir.representations.CFG
      StackMap stack: java.lang.Exception
         3: pop
         4: .line 28
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.LOG:Lorg/jruby/util/log/Logger;
            ldc "Caught exception building dom tree for {}"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* scope */
            invokevirtual org.jruby.ir.IRScope.getCFG:()Lorg/jruby/ir/representations/CFG;
            aastore
            invokeinterface org.jruby.util.log.Logger.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
         5: .line 31
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // org.jruby.ir.representations.CFG cfg
        end local 2 // java.lang.Object[] data
        end local 1 // org.jruby.ir.IRScope scope
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0   this  Lorg/jruby/ir/passes/DominatorTreeBuilder;
            0    6     1  scope  Lorg/jruby/ir/IRScope;
            0    6     2   data  [Ljava/lang/Object;
            1    6     3    cfg  Lorg/jruby/ir/representations/CFG;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.Exception
    MethodParameters:
       Name  Flags
      scope  
      data   

  public boolean invalidate(org.jruby.ir.IRScope);
    descriptor: (Lorg/jruby/ir/IRScope;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
        start local 1 // org.jruby.ir.IRScope scope
         0: .line 36
            iconst_0
            ireturn
        end local 1 // org.jruby.ir.IRScope scope
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/jruby/ir/passes/DominatorTreeBuilder;
            0    1     1  scope  Lorg/jruby/ir/IRScope;
    MethodParameters:
       Name  Flags
      scope  

  public void buildDominatorTree(org.jruby.ir.representations.CFG, java.util.LinkedList<org.jruby.ir.representations.BasicBlock>, );
    descriptor: (Lorg/jruby/ir/representations/CFG;Ljava/util/LinkedList;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=21, args_size=4
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
        start local 1 // org.jruby.ir.representations.CFG cfg
        start local 2 // java.util.LinkedList postOrderList
        start local 3 // int maxNodeId
         0: .line 40
            iload 3 /* maxNodeId */
            iconst_1
            iadd
            newarray 10
            astore 4 /* bbToPoNumbers */
        start local 4 // int[] bbToPoNumbers
         1: .line 41
            iload 3 /* maxNodeId */
            iconst_1
            iadd
            anewarray org.jruby.ir.representations.BasicBlock
            astore 5 /* poNumbersToBB */
        start local 5 // org.jruby.ir.representations.BasicBlock[] poNumbersToBB
         2: .line 42
            iconst_0
            istore 6 /* n */
        start local 6 // int n
         3: .line 43
            aload 2 /* postOrderList */
            invokevirtual java.util.LinkedList.listIterator:()Ljava/util/ListIterator;
            astore 7 /* it */
        start local 7 // java.util.ListIterator it
         4: .line 44
            goto 9
         5: .line 45
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator
      StackMap stack:
            aload 7 /* it */
            invokeinterface java.util.ListIterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.representations.BasicBlock
            astore 8 /* b */
        start local 8 // org.jruby.ir.representations.BasicBlock b
         6: .line 46
            aload 4 /* bbToPoNumbers */
            aload 8 /* b */
            invokevirtual org.jruby.ir.representations.BasicBlock.getID:()I
            iload 6 /* n */
            iastore
         7: .line 47
            aload 5 /* poNumbersToBB */
            iload 6 /* n */
            aload 8 /* b */
            aastore
         8: .line 48
            iinc 6 /* n */ 1
        end local 8 // org.jruby.ir.representations.BasicBlock b
         9: .line 44
      StackMap locals:
      StackMap stack:
            aload 7 /* it */
            invokeinterface java.util.ListIterator.hasNext:()Z
            ifne 5
        10: .line 59
            iload 3 /* maxNodeId */
            iconst_1
            iadd
            newarray 10
            astore 8 /* idoms */
        start local 8 // int[] idoms
        11: .line 61
            aload 1 /* cfg */
            invokevirtual org.jruby.ir.representations.CFG.getEntryBB:()Lorg/jruby/ir/representations/BasicBlock;
            astore 9 /* root */
        start local 9 // org.jruby.ir.representations.BasicBlock root
        12: .line 62
            aload 4 /* bbToPoNumbers */
            aload 9 /* root */
            invokevirtual org.jruby.ir.representations.BasicBlock.getID:()I
            iaload
            istore 10 /* rootPoNumber */
        start local 10 // int rootPoNumber
        13: .line 63
            aload 8 /* idoms */
            iload 10 /* rootPoNumber */
            iload 10 /* rootPoNumber */
            iastore
        14: .line 65
            iconst_1
            istore 11 /* changed */
        start local 11 // boolean changed
        15: .line 66
            goto 44
        16: .line 67
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator int[] org.jruby.ir.representations.BasicBlock int int
      StackMap stack:
            iconst_0
            istore 11 /* changed */
        17: .line 68
            aload 2 /* postOrderList */
            aload 1 /* cfg */
            invokevirtual org.jruby.ir.representations.CFG.size:()I
            invokevirtual java.util.LinkedList.listIterator:(I)Ljava/util/ListIterator;
            astore 7 /* it */
        18: .line 69
            goto 43
        19: .line 70
      StackMap locals:
      StackMap stack:
            aload 7 /* it */
            invokeinterface java.util.ListIterator.previous:()Ljava/lang/Object;
            checkcast org.jruby.ir.representations.BasicBlock
            astore 12 /* b */
        start local 12 // org.jruby.ir.representations.BasicBlock b
        20: .line 71
            aload 12 /* b */
            aload 9 /* root */
            if_acmpne 21
            goto 43
        21: .line 74
      StackMap locals: org.jruby.ir.representations.BasicBlock
      StackMap stack:
            aload 4 /* bbToPoNumbers */
            aload 12 /* b */
            invokevirtual org.jruby.ir.representations.BasicBlock.getID:()I
            iaload
            istore 13 /* bPoNumber */
        start local 13 // int bPoNumber
        22: .line 75
            aload 8 /* idoms */
            iload 13 /* bPoNumber */
            iaload
            istore 14 /* oldBIdom */
        start local 14 // int oldBIdom
        23: .line 76
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.NULL:I
            istore 15 /* newBIdom */
        start local 15 // int newBIdom
        24: .line 79
            aload 1 /* cfg */
            aload 12 /* b */
            invokevirtual org.jruby.ir.representations.CFG.getIncomingSources:(Lorg/jruby/ir/representations/BasicBlock;)Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 17
            goto 30
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator int[] org.jruby.ir.representations.BasicBlock int int org.jruby.ir.representations.BasicBlock int int int top java.util.Iterator
      StackMap stack:
        25: aload 17
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.representations.BasicBlock
            astore 16 /* src */
        start local 16 // org.jruby.ir.representations.BasicBlock src
        26: .line 80
            aload 4 /* bbToPoNumbers */
            aload 16 /* src */
            invokevirtual org.jruby.ir.representations.BasicBlock.getID:()I
            iaload
            istore 18 /* srcPoNumber */
        start local 18 // int srcPoNumber
        27: .line 82
            aload 8 /* idoms */
            iload 18 /* srcPoNumber */
            iaload
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.NULL:I
            if_icmpeq 30
        28: .line 84
            iload 18 /* srcPoNumber */
            istore 15 /* newBIdom */
        29: .line 85
            goto 31
        end local 18 // int srcPoNumber
        end local 16 // org.jruby.ir.representations.BasicBlock src
        30: .line 79
      StackMap locals:
      StackMap stack:
            aload 17
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 25
        31: .line 90
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator int[] org.jruby.ir.representations.BasicBlock int int org.jruby.ir.representations.BasicBlock int int int
      StackMap stack:
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.$assertionsDisabled:Z
            ifne 32
            iload 15 /* newBIdom */
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.NULL:I
            if_icmpne 32
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        32: .line 93
      StackMap locals:
      StackMap stack:
            iload 15 /* newBIdom */
            istore 16 /* processedPred */
        start local 16 // int processedPred
        33: .line 94
            aload 1 /* cfg */
            aload 12 /* b */
            invokevirtual org.jruby.ir.representations.CFG.getIncomingSources:(Lorg/jruby/ir/representations/BasicBlock;)Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 18
            goto 39
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator int[] org.jruby.ir.representations.BasicBlock int int org.jruby.ir.representations.BasicBlock int int int int top java.util.Iterator
      StackMap stack:
        34: aload 18
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.ir.representations.BasicBlock
            astore 17 /* src */
        start local 17 // org.jruby.ir.representations.BasicBlock src
        35: .line 96
            aload 4 /* bbToPoNumbers */
            aload 17 /* src */
            invokevirtual org.jruby.ir.representations.BasicBlock.getID:()I
            iaload
            istore 19 /* srcPoNumber */
        start local 19 // int srcPoNumber
        36: .line 97
            aload 8 /* idoms */
            iload 19 /* srcPoNumber */
            iaload
            istore 20 /* srcIdom */
        start local 20 // int srcIdom
        37: .line 98
            iload 20 /* srcIdom */
            getstatic org.jruby.ir.passes.DominatorTreeBuilder.NULL:I
            if_icmpeq 39
            iload 19 /* srcPoNumber */
            iload 16 /* processedPred */
            if_icmpeq 39
        38: .line 100
            aload 0 /* this */
            aload 8 /* idoms */
            iload 19 /* srcPoNumber */
            iload 15 /* newBIdom */
            invokevirtual org.jruby.ir.passes.DominatorTreeBuilder.intersectDomSets:([III)I
            istore 15 /* newBIdom */
        end local 20 // int srcIdom
        end local 19 // int srcPoNumber
        end local 17 // org.jruby.ir.representations.BasicBlock src
        39: .line 94
      StackMap locals:
      StackMap stack:
            aload 18
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 34
        40: .line 106
            iload 14 /* oldBIdom */
            iload 15 /* newBIdom */
            if_icmpeq 43
        41: .line 107
            iconst_1
            istore 11 /* changed */
        42: .line 108
            aload 8 /* idoms */
            iload 13 /* bPoNumber */
            iload 15 /* newBIdom */
            iastore
        end local 16 // int processedPred
        end local 15 // int newBIdom
        end local 14 // int oldBIdom
        end local 13 // int bPoNumber
        end local 12 // org.jruby.ir.representations.BasicBlock b
        43: .line 69
      StackMap locals: org.jruby.ir.passes.DominatorTreeBuilder org.jruby.ir.representations.CFG java.util.LinkedList int int[] org.jruby.ir.representations.BasicBlock[] int java.util.ListIterator int[] org.jruby.ir.representations.BasicBlock int int
      StackMap stack:
            aload 7 /* it */
            invokeinterface java.util.ListIterator.hasPrevious:()Z
            ifne 19
        44: .line 66
      StackMap locals:
      StackMap stack:
            iload 11 /* changed */
            ifne 16
        45: .line 115
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 12 /* idomMap */
        start local 12 // java.util.Map idomMap
        46: .line 116
            iconst_0
            istore 13 /* i */
        start local 13 // int i
        47: goto 50
        48: .line 117
      StackMap locals: java.util.Map int
      StackMap stack:
            aload 12 /* idomMap */
            aload 5 /* poNumbersToBB */
            iload 13 /* i */
            aaload
            aload 5 /* poNumbersToBB */
            aload 8 /* idoms */
            iload 13 /* i */
            iaload
            aaload
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        49: .line 116
            iinc 13 /* i */ 1
      StackMap locals:
      StackMap stack:
        50: iload 13 /* i */
            iload 3 /* maxNodeId */
            if_icmplt 48
        end local 13 // int i
        51: .line 120
            return
        end local 12 // java.util.Map idomMap
        end local 11 // boolean changed
        end local 10 // int rootPoNumber
        end local 9 // org.jruby.ir.representations.BasicBlock root
        end local 8 // int[] idoms
        end local 7 // java.util.ListIterator it
        end local 6 // int n
        end local 5 // org.jruby.ir.representations.BasicBlock[] poNumbersToBB
        end local 4 // int[] bbToPoNumbers
        end local 3 // int maxNodeId
        end local 2 // java.util.LinkedList postOrderList
        end local 1 // org.jruby.ir.representations.CFG cfg
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   52     0           this  Lorg/jruby/ir/passes/DominatorTreeBuilder;
            0   52     1            cfg  Lorg/jruby/ir/representations/CFG;
            0   52     2  postOrderList  Ljava/util/LinkedList<Lorg/jruby/ir/representations/BasicBlock;>;
            0   52     3      maxNodeId  I
            1   52     4  bbToPoNumbers  [I
            2   52     5  poNumbersToBB  [Lorg/jruby/ir/representations/BasicBlock;
            3   52     6              n  I
            4   52     7             it  Ljava/util/ListIterator<Lorg/jruby/ir/representations/BasicBlock;>;
            6    9     8              b  Lorg/jruby/ir/representations/BasicBlock;
           11   52     8          idoms  [I
           12   52     9           root  Lorg/jruby/ir/representations/BasicBlock;
           13   52    10   rootPoNumber  I
           15   52    11        changed  Z
           20   43    12              b  Lorg/jruby/ir/representations/BasicBlock;
           22   43    13      bPoNumber  I
           23   43    14       oldBIdom  I
           24   43    15       newBIdom  I
           26   30    16            src  Lorg/jruby/ir/representations/BasicBlock;
           27   30    18    srcPoNumber  I
           33   43    16  processedPred  I
           35   39    17            src  Lorg/jruby/ir/representations/BasicBlock;
           36   39    19    srcPoNumber  I
           37   39    20        srcIdom  I
           46   52    12        idomMap  Ljava/util/Map<Lorg/jruby/ir/representations/BasicBlock;Lorg/jruby/ir/representations/BasicBlock;>;
           47   51    13              i  I
    Signature: (Lorg/jruby/ir/representations/CFG;Ljava/util/LinkedList<Lorg/jruby/ir/representations/BasicBlock;>;I)V
    MethodParameters:
               Name  Flags
      cfg            
      postOrderList  
      maxNodeId      

  private int intersectDomSets(int[], int, int);
    descriptor: ([III)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
        start local 1 // int[] idomMap
        start local 2 // int nb1
        start local 3 // int nb2
         0: .line 123
            goto 6
         1: .line 125
      StackMap locals:
      StackMap stack:
            aload 1 /* idomMap */
            iload 2 /* nb1 */
            iaload
            istore 2 /* nb1 */
         2: .line 124
      StackMap locals:
      StackMap stack:
            iload 2 /* nb1 */
            iload 3 /* nb2 */
            if_icmplt 1
         3: .line 127
            goto 5
         4: .line 128
      StackMap locals:
      StackMap stack:
            aload 1 /* idomMap */
            iload 3 /* nb2 */
            iaload
            istore 3 /* nb2 */
         5: .line 127
      StackMap locals:
      StackMap stack:
            iload 3 /* nb2 */
            iload 2 /* nb1 */
            if_icmplt 4
         6: .line 123
      StackMap locals:
      StackMap stack:
            iload 2 /* nb1 */
            iload 3 /* nb2 */
            if_icmpne 2
         7: .line 132
            iload 2 /* nb1 */
            ireturn
        end local 3 // int nb2
        end local 2 // int nb1
        end local 1 // int[] idomMap
        end local 0 // org.jruby.ir.passes.DominatorTreeBuilder this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lorg/jruby/ir/passes/DominatorTreeBuilder;
            0    8     1  idomMap  [I
            0    8     2      nb1  I
            0    8     3      nb2  I
    MethodParameters:
         Name  Flags
      idomMap  
      nb1      
      nb2      
}
SourceFile: "DominatorTreeBuilder.java"