< 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 >