< prev index next >
src/share/vm/opto/arraycopynode.cpp
Print this page
rev 12906 : [mq]: gc_interface
@@ -249,11 +249,13 @@
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())) {
+ 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,13 +433,14 @@
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(!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;
}
igvn->replace_node(out_mem->raw_out(0), mem);
< prev index next >