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