public class org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates extends org.graalvm.compiler.replacements.SnippetTemplate$AbstractTemplates
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates
  super_class: org.graalvm.compiler.replacements.SnippetTemplate$AbstractTemplates
{
  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo arraycopyGenericSnippet;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo arraycopyExactSnippet;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo arraycopyExactStubCallSnippet;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo arraycopyCheckcastSnippet;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo arraycopyNativeSnippet;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo checkcastArraycopyWithSlowPathWork;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo genericArraycopyWithSlowPathWork;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo exactArraycopyWithSlowPathWork;
    descriptor: Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private jdk.vm.ci.meta.ResolvedJavaMethod originalArraycopy;
    descriptor: Ljdk/vm/ci/meta/ResolvedJavaMethod;
    flags: (0x0002) ACC_PRIVATE

  private final org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters counters;
    descriptor: Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean expandArraycopyLoop;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  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 366
            ldc Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;
            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.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets, org.graalvm.compiler.options.OptionValues, java.lang.Iterable<org.graalvm.compiler.debug.DebugHandlersFactory>, org.graalvm.compiler.replacements.SnippetCounter$Group$Factory, org.graalvm.compiler.phases.util.Providers, org.graalvm.compiler.api.replacements.SnippetReflectionProvider, jdk.vm.ci.code.TargetDescription);
    descriptor: (Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Lorg/graalvm/compiler/options/OptionValues;Ljava/lang/Iterable;Lorg/graalvm/compiler/replacements/SnippetCounter$Group$Factory;Lorg/graalvm/compiler/phases/util/Providers;Lorg/graalvm/compiler/api/replacements/SnippetReflectionProvider;Ljdk/vm/ci/code/TargetDescription;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=8
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets receiver
        start local 2 // org.graalvm.compiler.options.OptionValues options
        start local 3 // java.lang.Iterable factories
        start local 4 // org.graalvm.compiler.replacements.SnippetCounter$Group$Factory factory
        start local 5 // org.graalvm.compiler.phases.util.Providers providers
        start local 6 // org.graalvm.compiler.api.replacements.SnippetReflectionProvider snippetReflection
        start local 7 // jdk.vm.ci.code.TargetDescription target
         0: .line 382
            aload 0 /* this */
            aload 2 /* options */
            aload 3 /* factories */
            aload 5 /* providers */
            aload 6 /* snippetReflection */
            aload 7 /* target */
            invokespecial org.graalvm.compiler.replacements.SnippetTemplate$AbstractTemplates.<init>:(Lorg/graalvm/compiler/options/OptionValues;Ljava/lang/Iterable;Lorg/graalvm/compiler/phases/util/Providers;Lorg/graalvm/compiler/api/replacements/SnippetReflectionProvider;Ljdk/vm/ci/code/TargetDescription;)V
         1: .line 383
            aload 0 /* this */
            new org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters
            dup
            aload 4 /* factory */
            invokespecial org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters.<init>:(Lorg/graalvm/compiler/replacements/SnippetCounter$Group$Factory;)V
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.counters:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
         2: .line 385
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "arraycopyGenericSnippet"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyGenericSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         3: .line 386
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "arraycopyExactSnippet"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         4: .line 387
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "arraycopyExactStubCallSnippet"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactStubCallSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         5: .line 388
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "arraycopyCheckcastSnippet"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyCheckcastSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         6: .line 389
            aload 0 /* this */
            aload 0 /* this */
            aconst_null
            ldc "arraycopyNativeSnippet"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyNativeSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         7: .line 390
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "checkcastArraycopyWithSlowPathWork"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.checkcastArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         8: .line 391
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "genericArraycopyWithSlowPathWork"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.genericArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
         9: .line 392
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* receiver */
            ldc "exactArraycopyWithSlowPathWork"
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.exactArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
        10: .line 393
            return
        end local 7 // jdk.vm.ci.code.TargetDescription target
        end local 6 // org.graalvm.compiler.api.replacements.SnippetReflectionProvider snippetReflection
        end local 5 // org.graalvm.compiler.phases.util.Providers providers
        end local 4 // org.graalvm.compiler.replacements.SnippetCounter$Group$Factory factory
        end local 3 // java.lang.Iterable factories
        end local 2 // org.graalvm.compiler.options.OptionValues options
        end local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets receiver
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   11     0               this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0   11     1           receiver  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;
            0   11     2            options  Lorg/graalvm/compiler/options/OptionValues;
            0   11     3          factories  Ljava/lang/Iterable<Lorg/graalvm/compiler/debug/DebugHandlersFactory;>;
            0   11     4            factory  Lorg/graalvm/compiler/replacements/SnippetCounter$Group$Factory;
            0   11     5          providers  Lorg/graalvm/compiler/phases/util/Providers;
            0   11     6  snippetReflection  Lorg/graalvm/compiler/api/replacements/SnippetReflectionProvider;
            0   11     7             target  Ljdk/vm/ci/code/TargetDescription;
    Signature: (Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Lorg/graalvm/compiler/options/OptionValues;Ljava/lang/Iterable<Lorg/graalvm/compiler/debug/DebugHandlersFactory;>;Lorg/graalvm/compiler/replacements/SnippetCounter$Group$Factory;Lorg/graalvm/compiler/phases/util/Providers;Lorg/graalvm/compiler/api/replacements/SnippetReflectionProvider;Ljdk/vm/ci/code/TargetDescription;)V
    MethodParameters:
                   Name  Flags
      receiver           
      options            
      factories          
      factory            
      providers          
      snippetReflection  
      target             

  protected org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippet(org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets, java.lang.String);
    descriptor: (Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;Ljava/lang/String;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=9, locals=4, args_size=3
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets receiver
        start local 2 // java.lang.String methodName
         0: .line 396
            aload 0 /* this */
            ldc Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;
            aload 2 /* methodName */
            aload 0 /* this */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.originalArraycopy:()Ljdk/vm/ci/meta/ResolvedJavaMethod;
            aload 1 /* receiver */
            iconst_1
            anewarray jdk.internal.vm.compiler.word.LocationIdentity
            dup
            iconst_0
            invokestatic jdk.internal.vm.compiler.word.LocationIdentity.any:()Ljdk/internal/vm/compiler/word/LocationIdentity;
            aastore
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.snippet:(Ljava/lang/Class;Ljava/lang/String;Ljdk/vm/ci/meta/ResolvedJavaMethod;Ljava/lang/Object;[Ljdk/internal/vm/compiler/word/LocationIdentity;)Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 3 /* info */
        start local 3 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo info
         1: .line 397
            aload 3 /* info */
            areturn
        end local 3 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo info
        end local 2 // java.lang.String methodName
        end local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets receiver
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0    2     1    receiver  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets;
            0    2     2  methodName  Ljava/lang/String;
            1    2     3        info  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
    MethodParameters:
            Name  Flags
      receiver    
      methodName  

  public void lower(org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode, org.graalvm.compiler.nodes.spi.LoweringTool);
    descriptor: (Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopyNode;Lorg/graalvm/compiler/nodes/spi/LoweringTool;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=11, args_size=3
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode arraycopy
        start local 2 // org.graalvm.compiler.nodes.spi.LoweringTool tool
         0: .line 401
            aload 1 /* arraycopy */
            invokestatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.selectComponentKind:(Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;)Ljdk/vm/ci/meta/JavaKind;
            astore 3 /* elementKind */
        start local 3 // jdk.vm.ci.meta.JavaKind elementKind
         1: .line 405
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getSource:()Lorg/graalvm/compiler/nodes/ValueNode;
            getstatic org.graalvm.compiler.nodes.NodeView.DEFAULT:Lorg/graalvm/compiler/nodes/NodeView;
            invokevirtual org.graalvm.compiler.nodes.ValueNode.stamp:(Lorg/graalvm/compiler/nodes/NodeView;)Lorg/graalvm/compiler/core/common/type/Stamp;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.typeOrNull:(Lorg/graalvm/compiler/core/common/type/Stamp;)Ljdk/vm/ci/meta/ResolvedJavaType;
            astore 6 /* srcType */
        start local 6 // jdk.vm.ci.meta.ResolvedJavaType srcType
         2: .line 406
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getDestination:()Lorg/graalvm/compiler/nodes/ValueNode;
            getstatic org.graalvm.compiler.nodes.NodeView.DEFAULT:Lorg/graalvm/compiler/nodes/NodeView;
            invokevirtual org.graalvm.compiler.nodes.ValueNode.stamp:(Lorg/graalvm/compiler/nodes/NodeView;)Lorg/graalvm/compiler/core/common/type/Stamp;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.typeOrNull:(Lorg/graalvm/compiler/core/common/type/Stamp;)Ljdk/vm/ci/meta/ResolvedJavaType;
            astore 7 /* destType */
        start local 7 // jdk.vm.ci.meta.ResolvedJavaType destType
         3: .line 407
            aload 6 /* srcType */
            invokestatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.canBeArray:(Ljdk/vm/ci/meta/ResolvedJavaType;)Z
            ifeq 4
            aload 7 /* destType */
            invokestatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.canBeArray:(Ljdk/vm/ci/meta/ResolvedJavaType;)Z
            ifne 7
         4: .line 410
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode org.graalvm.compiler.nodes.spi.LoweringTool jdk.vm.ci.meta.JavaKind top top jdk.vm.ci.meta.ResolvedJavaType jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyNativeSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
         5: .line 411
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.UNDEFINED_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
         6: .line 412
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
         7: .line 413
      StackMap locals:
      StackMap stack:
            aload 6 /* srcType */
            ifnonnull 8
            aconst_null
            goto 9
      StackMap locals:
      StackMap stack:
         8: aload 6 /* srcType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getComponentType:()Ljdk/vm/ci/meta/ResolvedJavaType;
      StackMap locals:
      StackMap stack: jdk.vm.ci.meta.ResolvedJavaType
         9: astore 8 /* srcComponentType */
        start local 8 // jdk.vm.ci.meta.ResolvedJavaType srcComponentType
        10: .line 414
            aload 7 /* destType */
            ifnonnull 11
            aconst_null
            goto 12
      StackMap locals: jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
        11: aload 7 /* destType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getComponentType:()Ljdk/vm/ci/meta/ResolvedJavaType;
      StackMap locals:
      StackMap stack: jdk.vm.ci.meta.ResolvedJavaType
        12: astore 9 /* destComponentType */
        start local 9 // jdk.vm.ci.meta.ResolvedJavaType destComponentType
        13: .line 416
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.isExact:()Z
            ifeq 17
        14: .line 418
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactStubCallSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        15: .line 419
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.NO_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        16: .line 420
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
      StackMap locals: jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
        17: aload 8 /* srcComponentType */
            ifnonnull 21
            aload 9 /* destComponentType */
            ifnonnull 21
        18: .line 422
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyGenericSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        19: .line 424
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.NO_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        20: .line 425
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
      StackMap locals:
      StackMap stack:
        21: getstatic org.graalvm.compiler.core.common.GraalOptions.GeneratePIC:Lorg/graalvm/compiler/options/OptionKey;
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.options:Lorg/graalvm/compiler/options/OptionValues;
            invokevirtual org.graalvm.compiler.options.OptionKey.getValue:(Lorg/graalvm/compiler/options/OptionValues;)Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 25
        22: .line 427
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyGenericSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        23: .line 428
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.NO_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        24: .line 429
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
      StackMap locals:
      StackMap stack:
        25: aload 8 /* srcComponentType */
            ifnull 34
            aload 9 /* destComponentType */
            ifnull 34
        26: .line 430
            aload 8 /* srcComponentType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isPrimitive:()Z
            ifne 30
            aload 9 /* destComponentType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isPrimitive:()Z
            ifne 30
        27: .line 433
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyCheckcastSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        28: .line 434
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.NO_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        29: .line 435
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        30: .line 438
      StackMap locals:
      StackMap stack:
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 31
            aload 8 /* srcComponentType */
            aload 9 /* destComponentType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifeq 31
            new java.lang.AssertionError
            dup
            ldc "must be handled by arraycopy.isExact()"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        31: .line 439
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyNativeSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        32: .line 440
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.UNDEFINED_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        33: .line 442
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        34: .line 443
      StackMap locals:
      StackMap stack:
            aload 8 /* srcComponentType */
            ifnull 35
            aload 8 /* srcComponentType */
            goto 36
      StackMap locals:
      StackMap stack:
        35: aload 9 /* destComponentType */
      StackMap locals:
      StackMap stack: jdk.vm.ci.meta.ResolvedJavaType
        36: astore 10 /* nonNullComponentType */
        start local 10 // jdk.vm.ci.meta.ResolvedJavaType nonNullComponentType
        37: .line 444
            aload 10 /* nonNullComponentType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isPrimitive:()Z
            ifeq 42
        38: .line 447
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactStubCallSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        39: .line 448
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.HUB_BASED_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        40: .line 449
            aload 10 /* nonNullComponentType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getJavaKind:()Ljdk/vm/ci/meta/JavaKind;
            astore 3 /* elementKind */
        41: .line 450
            goto 44
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        42: .line 453
      StackMap locals: jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyCheckcastSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        43: .line 454
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.LAYOUT_HELPER_BASED_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            astore 5 /* arrayTypeCheck */
        end local 10 // jdk.vm.ci.meta.ResolvedJavaType nonNullComponentType
        end local 9 // jdk.vm.ci.meta.ResolvedJavaType destComponentType
        end local 8 // jdk.vm.ci.meta.ResolvedJavaType srcComponentType
        start local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        44: .line 459
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode org.graalvm.compiler.nodes.spi.LoweringTool jdk.vm.ci.meta.JavaKind org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck jdk.vm.ci.meta.ResolvedJavaType jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.expandArraycopyLoop:Z
            ifeq 46
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactStubCallSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpne 46
        45: .line 460
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        46: .line 464
      StackMap locals:
      StackMap stack:
            new org.graalvm.compiler.replacements.SnippetTemplate$Arguments
            dup
            aload 4 /* snippetInfo */
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.graph:()Lorg/graalvm/compiler/nodes/StructuredGraph;
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getGuardsStage:()Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;
            aload 2 /* tool */
            invokeinterface org.graalvm.compiler.nodes.spi.LoweringTool.getLoweringStage:()Lorg/graalvm/compiler/nodes/spi/LoweringTool$LoweringStage;
            invokespecial org.graalvm.compiler.replacements.SnippetTemplate$Arguments.<init>:(Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;Lorg/graalvm/compiler/nodes/spi/LoweringTool$LoweringStage;)V
            astore 8 /* args */
        start local 8 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
        47: .line 465
            aload 8 /* args */
            ldc "src"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getSource:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        48: .line 466
            aload 8 /* args */
            ldc "srcPos"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getSourcePosition:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        49: .line 467
            aload 8 /* args */
            ldc "dest"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getDestination:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        50: .line 468
            aload 8 /* args */
            ldc "destPos"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getDestinationPosition:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        51: .line 469
            aload 8 /* args */
            ldc "length"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.getLength:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        52: .line 470
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyNativeSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpeq 55
        53: .line 471
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 54
            aload 5 /* arrayTypeCheck */
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck.UNDEFINED_ARRAY_TYPE_CHECK:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            if_acmpne 54
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        54: .line 472
      StackMap locals: org.graalvm.compiler.replacements.SnippetTemplate$Arguments
      StackMap stack:
            aload 8 /* args */
            ldc "arrayTypeCheck"
            aload 5 /* arrayTypeCheck */
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        55: .line 474
      StackMap locals:
      StackMap stack:
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode.killsAnyLocation:()Z
            ifeq 56
            invokestatic jdk.internal.vm.compiler.word.LocationIdentity.any:()Ljdk/internal/vm/compiler/word/LocationIdentity;
            goto 57
      StackMap locals:
      StackMap stack:
        56: aload 3 /* elementKind */
            invokestatic org.graalvm.compiler.nodes.NamedLocationIdentity.getArrayLocation:(Ljdk/vm/ci/meta/JavaKind;)Ljdk/internal/vm/compiler/word/LocationIdentity;
      StackMap locals:
      StackMap stack: jdk.internal.vm.compiler.word.LocationIdentity
        57: astore 9 /* locationIdentity */
        start local 9 // java.lang.Object locationIdentity
        58: .line 475
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactStubCallSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpeq 59
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyExactSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpne 65
        59: .line 476
      StackMap locals: java.lang.Object
      StackMap stack:
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 60
            aload 3 /* elementKind */
            ifnonnull 60
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        60: .line 477
      StackMap locals:
      StackMap stack:
            aload 8 /* args */
            ldc "workSnippet"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.exactArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        61: .line 478
            aload 8 /* args */
            ldc "elementKind"
            aload 3 /* elementKind */
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        62: .line 479
            aload 8 /* args */
            ldc "locationIdentity"
            aload 9 /* locationIdentity */
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        63: .line 480
            aload 8 /* args */
            ldc "elementKindCounter"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.counters:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters.arraycopyCallCounters:Ljava/util/EnumMap;
            aload 3 /* elementKind */
            invokevirtual java.util.EnumMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        64: .line 481
            aload 8 /* args */
            ldc "elementKindCopiedCounter"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.counters:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters.arraycopyCallCopiedCounters:Ljava/util/EnumMap;
            aload 3 /* elementKind */
            invokevirtual java.util.EnumMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        65: .line 483
      StackMap locals:
      StackMap stack:
            aload 8 /* args */
            ldc "counters"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.counters:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        66: .line 484
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyCheckcastSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpne 69
        67: .line 485
            aload 8 /* args */
            ldc "workSnippet"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.checkcastArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        68: .line 486
            aload 8 /* args */
            ldc "elementKind"
            getstatic jdk.vm.ci.meta.JavaKind.Illegal:Ljdk/vm/ci/meta/JavaKind;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        69: .line 488
      StackMap locals:
      StackMap stack:
            aload 4 /* snippetInfo */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.arraycopyGenericSnippet:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpne 72
        70: .line 489
            aload 8 /* args */
            ldc "workSnippet"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.genericArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        71: .line 490
            aload 8 /* args */
            ldc "elementKind"
            getstatic jdk.vm.ci.meta.JavaKind.Illegal:Ljdk/vm/ci/meta/JavaKind;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        72: .line 493
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 8 /* args */
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.instantiate:(Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;)V
        73: .line 494
            return
        end local 9 // java.lang.Object locationIdentity
        end local 8 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
        end local 7 // jdk.vm.ci.meta.ResolvedJavaType destType
        end local 6 // jdk.vm.ci.meta.ResolvedJavaType srcType
        end local 5 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck arrayTypeCheck
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        end local 3 // jdk.vm.ci.meta.JavaKind elementKind
        end local 2 // org.graalvm.compiler.nodes.spi.LoweringTool tool
        end local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyNode arraycopy
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   74     0                  this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0   74     1             arraycopy  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopyNode;
            0   74     2                  tool  Lorg/graalvm/compiler/nodes/spi/LoweringTool;
            1   74     3           elementKind  Ljdk/vm/ci/meta/JavaKind;
            5    7     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           15   17     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           19   21     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           23   25     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           28   30     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           32   34     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           39   42     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
           43   74     4           snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            6    7     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           16   17     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           20   21     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           24   25     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           29   30     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           33   34     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           40   42     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
           44   74     5        arrayTypeCheck  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$ArrayCopyTypeCheck;
            2   74     6               srcType  Ljdk/vm/ci/meta/ResolvedJavaType;
            3   74     7              destType  Ljdk/vm/ci/meta/ResolvedJavaType;
           10   44     8      srcComponentType  Ljdk/vm/ci/meta/ResolvedJavaType;
           13   44     9     destComponentType  Ljdk/vm/ci/meta/ResolvedJavaType;
           37   44    10  nonNullComponentType  Ljdk/vm/ci/meta/ResolvedJavaType;
           47   74     8                  args  Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
           58   74     9      locationIdentity  Ljava/lang/Object;
    MethodParameters:
           Name  Flags
      arraycopy  
      tool       

  public void lower(org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode, org.graalvm.compiler.nodes.spi.LoweringTool);
    descriptor: (Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode;Lorg/graalvm/compiler/nodes/spi/LoweringTool;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=8, args_size=3
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode arraycopy
        start local 2 // org.graalvm.compiler.nodes.spi.LoweringTool tool
         0: .line 497
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.graph:()Lorg/graalvm/compiler/nodes/StructuredGraph;
            astore 3 /* graph */
        start local 3 // org.graalvm.compiler.nodes.StructuredGraph graph
         1: .line 499
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getSnippet:()Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.exactArraycopyWithSlowPathWork:Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            if_acmpne 4
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.expandArraycopyLoop:Z
            ifeq 4
         2: .line 500
            aload 3 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getGuardsStage:()Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph$GuardsStage.areDeoptsFixed:()Z
            ifne 6
         3: .line 502
            return
         4: .line 505
      StackMap locals: org.graalvm.compiler.nodes.StructuredGraph
      StackMap stack:
            aload 3 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getGuardsStage:()Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph$GuardsStage.areFrameStatesAtDeopts:()Z
            ifne 6
         5: .line 507
            return
         6: .line 511
      StackMap locals:
      StackMap stack:
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getSnippet:()Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            astore 4 /* snippetInfo */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
         7: .line 512
            new org.graalvm.compiler.replacements.SnippetTemplate$Arguments
            dup
            aload 4 /* snippetInfo */
            aload 3 /* graph */
            invokevirtual org.graalvm.compiler.nodes.StructuredGraph.getGuardsStage:()Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;
            aload 2 /* tool */
            invokeinterface org.graalvm.compiler.nodes.spi.LoweringTool.getLoweringStage:()Lorg/graalvm/compiler/nodes/spi/LoweringTool$LoweringStage;
            invokespecial org.graalvm.compiler.replacements.SnippetTemplate$Arguments.<init>:(Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;Lorg/graalvm/compiler/nodes/StructuredGraph$GuardsStage;Lorg/graalvm/compiler/nodes/spi/LoweringTool$LoweringStage;)V
            astore 5 /* args */
        start local 5 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
         8: .line 513
            aload 5 /* args */
            ldc "src"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getSource:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
         9: .line 514
            aload 5 /* args */
            ldc "srcPos"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getSourcePosition:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        10: .line 515
            aload 5 /* args */
            ldc "dest"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getDestination:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        11: .line 516
            aload 5 /* args */
            ldc "destPos"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getDestinationPosition:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        12: .line 517
            aload 5 /* args */
            ldc "length"
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getLength:()Lorg/graalvm/compiler/nodes/ValueNode;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.add:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        13: .line 519
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getElementKind:()Ljdk/vm/ci/meta/JavaKind;
            astore 6 /* elementKind */
        start local 6 // jdk.vm.ci.meta.JavaKind elementKind
        14: .line 520
            aload 5 /* args */
            ldc "elementKind"
            aload 6 /* elementKind */
            ifnonnull 15
            getstatic jdk.vm.ci.meta.JavaKind.Illegal:Ljdk/vm/ci/meta/JavaKind;
            goto 16
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode org.graalvm.compiler.nodes.spi.LoweringTool org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo org.graalvm.compiler.replacements.SnippetTemplate$Arguments jdk.vm.ci.meta.JavaKind
      StackMap stack: org.graalvm.compiler.replacements.SnippetTemplate$Arguments java.lang.String
        15: aload 6 /* elementKind */
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode org.graalvm.compiler.nodes.spi.LoweringTool org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo org.graalvm.compiler.replacements.SnippetTemplate$Arguments jdk.vm.ci.meta.JavaKind
      StackMap stack: org.graalvm.compiler.replacements.SnippetTemplate$Arguments java.lang.String jdk.vm.ci.meta.JavaKind
        16: invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        17: .line 522
            aload 6 /* elementKind */
            ifnonnull 18
            invokestatic jdk.internal.vm.compiler.word.LocationIdentity.any:()Ljdk/internal/vm/compiler/word/LocationIdentity;
            goto 19
      StackMap locals:
      StackMap stack:
        18: aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.getElementKind:()Ljdk/vm/ci/meta/JavaKind;
            invokestatic org.graalvm.compiler.nodes.NamedLocationIdentity.getArrayLocation:(Ljdk/vm/ci/meta/JavaKind;)Ljdk/internal/vm/compiler/word/LocationIdentity;
      StackMap locals:
      StackMap stack: jdk.internal.vm.compiler.word.LocationIdentity
        19: astore 7 /* locationIdentity */
        start local 7 // java.lang.Object locationIdentity
        20: .line 523
            aload 5 /* args */
            ldc "arrayLocation"
            aload 7 /* locationIdentity */
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        21: .line 524
            aload 5 /* args */
            ldc "counters"
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.counters:Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Counters;
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate$Arguments.addConst:(Ljava/lang/String;Ljava/lang/Object;)Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            pop
        22: .line 525
            aload 0 /* this */
            aload 5 /* args */
            aload 1 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.instantiate:(Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;)V
        23: .line 526
            return
        end local 7 // java.lang.Object locationIdentity
        end local 6 // jdk.vm.ci.meta.JavaKind elementKind
        end local 5 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo snippetInfo
        end local 3 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 2 // org.graalvm.compiler.nodes.spi.LoweringTool tool
        end local 1 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode arraycopy
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   24     0              this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0   24     1         arraycopy  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode;
            0   24     2              tool  Lorg/graalvm/compiler/nodes/spi/LoweringTool;
            1   24     3             graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            7   24     4       snippetInfo  Lorg/graalvm/compiler/replacements/SnippetTemplate$SnippetInfo;
            8   24     5              args  Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
           14   24     6       elementKind  Ljdk/vm/ci/meta/JavaKind;
           20   24     7  locationIdentity  Ljava/lang/Object;
    MethodParameters:
           Name  Flags
      arraycopy  
      tool       

  private static boolean canBeArray(jdk.vm.ci.meta.ResolvedJavaType);
    descriptor: (Ljdk/vm/ci/meta/ResolvedJavaType;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.vm.ci.meta.ResolvedJavaType type
         0: .line 529
            aload 0 /* type */
            ifnull 1
            aload 0 /* type */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isJavaLangObject:()Z
            ifne 1
            aload 0 /* type */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isArray:()Z
            ifne 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // jdk.vm.ci.meta.ResolvedJavaType type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  type  Ljdk/vm/ci/meta/ResolvedJavaType;
    MethodParameters:
      Name  Flags
      type  

  public static jdk.vm.ci.meta.JavaKind selectComponentKind(org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode);
    descriptor: (Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;)Ljdk/vm/ci/meta/JavaKind;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode arraycopy
         0: .line 533
            aload 0 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.getSource:()Lorg/graalvm/compiler/nodes/ValueNode;
            getstatic org.graalvm.compiler.nodes.NodeView.DEFAULT:Lorg/graalvm/compiler/nodes/NodeView;
            invokevirtual org.graalvm.compiler.nodes.ValueNode.stamp:(Lorg/graalvm/compiler/nodes/NodeView;)Lorg/graalvm/compiler/core/common/type/Stamp;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.typeOrNull:(Lorg/graalvm/compiler/core/common/type/Stamp;)Ljdk/vm/ci/meta/ResolvedJavaType;
            astore 1 /* srcType */
        start local 1 // jdk.vm.ci.meta.ResolvedJavaType srcType
         1: .line 534
            aload 0 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.getDestination:()Lorg/graalvm/compiler/nodes/ValueNode;
            getstatic org.graalvm.compiler.nodes.NodeView.DEFAULT:Lorg/graalvm/compiler/nodes/NodeView;
            invokevirtual org.graalvm.compiler.nodes.ValueNode.stamp:(Lorg/graalvm/compiler/nodes/NodeView;)Lorg/graalvm/compiler/core/common/type/Stamp;
            invokestatic org.graalvm.compiler.nodes.type.StampTool.typeOrNull:(Lorg/graalvm/compiler/core/common/type/Stamp;)Ljdk/vm/ci/meta/ResolvedJavaType;
            astore 2 /* destType */
        start local 2 // jdk.vm.ci.meta.ResolvedJavaType destType
         2: .line 536
            aload 1 /* srcType */
            ifnull 3
            aload 1 /* srcType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isArray:()Z
            ifeq 3
            aload 2 /* destType */
            ifnull 3
            aload 2 /* destType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isArray:()Z
            ifne 4
         3: .line 537
      StackMap locals: jdk.vm.ci.meta.ResolvedJavaType jdk.vm.ci.meta.ResolvedJavaType
      StackMap stack:
            aconst_null
            areturn
         4: .line 539
      StackMap locals:
      StackMap stack:
            aload 2 /* destType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getComponentType:()Ljdk/vm/ci/meta/ResolvedJavaType;
            aload 1 /* srcType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getComponentType:()Ljdk/vm/ci/meta/ResolvedJavaType;
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.isAssignableFrom:(Ljdk/vm/ci/meta/ResolvedJavaType;)Z
            ifne 6
         5: .line 540
            aconst_null
            areturn
         6: .line 542
      StackMap locals:
      StackMap stack:
            aload 0 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.isExact:()Z
            ifne 8
         7: .line 543
            aconst_null
            areturn
         8: .line 545
      StackMap locals:
      StackMap stack:
            aload 1 /* srcType */
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getComponentType:()Ljdk/vm/ci/meta/ResolvedJavaType;
            invokeinterface jdk.vm.ci.meta.ResolvedJavaType.getJavaKind:()Ljdk/vm/ci/meta/JavaKind;
            areturn
        end local 2 // jdk.vm.ci.meta.ResolvedJavaType destType
        end local 1 // jdk.vm.ci.meta.ResolvedJavaType srcType
        end local 0 // org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode arraycopy
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0  arraycopy  Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;
            1    9     1    srcType  Ljdk/vm/ci/meta/ResolvedJavaType;
            2    9     2   destType  Ljdk/vm/ci/meta/ResolvedJavaType;
    MethodParameters:
           Name  Flags
      arraycopy  

  private void instantiate(org.graalvm.compiler.replacements.SnippetTemplate$Arguments, org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode);
    descriptor: (Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=10, args_size=3
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
        start local 2 // org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode arraycopy
         0: .line 556
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.graph:()Lorg/graalvm/compiler/nodes/StructuredGraph;
            astore 3 /* graph */
        start local 3 // org.graalvm.compiler.nodes.StructuredGraph graph
         1: .line 557
            aload 0 /* this */
            aload 2 /* arraycopy */
            aload 1 /* args */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.template:(Lorg/graalvm/compiler/nodes/ValueNode;Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;)Lorg/graalvm/compiler/replacements/SnippetTemplate;
            astore 4 /* template */
        start local 4 // org.graalvm.compiler.replacements.SnippetTemplate template
         2: .line 558
            aload 4 /* template */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.providers:Lorg/graalvm/compiler/phases/util/Providers;
            invokevirtual org.graalvm.compiler.phases.util.Providers.getMetaAccess:()Ljdk/vm/ci/meta/MetaAccessProvider;
            aload 2 /* arraycopy */
            getstatic org.graalvm.compiler.replacements.SnippetTemplate.DEFAULT_REPLACER:Lorg/graalvm/compiler/replacements/SnippetTemplate$UsageReplacer;
            aload 1 /* args */
            iconst_0
            invokevirtual org.graalvm.compiler.replacements.SnippetTemplate.instantiate:(Ljdk/vm/ci/meta/MetaAccessProvider;Lorg/graalvm/compiler/nodes/FixedNode;Lorg/graalvm/compiler/replacements/SnippetTemplate$UsageReplacer;Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;Z)Ljdk/internal/vm/compiler/collections/UnmodifiableEconomicMap;
            astore 5 /* replacements */
        start local 5 // jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap replacements
         3: .line 559
            aload 5 /* replacements */
            invokeinterface jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap.getKeys:()Ljava/lang/Iterable;
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 7
            goto 27
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.SnippetTemplate$Arguments org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.replacements.SnippetTemplate jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap top java.util.Iterator
      StackMap stack:
         4: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.graalvm.compiler.graph.Node
            astore 6 /* originalNode */
        start local 6 // org.graalvm.compiler.graph.Node originalNode
         5: .line 560
            aload 6 /* originalNode */
            instanceof org.graalvm.compiler.nodes.InvokeNode
            ifeq 20
         6: .line 561
            aload 5 /* replacements */
            aload 6 /* originalNode */
            invokeinterface jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.compiler.nodes.InvokeNode
            astore 8 /* invoke */
        start local 8 // org.graalvm.compiler.nodes.InvokeNode invoke
         7: .line 562
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 8
            aload 8 /* invoke */
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.asNode:()Lorg/graalvm/compiler/nodes/FixedWithNextNode;
            invokevirtual org.graalvm.compiler.nodes.FixedWithNextNode.graph:()Lorg/graalvm/compiler/nodes/StructuredGraph;
            aload 3 /* graph */
            if_acmpeq 8
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         8: .line 563
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.SnippetTemplate$Arguments org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.replacements.SnippetTemplate jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap org.graalvm.compiler.graph.Node java.util.Iterator org.graalvm.compiler.nodes.InvokeNode
      StackMap stack:
            aload 8 /* invoke */
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.callTarget:()Lorg/graalvm/compiler/nodes/CallTargetNode;
            astore 9 /* call */
        start local 9 // org.graalvm.compiler.nodes.CallTargetNode call
         9: .line 565
            aload 9 /* call */
            invokevirtual org.graalvm.compiler.nodes.CallTargetNode.targetMethod:()Ljdk/vm/ci/meta/ResolvedJavaMethod;
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.originalArraycopy:Ljdk/vm/ci/meta/ResolvedJavaMethod;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 11
        10: .line 566
            new org.graalvm.compiler.debug.GraalError
            dup
            ldc "unexpected invoke %s in snippet"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 9 /* call */
            invokevirtual org.graalvm.compiler.nodes.CallTargetNode.targetMethod:()Ljdk/vm/ci/meta/ResolvedJavaMethod;
            aastore
            invokespecial org.graalvm.compiler.debug.GraalError.<init>:(Ljava/lang/String;[Ljava/lang/Object;)V
            athrow
        11: .line 569
      StackMap locals: org.graalvm.compiler.nodes.CallTargetNode
      StackMap stack:
            aload 8 /* invoke */
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.getBci:()I
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.replaceBci:(I)V
        12: .line 570
            aload 8 /* invoke */
            aconst_null
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.setStateDuring:(Lorg/graalvm/compiler/nodes/FrameState;)V
        13: .line 571
            aload 8 /* invoke */
            aconst_null
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.setStateAfter:(Lorg/graalvm/compiler/nodes/FrameState;)V
        14: .line 572
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateDuring:()Lorg/graalvm/compiler/nodes/FrameState;
            ifnull 17
        15: .line 573
            aload 8 /* invoke */
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateDuring:()Lorg/graalvm/compiler/nodes/FrameState;
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.setStateDuring:(Lorg/graalvm/compiler/nodes/FrameState;)V
        16: .line 574
            goto 27
        17: .line 575
      StackMap locals:
      StackMap stack:
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 18
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateAfter:()Lorg/graalvm/compiler/nodes/FrameState;
            ifnonnull 18
            new java.lang.AssertionError
            dup
            aload 2 /* arraycopy */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        18: .line 576
      StackMap locals:
      StackMap stack:
            aload 8 /* invoke */
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateAfter:()Lorg/graalvm/compiler/nodes/FrameState;
            invokevirtual org.graalvm.compiler.nodes.InvokeNode.setStateAfter:(Lorg/graalvm/compiler/nodes/FrameState;)V
        end local 9 // org.graalvm.compiler.nodes.CallTargetNode call
        end local 8 // org.graalvm.compiler.nodes.InvokeNode invoke
        19: .line 578
            goto 27
      StackMap locals:
      StackMap stack:
        20: aload 6 /* originalNode */
            instanceof org.graalvm.compiler.nodes.InvokeWithExceptionNode
            ifeq 22
        21: .line 579
            new org.graalvm.compiler.debug.GraalError
            dup
            ldc "unexpected invoke with exception %s in snippet"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* originalNode */
            aastore
            invokespecial org.graalvm.compiler.debug.GraalError.<init>:(Ljava/lang/String;[Ljava/lang/Object;)V
            athrow
        22: .line 580
      StackMap locals:
      StackMap stack:
            aload 6 /* originalNode */
            instanceof org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode
            ifeq 27
        23: .line 581
            aload 5 /* replacements */
            aload 6 /* originalNode */
            invokeinterface jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode
            astore 8 /* slowPath */
        start local 8 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode slowPath
        24: .line 582
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 25
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateAfter:()Lorg/graalvm/compiler/nodes/FrameState;
            ifnonnull 25
            new java.lang.AssertionError
            dup
            aload 2 /* arraycopy */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        25: .line 583
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode
      StackMap stack:
            getstatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.$assertionsDisabled:Z
            ifne 26
            aload 8 /* slowPath */
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.stateAfter:()Lorg/graalvm/compiler/nodes/FrameState;
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.stateAfter:()Lorg/graalvm/compiler/nodes/FrameState;
            if_acmpeq 26
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        26: .line 584
      StackMap locals:
      StackMap stack:
            aload 8 /* slowPath */
            aload 2 /* arraycopy */
            invokevirtual org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode.getBci:()I
            invokevirtual org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode.setBci:(I)V
        end local 8 // org.graalvm.compiler.replacements.arraycopy.ArrayCopyWithDelayedLoweringNode slowPath
        end local 6 // org.graalvm.compiler.graph.Node originalNode
        27: .line 559
      StackMap locals: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates org.graalvm.compiler.replacements.SnippetTemplate$Arguments org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode org.graalvm.compiler.nodes.StructuredGraph org.graalvm.compiler.replacements.SnippetTemplate jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 4
        28: .line 587
            aload 2 /* arraycopy */
            invokestatic org.graalvm.compiler.nodes.util.GraphUtil.killCFG:(Lorg/graalvm/compiler/nodes/FixedNode;)V
        29: .line 588
            return
        end local 5 // jdk.internal.vm.compiler.collections.UnmodifiableEconomicMap replacements
        end local 4 // org.graalvm.compiler.replacements.SnippetTemplate template
        end local 3 // org.graalvm.compiler.nodes.StructuredGraph graph
        end local 2 // org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode arraycopy
        end local 1 // org.graalvm.compiler.replacements.SnippetTemplate$Arguments args
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   30     0          this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0   30     1          args  Lorg/graalvm/compiler/replacements/SnippetTemplate$Arguments;
            0   30     2     arraycopy  Lorg/graalvm/compiler/replacements/nodes/BasicArrayCopyNode;
            1   30     3         graph  Lorg/graalvm/compiler/nodes/StructuredGraph;
            2   30     4      template  Lorg/graalvm/compiler/replacements/SnippetTemplate;
            3   30     5  replacements  Ljdk/internal/vm/compiler/collections/UnmodifiableEconomicMap<Lorg/graalvm/compiler/graph/Node;Lorg/graalvm/compiler/graph/Node;>;
            5   27     6  originalNode  Lorg/graalvm/compiler/graph/Node;
            7   19     8        invoke  Lorg/graalvm/compiler/nodes/InvokeNode;
            9   19     9          call  Lorg/graalvm/compiler/nodes/CallTargetNode;
           24   27     8      slowPath  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopyWithDelayedLoweringNode;
    MethodParameters:
           Name  Flags
      args       
      arraycopy  

  private jdk.vm.ci.meta.ResolvedJavaMethod originalArraycopy();
    descriptor: ()Ljdk/vm/ci/meta/ResolvedJavaMethod;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
         0: .line 591
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.originalArraycopy:Ljdk/vm/ci/meta/ResolvedJavaMethod;
            ifnonnull 5
         1: .line 593
            aload 0 /* this */
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.providers:Lorg/graalvm/compiler/phases/util/Providers;
            invokevirtual org.graalvm.compiler.phases.util.Providers.getMetaAccess:()Ljdk/vm/ci/meta/MetaAccessProvider;
            ldc Ljava/lang/System;
            ldc "arraycopy"
            invokestatic org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.findMethod:(Ljdk/vm/ci/meta/MetaAccessProvider;Ljava/lang/Class;Ljava/lang/String;)Ljdk/vm/ci/meta/ResolvedJavaMethod;
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.originalArraycopy:Ljdk/vm/ci/meta/ResolvedJavaMethod;
         2: .line 594
            goto 5
      StackMap locals:
      StackMap stack: java.lang.SecurityException
         3: astore 1 /* e */
        start local 1 // java.lang.SecurityException e
         4: .line 595
            new org.graalvm.compiler.debug.GraalError
            dup
            aload 1 /* e */
            invokespecial org.graalvm.compiler.debug.GraalError.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.lang.SecurityException e
         5: .line 598
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.originalArraycopy:Ljdk/vm/ci/meta/ResolvedJavaMethod;
            areturn
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            4    5     1     e  Ljava/lang/SecurityException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.SecurityException
    Exceptions:
      throws org.graalvm.compiler.debug.GraalError

  public void setExpandArraycopyLoop(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
        start local 1 // boolean b
         0: .line 602
            aload 0 /* this */
            iload 1 /* b */
            putfield org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates.expandArraycopyLoop:Z
         1: .line 603
            return
        end local 1 // boolean b
        end local 0 // org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/graalvm/compiler/replacements/arraycopy/ArrayCopySnippets$Templates;
            0    2     1     b  Z
    MethodParameters:
      Name  Flags
      b     
}
SourceFile: "ArrayCopySnippets.java"
NestHost: org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets
InnerClasses:
  public final GuardsStage = org.graalvm.compiler.nodes.StructuredGraph$GuardsStage of org.graalvm.compiler.nodes.StructuredGraph
  public abstract LoweringStage = org.graalvm.compiler.nodes.spi.LoweringTool$LoweringStage of org.graalvm.compiler.nodes.spi.LoweringTool
  public Group = org.graalvm.compiler.replacements.SnippetCounter$Group of org.graalvm.compiler.replacements.SnippetCounter
  public abstract Factory = org.graalvm.compiler.replacements.SnippetCounter$Group$Factory of org.graalvm.compiler.replacements.SnippetCounter$Group
  public abstract AbstractTemplates = org.graalvm.compiler.replacements.SnippetTemplate$AbstractTemplates of org.graalvm.compiler.replacements.SnippetTemplate
  public Arguments = org.graalvm.compiler.replacements.SnippetTemplate$Arguments of org.graalvm.compiler.replacements.SnippetTemplate
  public abstract SnippetInfo = org.graalvm.compiler.replacements.SnippetTemplate$SnippetInfo of org.graalvm.compiler.replacements.SnippetTemplate
  public abstract UsageReplacer = org.graalvm.compiler.replacements.SnippetTemplate$UsageReplacer of org.graalvm.compiler.replacements.SnippetTemplate
  private final ArrayCopyTypeCheck = org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$ArrayCopyTypeCheck of org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets
  Counters = org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Counters of org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets
  public Templates = org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets$Templates of org.graalvm.compiler.replacements.arraycopy.ArrayCopySnippets