Mon, 06 Jul 2009 15:53:30 -0700
6857661: 64-bit server VM: assert(is_Initialize(),"invalid node class")
Summary: Move the secondary raw memory barrier to the correct place in generate_arraycopy().
Reviewed-by: never
src/share/vm/opto/library_call.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/library_call.cpp Mon Jul 06 12:54:17 2009 -0700 1.2 +++ b/src/share/vm/opto/library_call.cpp Mon Jul 06 15:53:30 2009 -0700 1.3 @@ -4500,27 +4500,27 @@ 1.4 generate_negative_guard(copy_length, slow_region); 1.5 } 1.6 1.7 + // copy_length is 0. 1.8 if (!stopped() && must_clear_dest) { 1.9 Node* dest_length = alloc->in(AllocateNode::ALength); 1.10 if (_gvn.eqv_uncast(copy_length, dest_length) 1.11 || _gvn.find_int_con(dest_length, 1) <= 0) { 1.12 - // There is no zeroing to do. 1.13 + // There is no zeroing to do. No need for a secondary raw memory barrier. 1.14 } else { 1.15 // Clear the whole thing since there are no source elements to copy. 1.16 generate_clear_array(adr_type, dest, basic_elem_type, 1.17 intcon(0), NULL, 1.18 alloc->in(AllocateNode::AllocSize)); 1.19 + // Use a secondary InitializeNode as raw memory barrier. 1.20 + // Currently it is needed only on this path since other 1.21 + // paths have stub or runtime calls as raw memory barriers. 1.22 + InitializeNode* init = insert_mem_bar_volatile(Op_Initialize, 1.23 + Compile::AliasIdxRaw, 1.24 + top())->as_Initialize(); 1.25 + init->set_complete(&_gvn); // (there is no corresponding AllocateNode) 1.26 } 1.27 } 1.28 1.29 - // Use a secondary InitializeNode as raw memory barrier. 1.30 - // Currently it is needed only on this path since other 1.31 - // paths have stub or runtime calls as raw memory barriers. 1.32 - InitializeNode* init = insert_mem_bar_volatile(Op_Initialize, 1.33 - Compile::AliasIdxRaw, 1.34 - top())->as_Initialize(); 1.35 - init->set_complete(&_gvn); // (there is no corresponding AllocateNode) 1.36 - 1.37 // Present the results of the fast call. 1.38 result_region->init_req(zero_path, control()); 1.39 result_i_o ->init_req(zero_path, i_o());