public final class com.oracle.truffle.llvm.parser.LLVMPhiManager
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.llvm.parser.LLVMPhiManager
  super_class: java.lang.Object
{
  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 47
            ldc Lcom/oracle/truffle/llvm/parser/LLVMPhiManager;
            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 com.oracle.truffle.llvm.parser.LLVMPhiManager.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.parser.LLVMPhiManager this
         0: .line 49
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 50
            return
        end local 0 // com.oracle.truffle.llvm.parser.LLVMPhiManager this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/llvm/parser/LLVMPhiManager;

  public static java.util.Map<com.oracle.truffle.llvm.parser.model.blocks.InstructionBlock, java.util.List<com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi>> getPhis(com.oracle.truffle.llvm.parser.model.functions.FunctionDefinition);
    descriptor: (Lcom/oracle/truffle/llvm/parser/model/functions/FunctionDefinition;)Ljava/util/Map;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // com.oracle.truffle.llvm.parser.model.functions.FunctionDefinition function
         0: .line 53
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 1 /* phiMap */
        start local 1 // java.util.Map phiMap
         1: .line 54
            aload 0 /* function */
            new com.oracle.truffle.llvm.parser.LLVMPhiManager$LLVMPhiManagerFunctionVisitor
            dup
            aload 1 /* phiMap */
            invokespecial com.oracle.truffle.llvm.parser.LLVMPhiManager$LLVMPhiManagerFunctionVisitor.<init>:(Ljava/util/Map;)V
            invokevirtual com.oracle.truffle.llvm.parser.model.functions.FunctionDefinition.accept:(Lcom/oracle/truffle/llvm/parser/model/visitors/FunctionVisitor;)V
         2: .line 55
            aload 1 /* phiMap */
            areturn
        end local 1 // java.util.Map phiMap
        end local 0 // com.oracle.truffle.llvm.parser.model.functions.FunctionDefinition function
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0  function  Lcom/oracle/truffle/llvm/parser/model/functions/FunctionDefinition;
            1    3     1    phiMap  Ljava/util/Map<Lcom/oracle/truffle/llvm/parser/model/blocks/InstructionBlock;Ljava/util/List<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;>;
    Signature: (Lcom/oracle/truffle/llvm/parser/model/functions/FunctionDefinition;)Ljava/util/Map<Lcom/oracle/truffle/llvm/parser/model/blocks/InstructionBlock;Ljava/util/List<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;>;
    MethodParameters:
          Name  Flags
      function  

  public static java.util.ArrayList<com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi>[] getPhisForSuccessors(com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction, java.util.List<com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi>);
    descriptor: (Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;Ljava/util/List;)[Ljava/util/ArrayList;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction terminatingInstruction
        start local 1 // java.util.List phis
         0: .line 115
            getstatic com.oracle.truffle.llvm.parser.LLVMPhiManager.$assertionsDisabled:Z
            ifne 1
            aload 1 /* phis */
            ifnonnull 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 117
      StackMap locals:
      StackMap stack:
            aload 0 /* terminatingInstruction */
            invokeinterface com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction.getSuccessorCount:()I
            anewarray java.util.ArrayList
            astore 2 /* phisPerSuccessor */
        start local 2 // java.util.ArrayList[] phisPerSuccessor
         2: .line 118
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         3: goto 6
         4: .line 119
      StackMap locals: java.util.ArrayList[] int
      StackMap stack:
            aload 2 /* phisPerSuccessor */
            iload 3 /* i */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            aastore
         5: .line 118
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         6: iload 3 /* i */
            aload 2 /* phisPerSuccessor */
            arraylength
            if_icmplt 4
        end local 3 // int i
         7: .line 122
            aload 1 /* phis */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 10
      StackMap locals: com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction java.util.List java.util.ArrayList[] top java.util.Iterator
      StackMap stack:
         8: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi
            astore 3 /* phi */
        start local 3 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
         9: .line 123
            aload 0 /* terminatingInstruction */
            aload 3 /* phi */
            aload 2 /* phisPerSuccessor */
            invokestatic com.oracle.truffle.llvm.parser.LLVMPhiManager.assignPhiToSuccessor:(Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;[Ljava/util/ArrayList;)V
        end local 3 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
        10: .line 122
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        11: .line 125
            aload 2 /* phisPerSuccessor */
            areturn
        end local 2 // java.util.ArrayList[] phisPerSuccessor
        end local 1 // java.util.List phis
        end local 0 // com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction terminatingInstruction
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   12     0  terminatingInstruction  Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;
            0   12     1                    phis  Ljava/util/List<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;
            2   12     2        phisPerSuccessor  [Ljava/util/ArrayList;
            3    7     3                       i  I
            9   10     3                     phi  Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;
    Signature: (Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;Ljava/util/List<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;)[Ljava/util/ArrayList<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;
    MethodParameters:
                        Name  Flags
      terminatingInstruction  
      phis                    

  private static void assignPhiToSuccessor(com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction, com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi, java.util.ArrayList<com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi>[]);
    descriptor: (Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;[Ljava/util/ArrayList;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction terminatingInstruction
        start local 1 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
        start local 2 // java.util.ArrayList[] phisPerSuccessor
         0: .line 129
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         1: goto 8
         2: .line 130
      StackMap locals: int
      StackMap stack:
            aload 0 /* terminatingInstruction */
            iload 3 /* i */
            invokeinterface com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction.getSuccessor:(I)Lcom/oracle/truffle/llvm/parser/model/blocks/InstructionBlock;
            aload 1 /* phi */
            invokevirtual com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi.getBlock:()Lcom/oracle/truffle/llvm/parser/model/blocks/InstructionBlock;
            if_acmpne 7
         3: .line 131
            aload 2 /* phisPerSuccessor */
            iload 3 /* i */
            aaload
            astore 4 /* phis */
        start local 4 // java.util.ArrayList phis
         4: .line 132
            aload 4 /* phis */
            aload 1 /* phi */
            invokestatic com.oracle.truffle.llvm.parser.LLVMPhiManager.hasMatchingPhi:(Ljava/util/ArrayList;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;)Z
            ifne 7
         5: .line 133
            aload 4 /* phis */
            aload 1 /* phi */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
         6: .line 134
            return
        end local 4 // java.util.ArrayList phis
         7: .line 129
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 3 /* i */
            aload 0 /* terminatingInstruction */
            invokeinterface com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction.getSuccessorCount:()I
            if_icmplt 2
        end local 3 // int i
         9: .line 138
            new com.oracle.truffle.llvm.runtime.except.LLVMParserException
            dup
            ldc "Could not find a matching successor for a phi."
            invokespecial com.oracle.truffle.llvm.runtime.except.LLVMParserException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.util.ArrayList[] phisPerSuccessor
        end local 1 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
        end local 0 // com.oracle.truffle.llvm.parser.model.symbols.instructions.TerminatingInstruction terminatingInstruction
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   10     0  terminatingInstruction  Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;
            0   10     1                     phi  Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;
            0   10     2        phisPerSuccessor  [Ljava/util/ArrayList;
            1    9     3                       i  I
            4    7     4                    phis  Ljava/util/ArrayList<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;
    Signature: (Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/TerminatingInstruction;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;[Ljava/util/ArrayList<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;)V
    MethodParameters:
                        Name  Flags
      terminatingInstruction  
      phi                     
      phisPerSuccessor        

  private static boolean hasMatchingPhi(java.util.ArrayList<com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi>, com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi);
    descriptor: (Ljava/util/ArrayList;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // java.util.ArrayList possiblePhiList
        start local 1 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
         0: .line 142
            aload 0 /* possiblePhiList */
            invokevirtual java.util.ArrayList.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: java.util.ArrayList com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi
            astore 2 /* possiblePhi */
        start local 2 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi possiblePhi
         2: .line 143
            aload 2 /* possiblePhi */
            invokevirtual com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi.getPhiValue:()Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/PhiInstruction;
            aload 1 /* phi */
            invokevirtual com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi.getPhiValue:()Lcom/oracle/truffle/llvm/parser/model/symbols/instructions/PhiInstruction;
            if_acmpne 4
         3: .line 147
            iconst_1
            ireturn
        end local 2 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi possiblePhi
         4: .line 142
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 150
            iconst_0
            ireturn
        end local 1 // com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi phi
        end local 0 // java.util.ArrayList possiblePhiList
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0  possiblePhiList  Ljava/util/ArrayList<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;
            0    6     1              phi  Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;
            2    4     2      possiblePhi  Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;
    Signature: (Ljava/util/ArrayList<Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;>;Lcom/oracle/truffle/llvm/parser/LLVMPhiManager$Phi;)Z
    MethodParameters:
                 Name  Flags
      possiblePhiList  
      phi              
}
SourceFile: "LLVMPhiManager.java"
NestMembers:
  com.oracle.truffle.llvm.parser.LLVMPhiManager$LLVMPhiManagerFunctionVisitor  com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi
InnerClasses:
  private LLVMPhiManagerFunctionVisitor = com.oracle.truffle.llvm.parser.LLVMPhiManager$LLVMPhiManagerFunctionVisitor of com.oracle.truffle.llvm.parser.LLVMPhiManager
  public final Phi = com.oracle.truffle.llvm.parser.LLVMPhiManager$Phi of com.oracle.truffle.llvm.parser.LLVMPhiManager