6857661: 64-bit server VM: assert(is_Initialize(),"invalid node class")

Mon, 06 Jul 2009 15:53:30 -0700

author
kvn
date
Mon, 06 Jul 2009 15:53:30 -0700
changeset 1271
4325cdaa78ad
parent 1270
73dac61fe300
child 1272
f0bd02f95856

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());

mercurial