The intersection of arraycopy-kinds and array_copy_requires_gc_barriers-method is the source of much unnecessary complexity. I suggest just having just one clone kind, and some methods to conveniently return what type we are cloning. The rest should be handled in array_copy_requires_gc_barriers.
This should also make it easier to reduce clone of array to allocation + ordinary arraycopy.
This should also make it easier to reduce clone of array to allocation + ordinary arraycopy.