src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/library_call.cpp	Wed Sep  9 15:18:52 2009
--- new/src/share/vm/opto/library_call.cpp	Wed Sep  9 15:18:52 2009

*** 3892,3902 **** --- 3892,3902 ---- // Helper function for inline_native_clone. void LibraryCallKit::copy_to_clone(Node* obj, Node* alloc_obj, Node* obj_size, bool is_array, bool card_mark) { assert(obj_size != NULL, ""); Node* raw_obj = alloc_obj->in(1); assert(alloc_obj->is_CheckCastPP() && raw_obj->is_Proj() && raw_obj->in(0)->is_Allocate(), ""); ! assert(alloc_obj->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL, "should be more precise than Object"); ! assert(alloc_obj->as_CheckCastPP()->type() != TypeOopPtr::NOTNULL, "should be more precise than Object"); if (ReduceBulkZeroing) { // We will be completely responsible for initializing this object - // mark Initialize node as complete. AllocateNode* alloc = AllocateNode::Ideal_allocation(alloc_obj, &_gvn);
*** 3906,3916 **** --- 3906,3916 ---- // Cast to Object for arraycopy. // We can't use the original CheckCastPP since it should be moved // after the arraycopy to prevent stores flowing above it. Node* new_obj = new(C, 2) CheckCastPPNode(alloc_obj->in(0), raw_obj, ! TypeInstPtr::NOTNULL); ! TypeOopPtr::NOTNULL); new_obj = _gvn.transform(new_obj); // Substitute in the locally valid dest_oop. replace_in_map(alloc_obj, new_obj); // Copy the fastest available way.
*** 4446,4463 **** --- 4446,4463 ---- && alloc->maybe_set_complete(&_gvn)) { // "You break it, you buy it." InitializeNode* init = alloc->initialization(); assert(init->is_complete(), "we just did this"); assert(dest->is_CheckCastPP(), "sanity"); ! assert(dest->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL, "type should be more precise than Object"); ! assert(dest->as_CheckCastPP()->type() != TypeOopPtr::NOTNULL, "type should be more precise than Object"); assert(dest->in(0)->in(0) == init, "dest pinned"); // Cast to Object for arraycopy. // We can't use the original CheckCastPP since it should be moved // after the arraycopy to prevent stores flowing above it. Node* new_obj = new(C, 2) CheckCastPPNode(dest->in(0), dest->in(1), ! TypeInstPtr::NOTNULL); ! TypeOopPtr::NOTNULL); dest = _gvn.transform(new_obj); // Substitute in the locally valid dest_oop. replace_in_map(original_dest, dest); adr_type = TypeRawPtr::BOTTOM; // all initializations are into raw memory // From this point on, every exit path is responsible for

src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File