src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/library_call.cpp	Thu Mar 16 19:06:16 2017
--- new/src/share/vm/opto/library_call.cpp	Thu Mar 16 19:06:16 2017

*** 238,248 **** --- 238,248 ---- bool inline_min_max(vmIntrinsics::ID id); bool inline_notify(vmIntrinsics::ID id); Node* generate_min_max(vmIntrinsics::ID id, Node* x, Node* y); // This returns Type::AnyPtr, RawPtr, or OopPtr. int classify_unsafe_addr(Node* &base, Node* &offset, BasicType type); ! Node* make_unsafe_address(Node*& base, Node* offset, BasicType type = T_ILLEGAL); // Helper for inline_unsafe_access. // Generates the guards that check whether the result of // Unsafe.getObject should be recorded in an SATB log buffer. void insert_pre_barrier(Node* base_oop, Node* offset, Node* pre_val, bool need_mem_bar);
*** 2060,2070 **** --- 2060,2070 ---- return Type::RawPtr; } else if (base_type->base() == Type::RawPtr) { return Type::RawPtr; } else if (base_type->isa_oopptr()) { // Base is never null => always a heap address. ! if (base_type->ptr() == TypePtr::NotNull) { ! if (!TypePtr::NULL_PTR->higher_equal(base_type)) { return Type::OopPtr; } // Offset is small => always a heap address. const TypeX* offset_type = _gvn.type(offset)->isa_intptr_t(); if (offset_type != NULL &&
*** 2093,2104 **** --- 2093,2106 ---- // We don't know if it's an on heap or off heap access. Fall back // to raw memory access. Node* raw = _gvn.transform(new CheckCastPPNode(control(), base, TypeRawPtr::BOTTOM)); return basic_plus_adr(top(), raw, offset); } else { // We know it's an on heap access so base can't be null + if (TypePtr::NULL_PTR->higher_equal(_gvn.type(base))) { + // We know it's an on heap access, so base can't be null base = must_be_not_null(base, true); + } return basic_plus_adr(base, offset); } } //--------------------------inline_number_methods-----------------------------
*** 4500,4511 **** --- 4502,4513 ---- Node* size = ConvL2X(argument(7)); // type: long assert(Unsafe_field_offset_to_byte_offset(11) == 11, "fieldOffset must be byte-scaled"); - Node* src = make_unsafe_address(src_ptr, src_off, T_ILLEGAL); - Node* dst = make_unsafe_address(dst_ptr, dst_off, T_ILLEGAL); // Conservatively insert a memory barrier on all memory slices. // Do not let writes of the copy source or destination float below the copy. insert_mem_bar(Op_MemBarCPUOrder);
*** 5662,5673 **** --- 5664,5675 ---- } Node* call; jvms()->set_should_reexecute(true); - Node* obja_adr = make_unsafe_address(obja, aoffset, T_ILLEGAL); - Node* objb_adr = make_unsafe_address(objb, boffset, T_ILLEGAL); call = make_runtime_call(RC_LEAF, OptoRuntime::vectorizedMismatch_Type(), stubAddr, stubName, TypePtr::BOTTOM, obja_adr, objb_adr, length, scale);

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