public class org.graalvm.compiler.phases.common.LockEliminationPhase extends org.graalvm.compiler.phases.Phase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.graalvm.compiler.phases.common.LockEliminationPhase
  super_class: org.graalvm.compiler.phases.Phase
{
  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 38
            ldc Lorg/graalvm/compiler/phases/common/LockEliminationPhase;
            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.phases.common.LockEliminationPhase.$assertionsDisabled:Z
            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.graalvm.compiler.phases.common.LockEliminationPhase this
         0: .line 38
            aload 0 /* this */
            invokespecial org.graalvm.compiler.phases.Phase.<init>:()V
            return
        end local 0 // org.graalvm.compiler.phases.common.LockEliminationPhase this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/compiler/phases/common/LockEliminationPhase;

  protected void run(org.graalvm.compiler.nodes.StructuredGraph);
    descriptor: (Lorg/graalvm/compiler/nodes/StructuredGraph;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=8, args_size=2
        start local 0 // org.graalvm.compiler.phases.common.LockEliminationPhase this
        start local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
         0: .line 42
            aload 1 /* graph */
            getstatic org.graalvm.compiler.nodes.java.MonitorExitNode.TYPE:Lorg/graalvm/compiler/graph/NodeClass;
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getNodes:(Lorg/graalvm/compiler/graph/NodeClass;)Lorg/graalvm/compiler/graph/iterators/NodeIterable;
            invokeinterface org.graalvm.compiler.graph.iterators.NodeIterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 13
      StackMap locals: org.graalvm.compiler.phases.common.LockEliminationPhase 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.java.MonitorExitNode
            astore 2 /* monitorExitNode */
        start local 2 // org.graalvm.compiler.nodes.java.MonitorExitNode monitorExitNode
         2: .line 43
            aload 2 /* monitorExitNode */
            invokevirtual org.graalvm.compiler.nodes.java.MonitorExitNode.next:()Lorg/graalvm/compiler/nodes/FixedNode;
            astore 4 /* next */
        start local 4 // org.graalvm.compiler.nodes.FixedNode next
         3: .line 44
            aload 4 /* next */
            instanceof org.graalvm.compiler.nodes.java.MonitorEnterNode
            ifeq 13
         4: .line 47
            getstatic org.graalvm.compiler.phases.common.LockEliminationPhase.$assertionsDisabled:Z
            ifne 5
            aload 4 /* next */
            instanceof org.graalvm.compiler.nodes.extended.OSRMonitorEnterNode
            ifeq 5
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         5: .line 48
      StackMap locals: org.graalvm.compiler.phases.common.LockEliminationPhase org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.nodes.java.MonitorExitNode java.util.Iterator org.graalvm.compiler.nodes.FixedNode
      StackMap stack:
            aload 4 /* next */
            checkcast org.graalvm.compiler.nodes.java.AccessMonitorNode
            astore 5 /* monitorEnterNode */
        start local 5 // org.graalvm.compiler.nodes.java.AccessMonitorNode monitorEnterNode
         6: .line 49
            aload 5 /* monitorEnterNode */
            aload 2 /* monitorExitNode */
            invokestatic org.graalvm.compiler.phases.common.LockEliminationPhase.isCompatibleLock:(Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;)Z
            ifeq 13
         7: .line 54
            aload 5 /* monitorEnterNode */
            invokevirtual org.graalvm.compiler.nodes.java.AccessMonitorNode.getMonitorId:()Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
            astore 6 /* enterId */
        start local 6 // org.graalvm.compiler.nodes.java.MonitorIdNode enterId
         8: .line 55
            aload 2 /* monitorExitNode */
            invokevirtual org.graalvm.compiler.nodes.java.MonitorExitNode.getMonitorId:()Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
            astore 7 /* exitId */
        start local 7 // org.graalvm.compiler.nodes.java.MonitorIdNode exitId
         9: .line 56
            aload 6 /* enterId */
            aload 7 /* exitId */
            if_acmpeq 11
        10: .line 57
            aload 6 /* enterId */
            aload 7 /* exitId */
            invokevirtual org.graalvm.compiler.nodes.java.MonitorIdNode.replaceAndDelete:(Lorg/graalvm/compiler/graph/Node;)V
        11: .line 59
      StackMap locals: org.graalvm.compiler.nodes.java.AccessMonitorNode org.graalvm.compiler.nodes.java.MonitorIdNode org.graalvm.compiler.nodes.java.MonitorIdNode
      StackMap stack:
            aload 5 /* monitorEnterNode */
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.removeFixedWithUnusedInputs:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;)V
        12: .line 60
            aload 2 /* monitorExitNode */
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.removeFixedWithUnusedInputs:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;)V
        end local 7 // org.graalvm.compiler.nodes.java.MonitorIdNode exitId
        end local 6 // org.graalvm.compiler.nodes.java.MonitorIdNode enterId
        end local 5 // org.graalvm.compiler.nodes.java.AccessMonitorNode monitorEnterNode
        end local 4 // org.graalvm.compiler.nodes.FixedNode next
        end local 2 // org.graalvm.compiler.nodes.java.MonitorExitNode monitorExitNode
        13: .line 42
      StackMap locals: org.graalvm.compiler.phases.common.LockEliminationPhase org.graalvm.compiler.nodes.StructuredGraph top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        14: .line 64
            return
        end local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 0 // org.graalvm.compiler.phases.common.LockEliminationPhase this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   15     0              this  Lorg/graalvm/compiler/phases/common/LockEliminationPhase;
            0   15     1             graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            2   13     2   monitorExitNode  Lorg/graalvm/compiler/nodes/java/MonitorExitNode;
            3   13     4              next  Lorg/graalvm/compiler/nodes/FixedNode;
            6   13     5  monitorEnterNode  Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;
            8   13     6           enterId  Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
            9   13     7            exitId  Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
    MethodParameters:
       Name  Flags
      graph  

  public static boolean isCompatibleLock(org.graalvm.compiler.nodes.java.AccessMonitorNode, org.graalvm.compiler.nodes.java.AccessMonitorNode);
    descriptor: (Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.graalvm.compiler.nodes.java.AccessMonitorNode lock1
        start local 1 // org.graalvm.compiler.nodes.java.AccessMonitorNode lock2
         0: .line 75
            aload 0 /* lock1 */
            invokevirtual org.graalvm.compiler.nodes.java.AccessMonitorNode.object:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.unproxify:(Lorg/graalvm/compiler/nodes/ValueNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            astore 2 /* object1 */
        start local 2 // org.graalvm.compiler.nodes.ValueNode object1
         1: .line 76
            aload 1 /* lock2 */
            invokevirtual org.graalvm.compiler.nodes.java.AccessMonitorNode.object:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.unproxify:(Lorg/graalvm/compiler/nodes/ValueNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            astore 3 /* object2 */
        start local 3 // org.graalvm.compiler.nodes.ValueNode object2
         2: .line 77
            aload 2 /* object1 */
            aload 3 /* object2 */
            if_acmpne 3
            aload 0 /* lock1 */
            invokevirtual org.graalvm.compiler.nodes.java.AccessMonitorNode.getMonitorId:()Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
            invokevirtual org.graalvm.compiler.nodes.java.MonitorIdNode.getLockDepth:()I
            aload 1 /* lock2 */
            invokevirtual org.graalvm.compiler.nodes.java.AccessMonitorNode.getMonitorId:()Lorg/graalvm/compiler/nodes/java/MonitorIdNode;
            invokevirtual org.graalvm.compiler.nodes.java.MonitorIdNode.getLockDepth:()I
            if_icmpne 3
            iconst_1
            ireturn
      StackMap locals: org.graalvm.compiler.nodes.ValueNode org.graalvm.compiler.nodes.ValueNode
      StackMap stack:
         3: iconst_0
            ireturn
        end local 3 // org.graalvm.compiler.nodes.ValueNode object2
        end local 2 // org.graalvm.compiler.nodes.ValueNode object1
        end local 1 // org.graalvm.compiler.nodes.java.AccessMonitorNode lock2
        end local 0 // org.graalvm.compiler.nodes.java.AccessMonitorNode lock1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0    lock1  Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;
            0    4     1    lock2  Lorg/graalvm/compiler/nodes/java/AccessMonitorNode;
            1    4     2  object1  Lorg/graalvm/compiler/nodes/ValueNode;
            2    4     3  object2  Lorg/graalvm/compiler/nodes/ValueNode;
    MethodParameters:
       Name  Flags
      lock1  
      lock2  
}
SourceFile: "LockEliminationPhase.java"