src/hotspot/share/opto/arraycopynode.cpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 55003 bec1bb783c7e
child 58679 9c3209ff7550
equal deleted inserted replaced
58677:13588c901957 58678:9cf78a70fa4f
   134       // cloning an array we'll do it element by element. If the
   134       // cloning an array we'll do it element by element. If the
   135       // length input to ArrayCopyNode is constant, length of input
   135       // length input to ArrayCopyNode is constant, length of input
   136       // array must be too.
   136       // array must be too.
   137 
   137 
   138       assert((get_length_if_constant(phase) == -1) == !ary_src->size()->is_con() ||
   138       assert((get_length_if_constant(phase) == -1) == !ary_src->size()->is_con() ||
   139              phase->is_IterGVN(), "inconsistent");
   139              phase->is_IterGVN() || StressReflectiveCode, "inconsistent");
   140 
   140 
   141       if (ary_src->size()->is_con()) {
   141       if (ary_src->size()->is_con()) {
   142         return ary_src->size()->get_con();
   142         return ary_src->size()->get_con();
   143       }
   143       }
   144       return -1;
   144       return -1;
   266       return false;
   266       return false;
   267     }
   267     }
   268 
   268 
   269     BasicType src_elem  = ary_src->klass()->as_array_klass()->element_type()->basic_type();
   269     BasicType src_elem  = ary_src->klass()->as_array_klass()->element_type()->basic_type();
   270     BasicType dest_elem = ary_dest->klass()->as_array_klass()->element_type()->basic_type();
   270     BasicType dest_elem = ary_dest->klass()->as_array_klass()->element_type()->basic_type();
   271     if (src_elem  == T_ARRAY)  src_elem  = T_OBJECT;
   271     if (is_reference_type(src_elem))   src_elem  = T_OBJECT;
   272     if (dest_elem == T_ARRAY)  dest_elem = T_OBJECT;
   272     if (is_reference_type(dest_elem))  dest_elem = T_OBJECT;
   273 
   273 
   274     if (src_elem != dest_elem || dest_elem == T_VOID) {
   274     if (src_elem != dest_elem || dest_elem == T_VOID) {
   275       // We don't know if arguments are arrays of the same type
   275       // We don't know if arguments are arrays of the same type
   276       return false;
   276       return false;
   277     }
   277     }
   326     adr_dest = dest;
   326     adr_dest = dest;
   327     base_dest = dest->in(AddPNode::Base);
   327     base_dest = dest->in(AddPNode::Base);
   328 
   328 
   329     assert(phase->type(src->in(AddPNode::Offset))->is_intptr_t()->get_con() == phase->type(dest->in(AddPNode::Offset))->is_intptr_t()->get_con(), "same start offset?");
   329     assert(phase->type(src->in(AddPNode::Offset))->is_intptr_t()->get_con() == phase->type(dest->in(AddPNode::Offset))->is_intptr_t()->get_con(), "same start offset?");
   330     BasicType elem = ary_src->klass()->as_array_klass()->element_type()->basic_type();
   330     BasicType elem = ary_src->klass()->as_array_klass()->element_type()->basic_type();
   331     if (elem == T_ARRAY)  elem = T_OBJECT;
   331     if (is_reference_type(elem))  elem = T_OBJECT;
   332 
   332 
   333     BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
   333     BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
   334     if (bs->array_copy_requires_gc_barriers(true, elem, true, BarrierSetC2::Optimization)) {
   334     if (bs->array_copy_requires_gc_barriers(true, elem, true, BarrierSetC2::Optimization)) {
   335       return false;
   335       return false;
   336     }
   336     }