8221355: Performance regression after JDK-8155635 backport into 8u
Reviewed-by: shade, roland
diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp
index 489a18f..5f2bb30 100644
--- a/hotspot/src/share/vm/opto/library_call.cpp
+++ b/hotspot/src/share/vm/opto/library_call.cpp
@@ -2608,9 +2608,10 @@
Node* offset = top();
Node* val;
+ // The base is either a Java object or a value produced by Unsafe.staticFieldBase
+ Node* base = argument(1); // type: oop
+
if (!is_native_ptr) {
- // The base is either a Java object or a value produced by Unsafe.staticFieldBase
- Node* base = argument(1); // type: oop
// The offset is a value produced by Unsafe.staticFieldOffset or Unsafe.objectFieldOffset
offset = argument(2); // type: long
// We currently rely on the cookies produced by Unsafe.xxxFieldOffset
@@ -2630,9 +2631,7 @@
val = is_store ? argument(3) : NULL;
}
- // Can base be NULL? Otherwise, always on-heap access.
- bool can_access_non_heap = TypePtr::NULL_PTR->higher_equal(_gvn.type(heap_base_oop));
- if (can_access_non_heap && type == T_OBJECT) {
+ if ((_gvn.type(base)->isa_ptr() == TypePtr::NULL_PTR) && type == T_OBJECT) {
return false; // off-heap oop accesses are not supported
}