public class org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase extends org.graalvm.compiler.phases.Phase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase
  super_class: org.graalvm.compiler.phases.Phase
{
  private final org.graalvm.compiler.hotspot.GraalHotSpotVMConfig config;
    descriptor: Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;
    flags: (0x0012) ACC_PRIVATE, 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 65
            ldc Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            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.hotspot.phases.WriteBarrierVerificationPhase.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.graalvm.compiler.hotspot.GraalHotSpotVMConfig);
    descriptor: (Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
        start local 1 // org.graalvm.compiler.hotspot.GraalHotSpotVMConfig config
         0: .line 69
            aload 0 /* this */
            invokespecial org.graalvm.compiler.phases.Phase.<init>:()V
         1: .line 70
            aload 0 /* this */
            aload 1 /* config */
            putfield org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.config:Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;
         2: .line 71
            return
        end local 1 // org.graalvm.compiler.hotspot.GraalHotSpotVMConfig config
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            0    3     1  config  Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;
    MethodParameters:
        Name  Flags
      config  

  protected void run(org.graalvm.compiler.nodes.StructuredGraph);
    descriptor: (Lorg/graalvm/compiler/nodes/StructuredGraph;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
        start local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
         0: .line 75
            aload 0 /* this */
            aload 1 /* graph */
            invokevirtual org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.processWrites:(Lorg/graalvm/compiler/nodes/StructuredGraph;)V
         1: .line 76
            return
        end local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            0    2     1  graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
    MethodParameters:
       Name  Flags
      graph  

  private void processWrites(org.graalvm.compiler.nodes.StructuredGraph);
    descriptor: (Lorg/graalvm/compiler/nodes/StructuredGraph;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=5, args_size=2
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
        start local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
         0: .line 79
            aload 1 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getNodes:()Lorg/graalvm/compiler/graph/iterators/NodeIterable;
            invokeinterface org.graalvm.compiler.graph.iterators.NodeIterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 8
      StackMap locals: org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase 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.graph.Node
            astore 2 /* node */
        start local 2 // org.graalvm.compiler.graph.Node node
         2: .line 80
            aload 2 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectWrite:(Lorg/graalvm/compiler/graph/Node;)Z
            ifne 3
            aload 2 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectArrayRangeWrite:(Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 8
         3: .line 81
      StackMap locals: org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.graph.Node java.util.Iterator
      StackMap stack:
            aload 2 /* node */
            instanceof org.graalvm.compiler.nodes.memory.WriteNode
            ifeq 7
         4: .line 82
            aload 2 /* node */
            checkcast org.graalvm.compiler.nodes.memory.WriteNode
            astore 4 /* writeNode */
        start local 4 // org.graalvm.compiler.nodes.memory.WriteNode writeNode
         5: .line 83
            aload 4 /* writeNode */
            invokevirtual org.graalvm.compiler.nodes.memory.WriteNode.value:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.isPointerAlwaysNull:(Lorg/graalvm/compiler/nodes/ValueNode;)Z
            ifeq 7
         6: .line 84
            goto 8
        end local 4 // org.graalvm.compiler.nodes.memory.WriteNode writeNode
         7: .line 87
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* node */
            invokevirtual org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.validateWrite:(Lorg/graalvm/compiler/graph/Node;)V
        end local 2 // org.graalvm.compiler.graph.Node node
         8: .line 79
      StackMap locals: org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase org.graalvm.compiler.nodes.StructuredGraph top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         9: .line 90
            return
        end local 1 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   10     0       this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            0   10     1      graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            2    8     2       node  Lorg/graalvm/compiler/graph/Node;
            5    7     4  writeNode  Lorg/graalvm/compiler/nodes/memory/WriteNode;
    MethodParameters:
       Name  Flags
      graph  

  private void validateWrite(org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/graph/Node;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
        start local 1 // org.graalvm.compiler.graph.Node write
         0: .line 97
            aload 0 /* this */
            aload 1 /* write */
            checkcast org.graalvm.compiler.nodes.FixedWithNextNode
            invokevirtual org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.hasAttachedBarrier:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;)Z
            ifeq 2
         1: .line 98
            return
         2: .line 100
      StackMap locals:
      StackMap stack:
            aload 1 /* write */
            invokevirtual org.graalvm.compiler.graph.Node.graph:()Lorg/graalvm/compiler/graph/Graph;
            invokevirtual org.graalvm.compiler.graph.Graph.createNodeFlood:()Lorg/graalvm/compiler/graph/NodeFlood;
            astore 2 /* frontier */
        start local 2 // org.graalvm.compiler.graph.NodeFlood frontier
         3: .line 101
            aload 2 /* frontier */
            aload 1 /* write */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.expandFrontier:(Lorg/graalvm/compiler/graph/NodeFlood;Lorg/graalvm/compiler/graph/Node;)V
         4: .line 102
            aload 2 /* frontier */
            invokevirtual org.graalvm.compiler.graph.NodeFlood.iterator:()Ljava/util/Iterator;
            astore 3 /* iterator */
        start local 3 // java.util.Iterator iterator
         5: .line 103
            goto 16
         6: .line 104
      StackMap locals: org.graalvm.compiler.graph.NodeFlood java.util.Iterator
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.graph.Node
            astore 4 /* currentNode */
        start local 4 // org.graalvm.compiler.graph.Node currentNode
         7: .line 105
            aload 4 /* currentNode */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isSafepoint:(Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 9
         8: .line 106
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Write barrier must be present "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* write */
            getstatic org.graalvm.compiler.nodeinfo.Verbosity.All:Lorg/graalvm/compiler/nodeinfo/Verbosity;
            invokevirtual org.graalvm.compiler.graph.Node.toString:(Lorg/graalvm/compiler/nodeinfo/Verbosity;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " / "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* write */
            invokevirtual org.graalvm.compiler.graph.Node.inputs:()Lorg/graalvm/compiler/graph/iterators/NodeIterable;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         9: .line 108
      StackMap locals: org.graalvm.compiler.graph.Node
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.useG1GC:()Z
            ifeq 13
        10: .line 109
            aload 4 /* currentNode */
            instanceof org.graalvm.compiler.hotspot.gc.g1.G1PostWriteBarrier
            ifeq 11
            aload 1 /* write */
            checkcast org.graalvm.compiler.nodes.memory.FixedAccessNode
            aload 4 /* currentNode */
            checkcast org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.validateBarrier:(Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;)Z
            ifne 16
        11: .line 110
      StackMap locals:
      StackMap stack:
            aload 2 /* frontier */
            aload 4 /* currentNode */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.expandFrontier:(Lorg/graalvm/compiler/graph/NodeFlood;Lorg/graalvm/compiler/graph/Node;)V
        12: .line 112
            goto 16
        13: .line 113
      StackMap locals:
      StackMap stack:
            aload 4 /* currentNode */
            instanceof org.graalvm.compiler.hotspot.gc.shared.SerialWriteBarrier
            ifeq 15
            aload 1 /* write */
            checkcast org.graalvm.compiler.nodes.memory.FixedAccessNode
            aload 4 /* currentNode */
            checkcast org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.validateBarrier:(Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;)Z
            ifeq 15
        14: .line 114
            aload 4 /* currentNode */
            instanceof org.graalvm.compiler.hotspot.gc.shared.SerialWriteBarrier
            ifeq 16
            aload 1 /* write */
            checkcast org.graalvm.compiler.nodes.memory.FixedAccessNode
            aload 4 /* currentNode */
            checkcast org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.validateBarrier:(Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;)Z
            ifne 16
        15: .line 115
      StackMap locals:
      StackMap stack:
            aload 2 /* frontier */
            aload 4 /* currentNode */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.expandFrontier:(Lorg/graalvm/compiler/graph/NodeFlood;Lorg/graalvm/compiler/graph/Node;)V
        end local 4 // org.graalvm.compiler.graph.Node currentNode
        16: .line 103
      StackMap locals:
      StackMap stack:
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        17: .line 119
            return
        end local 3 // java.util.Iterator iterator
        end local 2 // org.graalvm.compiler.graph.NodeFlood frontier
        end local 1 // org.graalvm.compiler.graph.Node write
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   18     0         this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            0   18     1        write  Lorg/graalvm/compiler/graph/Node;
            3   18     2     frontier  Lorg/graalvm/compiler/graph/NodeFlood;
            5   18     3     iterator  Ljava/util/Iterator<Lorg/graalvm/compiler/graph/Node;>;
            7   16     4  currentNode  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
       Name  Flags
      write  

  private boolean useG1GC();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
         0: .line 122
            aload 0 /* this */
            getfield org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.config:Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;
            getfield org.graalvm.compiler.hotspot.GraalHotSpotVMConfig.useG1GC:Z
            ireturn
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;

  private boolean hasAttachedBarrier(org.graalvm.compiler.nodes.FixedWithNextNode);
    descriptor: (Lorg/graalvm/compiler/nodes/FixedWithNextNode;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
        start local 1 // org.graalvm.compiler.nodes.FixedWithNextNode node
         0: .line 126
            aload 1 /* node */
            invokevirtual org.graalvm.compiler.nodes.FixedWithNextNode.next:()Lorg/graalvm/compiler/nodes/FixedNode;
            astore 2 /* next */
        start local 2 // org.graalvm.compiler.graph.Node next
         1: .line 127
            aload 1 /* node */
            invokevirtual org.graalvm.compiler.nodes.FixedWithNextNode.predecessor:()Lorg/graalvm/compiler/graph/Node;
            astore 3 /* previous */
        start local 3 // org.graalvm.compiler.graph.Node previous
         2: .line 128
            aload 0 /* this */
            invokevirtual org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.useG1GC:()Z
            ifeq 4
            aload 1 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectWrite:(Lorg/graalvm/compiler/graph/Node;)Z
            ifne 3
            aload 1 /* node */
            checkcast org.graalvm.compiler.nodes.extended.ArrayRangeWrite
            invokeinterface org.graalvm.compiler.nodes.extended.ArrayRangeWrite.isInitialization:()Z
            ifne 4
      StackMap locals: org.graalvm.compiler.graph.Node org.graalvm.compiler.graph.Node
      StackMap stack:
         3: iconst_1
            goto 5
      StackMap locals:
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: istore 4 /* validatePreBarrier */
        start local 4 // boolean validatePreBarrier
         6: .line 129
            aload 1 /* node */
            instanceof org.graalvm.compiler.nodes.memory.WriteNode
            ifeq 11
         7: .line 130
            aload 1 /* node */
            checkcast org.graalvm.compiler.nodes.memory.WriteNode
            astore 5 /* writeNode */
        start local 5 // org.graalvm.compiler.nodes.memory.WriteNode writeNode
         8: .line 131
            aload 0 /* this */
            getfield org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.config:Lorg/graalvm/compiler/hotspot/GraalHotSpotVMConfig;
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            pop
         9: .line 134
            aload 5 /* writeNode */
            invokevirtual org.graalvm.compiler.nodes.memory.WriteNode.getLocationIdentity:()Ljdk/internal/vm/compiler/word/LocationIdentity;
            invokevirtual jdk.internal.vm.compiler.word.LocationIdentity.isInit:()Z
            ifeq 11
        10: .line 135
            iconst_0
            istore 4 /* validatePreBarrier */
        end local 5 // org.graalvm.compiler.nodes.memory.WriteNode writeNode
        11: .line 138
      StackMap locals: int
      StackMap stack:
            aload 1 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectWrite:(Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 16
        12: .line 139
            aload 1 /* node */
            aload 2 /* next */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectBarrier:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
            ifne 13
            aload 1 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.getValueWritten:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.isPointerAlwaysNull:(Lorg/graalvm/compiler/nodes/ValueNode;)Z
            ifeq 15
      StackMap locals:
      StackMap stack:
        13: iload 4 /* validatePreBarrier */
            ifeq 14
            aload 1 /* node */
            aload 3 /* previous */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectBarrier:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 15
      StackMap locals:
      StackMap stack:
        14: iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
        15: iconst_0
            ireturn
        16: .line 140
      StackMap locals:
      StackMap stack:
            aload 1 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isObjectArrayRangeWrite:(Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 21
        17: .line 141
            aload 1 /* node */
            aload 2 /* next */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isArrayBarrier:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
            ifne 18
            aload 1 /* node */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.getValueWritten:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.isPointerAlwaysNull:(Lorg/graalvm/compiler/nodes/ValueNode;)Z
            ifeq 20
      StackMap locals:
      StackMap stack:
        18: iload 4 /* validatePreBarrier */
            ifeq 19
            aload 1 /* node */
            aload 3 /* previous */
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.isArrayBarrier:(Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
            ifeq 20
      StackMap locals:
      StackMap stack:
        19: iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
        20: iconst_0
            ireturn
        21: .line 143
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 4 // boolean validatePreBarrier
        end local 3 // org.graalvm.compiler.graph.Node previous
        end local 2 // org.graalvm.compiler.graph.Node next
        end local 1 // org.graalvm.compiler.nodes.FixedWithNextNode node
        end local 0 // org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   22     0                this  Lorg/graalvm/compiler/hotspot/phases/WriteBarrierVerificationPhase;
            0   22     1                node  Lorg/graalvm/compiler/nodes/FixedWithNextNode;
            1   22     2                next  Lorg/graalvm/compiler/graph/Node;
            2   22     3            previous  Lorg/graalvm/compiler/graph/Node;
            6   22     4  validatePreBarrier  Z
            8   11     5           writeNode  Lorg/graalvm/compiler/nodes/memory/WriteNode;
    MethodParameters:
      Name  Flags
      node  

  private static boolean isObjectBarrier(org.graalvm.compiler.nodes.FixedWithNextNode, org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.nodes.FixedWithNextNode node
        start local 1 // org.graalvm.compiler.graph.Node next
         0: .line 148
            aload 1 /* next */
            instanceof org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier
            ifeq 1
            aload 0 /* node */
            checkcast org.graalvm.compiler.nodes.memory.FixedAccessNode
            aload 1 /* next */
            checkcast org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier
            invokestatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.validateBarrier:(Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;)Z
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 1 // org.graalvm.compiler.graph.Node next
        end local 0 // org.graalvm.compiler.nodes.FixedWithNextNode node
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  node  Lorg/graalvm/compiler/nodes/FixedWithNextNode;
            0    2     1  next  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
      Name  Flags
      node  
      next  final

  private static boolean isArrayBarrier(org.graalvm.compiler.nodes.FixedWithNextNode, org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/nodes/FixedWithNextNode;Lorg/graalvm/compiler/graph/Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.nodes.FixedWithNextNode node
        start local 1 // org.graalvm.compiler.graph.Node next
         0: .line 152
            aload 1 /* next */
            instanceof org.graalvm.compiler.hotspot.gc.shared.ArrayRangeWriteBarrier
            ifeq 1
            aload 0 /* node */
            checkcast org.graalvm.compiler.nodes.extended.ArrayRangeWrite
            invokeinterface org.graalvm.compiler.nodes.extended.ArrayRangeWrite.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            aload 1 /* next */
            checkcast org.graalvm.compiler.hotspot.gc.shared.ArrayRangeWriteBarrier
            invokevirtual org.graalvm.compiler.hotspot.gc.shared.ArrayRangeWriteBarrier.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            if_acmpne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 1 // org.graalvm.compiler.graph.Node next
        end local 0 // org.graalvm.compiler.nodes.FixedWithNextNode node
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  node  Lorg/graalvm/compiler/nodes/FixedWithNextNode;
            0    2     1  next  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
      Name  Flags
      node  
      next  final

  private static boolean isObjectWrite(org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/graph/Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.graph.Node node
         0: .line 157
            aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.memory.FixedAccessNode
            ifeq 1
            aload 0 /* node */
            checkcast org.graalvm.compiler.nodes.memory.HeapAccess
            invokeinterface org.graalvm.compiler.nodes.memory.HeapAccess.getBarrierType:()Lorg/graalvm/compiler/nodes/memory/HeapAccess$BarrierType;
            getstatic org.graalvm.compiler.nodes.memory.HeapAccess$BarrierType.NONE:Lorg/graalvm/compiler/nodes/memory/HeapAccess$BarrierType;
            if_acmpeq 1
            aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.memory.ReadNode
            ifne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.graalvm.compiler.graph.Node node
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  node  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
      Name  Flags
      node  

  private static boolean isObjectArrayRangeWrite(org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/graph/Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.graph.Node node
         0: .line 161
            aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.extended.ArrayRangeWrite
            ifeq 1
            aload 0 /* node */
            checkcast org.graalvm.compiler.nodes.extended.ArrayRangeWrite
            invokeinterface org.graalvm.compiler.nodes.extended.ArrayRangeWrite.writesObjectArray:()Z
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.graalvm.compiler.graph.Node node
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  node  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
      Name  Flags
      node  

  private static void expandFrontier(org.graalvm.compiler.graph.NodeFlood, org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/graph/NodeFlood;Lorg/graalvm/compiler/graph/Node;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.graalvm.compiler.graph.NodeFlood frontier
        start local 1 // org.graalvm.compiler.graph.Node node
         0: .line 165
            aload 1 /* node */
            invokevirtual org.graalvm.compiler.graph.Node.cfgPredecessors:()Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: org.graalvm.compiler.graph.NodeFlood org.graalvm.compiler.graph.Node top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.graph.Node
            astore 2 /* previousNode */
        start local 2 // org.graalvm.compiler.graph.Node previousNode
         2: .line 166
            aload 2 /* previousNode */
            ifnull 4
         3: .line 167
            aload 0 /* frontier */
            aload 2 /* previousNode */
            invokevirtual org.graalvm.compiler.graph.NodeFlood.add:(Lorg/graalvm/compiler/graph/Node;)V
        end local 2 // org.graalvm.compiler.graph.Node previousNode
         4: .line 165
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         5: .line 170
            return
        end local 1 // org.graalvm.compiler.graph.Node node
        end local 0 // org.graalvm.compiler.graph.NodeFlood frontier
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0      frontier  Lorg/graalvm/compiler/graph/NodeFlood;
            0    6     1          node  Lorg/graalvm/compiler/graph/Node;
            2    4     2  previousNode  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
          Name  Flags
      frontier  
      node      

  private static boolean isSafepoint(org.graalvm.compiler.graph.Node);
    descriptor: (Lorg/graalvm/compiler/graph/Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.graph.Node node
         0: .line 173
            aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.memory.FixedAccessNode
            ifeq 2
         1: .line 175
            iconst_0
            ireturn
         2: .line 182
      StackMap locals:
      StackMap stack:
            aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.DeoptimizingNode
            ifeq 3
            aload 0 /* node */
            checkcast org.graalvm.compiler.nodes.DeoptimizingNode
            invokeinterface org.graalvm.compiler.nodes.DeoptimizingNode.canDeoptimize:()Z
            ifne 4
      StackMap locals:
      StackMap stack:
         3: aload 0 /* node */
            instanceof org.graalvm.compiler.nodes.LoopBeginNode
            ifne 4
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         4: iconst_1
            ireturn
        end local 0 // org.graalvm.compiler.graph.Node node
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  node  Lorg/graalvm/compiler/graph/Node;
    MethodParameters:
      Name  Flags
      node  

  private static org.graalvm.compiler.nodes.ValueNode getValueWritten(org.graalvm.compiler.nodes.FixedWithNextNode);
    descriptor: (Lorg/graalvm/compiler/nodes/FixedWithNextNode;)Lorg/graalvm/compiler/nodes/ValueNode;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.graalvm.compiler.nodes.FixedWithNextNode write
         0: .line 186
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.memory.WriteNode
            ifeq 2
         1: .line 187
            aload 0 /* write */
            checkcast org.graalvm.compiler.nodes.memory.WriteNode
            invokevirtual org.graalvm.compiler.nodes.memory.WriteNode.value:()Lorg/graalvm/compiler/nodes/ValueNode;
            areturn
         2: .line 188
      StackMap locals:
      StackMap stack:
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode
            ifeq 4
         3: .line 189
            aload 0 /* write */
            checkcast org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode
            invokevirtual org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode.getNewValue:()Lorg/graalvm/compiler/nodes/ValueNode;
            areturn
         4: .line 190
      StackMap locals:
      StackMap stack:
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.java.LoweredAtomicReadAndWriteNode
            ifeq 6
         5: .line 191
            aload 0 /* write */
            checkcast org.graalvm.compiler.nodes.java.LoweredAtomicReadAndWriteNode
            invokevirtual org.graalvm.compiler.nodes.java.LoweredAtomicReadAndWriteNode.getNewValue:()Lorg/graalvm/compiler/nodes/ValueNode;
            areturn
         6: .line 193
      StackMap locals:
      StackMap stack:
            ldc "unexpected write node %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* write */
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.graalvm.compiler.debug.GraalError.shouldNotReachHere:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        end local 0 // org.graalvm.compiler.nodes.FixedWithNextNode write
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0  write  Lorg/graalvm/compiler/nodes/FixedWithNextNode;
    MethodParameters:
       Name  Flags
      write  

  private static boolean validateBarrier(org.graalvm.compiler.nodes.memory.FixedAccessNode, org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier);
    descriptor: (Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.nodes.memory.FixedAccessNode write
        start local 1 // org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier barrier
         0: .line 198
            getstatic org.graalvm.compiler.hotspot.phases.WriteBarrierVerificationPhase.$assertionsDisabled:Z
            ifne 2
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.memory.WriteNode
            ifne 2
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.java.LogicCompareAndSwapNode
            ifne 2
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.java.ValueCompareAndSwapNode
            ifne 2
         1: .line 199
            aload 0 /* write */
            instanceof org.graalvm.compiler.nodes.java.LoweredAtomicReadAndWriteNode
            ifne 2
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Node must be of type requiring a write barrier "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* write */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         2: .line 200
      StackMap locals:
      StackMap stack:
            aload 1 /* barrier */
            invokevirtual org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier.usePrecise:()Z
            ifne 6
         3: .line 201
            aload 1 /* barrier */
            invokevirtual org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            instanceof org.graalvm.compiler.nodes.memory.address.OffsetAddressNode
            ifeq 6
            aload 0 /* write */
            invokevirtual org.graalvm.compiler.nodes.memory.FixedAccessNode.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            instanceof org.graalvm.compiler.nodes.memory.address.OffsetAddressNode
            ifeq 6
         4: .line 202
            aload 1 /* barrier */
            invokevirtual org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            checkcast org.graalvm.compiler.nodes.memory.address.OffsetAddressNode
            invokevirtual org.graalvm.compiler.nodes.memory.address.OffsetAddressNode.getBase:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.unproxify:(Lorg/graalvm/compiler/nodes/ValueNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            aload 0 /* write */
            invokevirtual org.graalvm.compiler.nodes.memory.FixedAccessNode.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            checkcast org.graalvm.compiler.nodes.memory.address.OffsetAddressNode
            invokevirtual org.graalvm.compiler.nodes.memory.address.OffsetAddressNode.getBase:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.unproxify:(Lorg/graalvm/compiler/nodes/ValueNode;)Lorg/graalvm/compiler/nodes/ValueNode;
            if_acmpne 5
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_0
            ireturn
         6: .line 205
      StackMap locals:
      StackMap stack:
            aload 1 /* barrier */
            invokevirtual org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            aload 0 /* write */
            invokevirtual org.graalvm.compiler.nodes.memory.FixedAccessNode.getAddress:()Lorg/graalvm/compiler/nodes/memory/address/AddressNode;
            if_acmpne 7
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         7: iconst_0
            ireturn
        end local 1 // org.graalvm.compiler.hotspot.gc.shared.ObjectWriteBarrier barrier
        end local 0 // org.graalvm.compiler.nodes.memory.FixedAccessNode write
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0    write  Lorg/graalvm/compiler/nodes/memory/FixedAccessNode;
            0    8     1  barrier  Lorg/graalvm/compiler/hotspot/gc/shared/ObjectWriteBarrier;
    MethodParameters:
         Name  Flags
      write    
      barrier  
}
SourceFile: "WriteBarrierVerificationPhase.java"
InnerClasses:
  public final BarrierType = org.graalvm.compiler.nodes.memory.HeapAccess$BarrierType of org.graalvm.compiler.nodes.memory.HeapAccess