< prev index next >

src/share/vm/opto/arraycopynode.cpp

Print this page
rev 12906 : [mq]: gc_interface

*** 249,259 **** if (src_elem != dest_elem || dest_elem == T_VOID) { // We don't know if arguments are arrays of the same type return false; } ! if (dest_elem == T_OBJECT && (!is_alloc_tightly_coupled() || !GraphKit::use_ReduceInitialCardMarks())) { // It's an object array copy but we can't emit the card marking // that is needed return false; } --- 249,261 ---- if (src_elem != dest_elem || dest_elem == T_VOID) { // We don't know if arguments are arrays of the same type return false; } ! 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; }
*** 431,443 **** PhaseIterGVN* igvn = phase->is_IterGVN(); igvn->set_delay_transform(false); if (is_clonebasic()) { Node* out_mem = proj_out(TypeFunc::Memory); 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"); return false; } igvn->replace_node(out_mem->raw_out(0), mem); --- 433,446 ---- PhaseIterGVN* igvn = phase->is_IterGVN(); igvn->set_delay_transform(false); 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(code_gen->array_copy_requires_gc_barriers(T_OBJECT), "can only happen with card marking"); return false; } igvn->replace_node(out_mem->raw_out(0), mem);
< prev index next >