--- old/src/share/vm/opto/arraycopynode.cpp 2017-04-25 16:45:30.091173274 +0200 +++ new/src/share/vm/opto/arraycopynode.cpp 2017-04-25 16:45:29.971173278 +0200 @@ -251,7 +251,9 @@ return false; } - if (dest_elem == T_OBJECT && (!is_alloc_tightly_coupled() || !GraphKit::use_ReduceInitialCardMarks())) { + C2BarrierSetCodeGen* code_gen = Universe::heap()->barrier_set()->c2_code_gen(); + if (dest_elem == T_OBJECT && (!is_alloc_tightly_coupled() || + code_gen->array_copy_requires_gc_barriers(T_OBJECT))) { // It's an object array copy but we can't emit the card marking // that is needed return false; @@ -433,9 +435,10 @@ if (is_clonebasic()) { Node* out_mem = proj_out(TypeFunc::Memory); + C2BarrierSetCodeGen* code_gen = Universe::heap()->barrier_set()->c2_code_gen(); if (out_mem->outcnt() != 1 || !out_mem->raw_out(0)->is_MergeMem() || out_mem->raw_out(0)->outcnt() != 1 || !out_mem->raw_out(0)->raw_out(0)->is_MemBar()) { - assert(!GraphKit::use_ReduceInitialCardMarks(), "can only happen with card marking"); + assert(code_gen->array_copy_requires_gc_barriers(T_OBJECT), "can only happen with card marking"); return false; }