public class com.oracle.svm.truffle.api.TruffleBoundaryPhase extends org.graalvm.compiler.phases.Phase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.svm.truffle.api.TruffleBoundaryPhase
  super_class: org.graalvm.compiler.phases.Phase
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.truffle.api.TruffleBoundaryPhase this
         0: .line 54
            aload 0 /* this */
            invokespecial org.graalvm.compiler.phases.Phase.<init>:()V
            return
        end local 0 // com.oracle.svm.truffle.api.TruffleBoundaryPhase this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/truffle/api/TruffleBoundaryPhase;

  protected void run(org.graalvm.compiler.nodes.StructuredGraph);
    descriptor: (Lorg/graalvm/compiler/nodes/StructuredGraph;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=9, args_size=2
        start local 0 // com.oracle.svm.truffle.api.TruffleBoundaryPhase this
        start local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
         0: .line 59
            aload 1 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getInvokes:()Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 12
      StackMap locals: com.oracle.svm.truffle.api.TruffleBoundaryPhase org.graalvm.compiler.nodes.StructuredGraph top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.nodes.Invoke
            astore 2 /* n */
        start local 2 // org.graalvm.compiler.nodes.Invoke n
         2: .line 60
            aload 2 /* n */
            instanceof org.graalvm.compiler.nodes.InvokeWithExceptionNode
            ifeq 12
         3: .line 61
            aload 2 /* n */
            checkcast org.graalvm.compiler.nodes.InvokeWithExceptionNode
            astore 4 /* invoke */
        start local 4 // org.graalvm.compiler.nodes.InvokeWithExceptionNode invoke
         4: .line 62
            aload 4 /* invoke */
            invokevirtual org.graalvm.compiler.nodes.InvokeWithExceptionNode.exceptionEdge:()Lorg/graalvm/compiler/nodes/AbstractBeginNode;
            checkcast org.graalvm.compiler.nodes.java.ExceptionObjectNode
            astore 5 /* exceptionObject */
        start local 5 // org.graalvm.compiler.nodes.java.ExceptionObjectNode exceptionObject
         5: .line 64
            aload 5 /* exceptionObject */
            invokevirtual org.graalvm.compiler.nodes.java.ExceptionObjectNode.next:()Lorg/graalvm/compiler/nodes/FixedNode;
            astore 6 /* originalNext */
        start local 6 // org.graalvm.compiler.nodes.FixedNode originalNext
         6: .line 65
            aload 6 /* originalNext */
            instanceof org.graalvm.compiler.nodes.DeoptimizeNode
            ifne 12
            aload 4 /* invoke */
            invokevirtual org.graalvm.compiler.nodes.InvokeWithExceptionNode.callTarget:()Lorg/graalvm/compiler/nodes/CallTargetNode;
            invokevirtual org.graalvm.compiler.nodes.CallTargetNode.targetMethod:()Ljdk/vm/ci/meta/ResolvedJavaMethod;
            ifnull 12
         7: .line 66
            aload 4 /* invoke */
            invokevirtual org.graalvm.compiler.nodes.InvokeWithExceptionNode.callTarget:()Lorg/graalvm/compiler/nodes/CallTargetNode;
            invokevirtual org.graalvm.compiler.nodes.CallTargetNode.targetMethod:()Ljdk/vm/ci/meta/ResolvedJavaMethod;
            astore 7 /* targetMethod */
        start local 7 // jdk.vm.ci.meta.ResolvedJavaMethod targetMethod
         8: .line 67
            aload 7 /* targetMethod */
            ldc Lcom/oracle/truffle/api/CompilerDirectives$TruffleBoundary;
            invokeinterface jdk.vm.ci.meta.ResolvedJavaMethod.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast com.oracle.truffle.api.CompilerDirectives$TruffleBoundary
            astore 8 /* truffleBoundary */
        start local 8 // com.oracle.truffle.api.CompilerDirectives$TruffleBoundary truffleBoundary
         9: .line 68
            aload 8 /* truffleBoundary */
            ifnull 12
        10: .line 69
            aload 8 /* truffleBoundary */
            invokeinterface com.oracle.truffle.api.CompilerDirectives$TruffleBoundary.transferToInterpreterOnException:()Z
            ifeq 12
        11: .line 70
            aload 1 /* graph */
            aload 6 /* originalNext */
            aload 7 /* targetMethod */
            invokestatic com.oracle.svm.truffle.api.TruffleBoundaryPhase.addDeoptimizeNode:(Lorg/graalvm/compiler/nodes/StructuredGraph;Lorg/graalvm/compiler/nodes/FixedNode;Ljdk/vm/ci/meta/ResolvedJavaMethod;)V
        end local 8 // com.oracle.truffle.api.CompilerDirectives$TruffleBoundary truffleBoundary
        end local 7 // jdk.vm.ci.meta.ResolvedJavaMethod targetMethod
        end local 6 // org.graalvm.compiler.nodes.FixedNode originalNext
        end local 5 // org.graalvm.compiler.nodes.java.ExceptionObjectNode exceptionObject
        end local 4 // org.graalvm.compiler.nodes.InvokeWithExceptionNode invoke
        end local 2 // org.graalvm.compiler.nodes.Invoke n
        12: .line 59
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        13: .line 76
            return
        end local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 0 // com.oracle.svm.truffle.api.TruffleBoundaryPhase this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   14     0             this  Lcom/oracle/svm/truffle/api/TruffleBoundaryPhase;
            0   14     1            graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            2   12     2                n  Lorg/graalvm/compiler/nodes/Invoke;
            4   12     4           invoke  Lorg/graalvm/compiler/nodes/InvokeWithExceptionNode;
            5   12     5  exceptionObject  Lorg/graalvm/compiler/nodes/java/ExceptionObjectNode;
            6   12     6     originalNext  Lorg/graalvm/compiler/nodes/FixedNode;
            8   12     7     targetMethod  Ljdk/vm/ci/meta/ResolvedJavaMethod;
            9   12     8  truffleBoundary  Lcom/oracle/truffle/api/CompilerDirectives$TruffleBoundary;
    MethodParameters:
       Name  Flags
      graph  

  private static void addDeoptimizeNode(org.graalvm.compiler.nodes.StructuredGraph, org.graalvm.compiler.nodes.FixedNode, jdk.vm.ci.meta.ResolvedJavaMethod);
    descriptor: (Lorg/graalvm/compiler/nodes/StructuredGraph;Lorg/graalvm/compiler/nodes/FixedNode;Ljdk/vm/ci/meta/ResolvedJavaMethod;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=7, args_size=3
        start local 0 // org.graalvm.compiler.nodes.StructuredGraph graph
        start local 1 // org.graalvm.compiler.nodes.FixedNode originalNext
        start local 2 // jdk.vm.ci.meta.ResolvedJavaMethod targetMethod
         0: .line 79
            aload 0 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getSpeculationLog:()Ljdk/vm/ci/meta/SpeculationLog;
            astore 3 /* speculationLog */
        start local 3 // jdk.vm.ci.meta.SpeculationLog speculationLog
         1: .line 80
            aload 3 /* speculationLog */
            ifnull 8
         2: .line 81
            aload 2 /* targetMethod */
            invokestatic org.graalvm.compiler.truffle.compiler.PartialEvaluator.createTruffleBoundaryExceptionSpeculation:(Ljdk/vm/ci/meta/ResolvedJavaMethod;)Ljdk/vm/ci/meta/SpeculationLog$SpeculationReason;
            astore 4 /* speculationReason */
        start local 4 // jdk.vm.ci.meta.SpeculationLog$SpeculationReason speculationReason
         3: .line 82
            aload 3 /* speculationLog */
            aload 4 /* speculationReason */
            invokeinterface jdk.vm.ci.meta.SpeculationLog.maySpeculate:(Ljdk/vm/ci/meta/SpeculationLog$SpeculationReason;)Z
            ifeq 8
         4: .line 83
            aload 3 /* speculationLog */
            aload 4 /* speculationReason */
            invokeinterface jdk.vm.ci.meta.SpeculationLog.speculate:(Ljdk/vm/ci/meta/SpeculationLog$SpeculationReason;)Ljdk/vm/ci/meta/SpeculationLog$Speculation;
            astore 5 /* exceptionSpeculation */
        start local 5 // jdk.vm.ci.meta.SpeculationLog$Speculation exceptionSpeculation
         5: .line 84
            aload 0 /* graph */
            new org.graalvm.compiler.nodes.DeoptimizeNode
            dup
            getstatic jdk.vm.ci.meta.DeoptimizationAction.InvalidateRecompile:Ljdk/vm/ci/meta/DeoptimizationAction;
            getstatic jdk.vm.ci.meta.DeoptimizationReason.TransferToInterpreter:Ljdk/vm/ci/meta/DeoptimizationReason;
            aload 5 /* exceptionSpeculation */
            invokespecial org.graalvm.compiler.nodes.DeoptimizeNode.<init>:(Ljdk/vm/ci/meta/DeoptimizationAction;Ljdk/vm/ci/meta/DeoptimizationReason;Ljdk/vm/ci/meta/SpeculationLog$Speculation;)V
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.add:(Lorg/graalvm/compiler/graph/Node;)Lorg/graalvm/compiler/graph/Node;
            checkcast org.graalvm.compiler.nodes.DeoptimizeNode
            astore 6 /* deoptimize */
        start local 6 // org.graalvm.compiler.nodes.DeoptimizeNode deoptimize
         6: .line 85
            aload 1 /* originalNext */
            aload 6 /* deoptimize */
            invokevirtual org.graalvm.compiler.nodes.FixedNode.replaceAtPredecessor:(Lorg/graalvm/compiler/graph/Node;)V
         7: .line 86
            aload 1 /* originalNext */
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.killCFG:(Lorg/graalvm/compiler/nodes/FixedNode;)V
        end local 6 // org.graalvm.compiler.nodes.DeoptimizeNode deoptimize
        end local 5 // jdk.vm.ci.meta.SpeculationLog$Speculation exceptionSpeculation
        end local 4 // jdk.vm.ci.meta.SpeculationLog$SpeculationReason speculationReason
         8: .line 89
      StackMap locals: jdk.vm.ci.meta.SpeculationLog
      StackMap stack:
            return
        end local 3 // jdk.vm.ci.meta.SpeculationLog speculationLog
        end local 2 // jdk.vm.ci.meta.ResolvedJavaMethod targetMethod
        end local 1 // org.graalvm.compiler.nodes.FixedNode originalNext
        end local 0 // org.graalvm.compiler.nodes.StructuredGraph graph
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0    9     0                 graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            0    9     1          originalNext  Lorg/graalvm/compiler/nodes/FixedNode;
            0    9     2          targetMethod  Ljdk/vm/ci/meta/ResolvedJavaMethod;
            1    9     3        speculationLog  Ljdk/vm/ci/meta/SpeculationLog;
            3    8     4     speculationReason  Ljdk/vm/ci/meta/SpeculationLog$SpeculationReason;
            5    8     5  exceptionSpeculation  Ljdk/vm/ci/meta/SpeculationLog$Speculation;
            6    8     6            deoptimize  Lorg/graalvm/compiler/nodes/DeoptimizeNode;
    MethodParameters:
              Name  Flags
      graph         
      originalNext  
      targetMethod  
}
SourceFile: "TruffleBoundaryPhase.java"
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  public Speculation = jdk.vm.ci.meta.SpeculationLog$Speculation of jdk.vm.ci.meta.SpeculationLog
  public abstract SpeculationReason = jdk.vm.ci.meta.SpeculationLog$SpeculationReason of jdk.vm.ci.meta.SpeculationLog