hotspot/src/share/vm/opto/type.cpp
changeset 767 64fb1fd7186d
parent 609 14b769235815
child 769 78e5090c7a20
--- a/hotspot/src/share/vm/opto/type.cpp	Mon Jun 23 18:21:18 2008 -0700
+++ b/hotspot/src/share/vm/opto/type.cpp	Tue Jun 24 10:43:29 2008 -0700
@@ -168,7 +168,20 @@
 const Type *Type::make( enum TYPES t ) {
   return (new Type(t))->hashcons();
 }
-
+/*
+//------------------------------make_ptr---------------------------------------
+// Returns this ptr type or the equivalent ptr type for this compressed pointer.
+const TypePtr* Type::make_ptr() const {
+  return (_base == NarrowOop) ? is_narrowoop()->make_oopptr() : is_ptr();
+}
+
+//------------------------------make_narrowoop---------------------------------
+// Returns this compressed pointer or the equivalent compressed version
+// of this pointer type.
+const TypeNarrowOop* Type::make_narrowoop() const {
+  return (_base == NarrowOop) ? is_narrowoop() : TypeNarrowOop::make(is_ptr());
+}
+*/
 //------------------------------cmp--------------------------------------------
 int Type::cmp( const Type *const t1, const Type *const t2 ) {
   if( t1->_base != t2->_base )
@@ -491,14 +504,8 @@
 // commutative and the lattice is symmetric.
 const Type *Type::meet( const Type *t ) const {
   if (isa_narrowoop() && t->isa_narrowoop()) {
-    const Type* result = is_narrowoop()->make_oopptr()->meet(t->is_narrowoop()->make_oopptr());
-    if (result->isa_oopptr()) {
-      return result->isa_oopptr()->make_narrowoop();
-    } else if (result == TypePtr::NULL_PTR) {
-      return TypeNarrowOop::NULL_PTR;
-    } else {
-      return result;
-    }
+    const Type* result = make_ptr()->meet(t->make_ptr());
+    return result->make_narrowoop();
   }
 
   const Type *mt = xmeet(t);
@@ -1764,7 +1771,7 @@
 //------------------------------make-------------------------------------------
 const TypeAry *TypeAry::make( const Type *elem, const TypeInt *size) {
   if (UseCompressedOops && elem->isa_oopptr()) {
-    elem = elem->is_oopptr()->make_narrowoop();
+    elem = elem->make_narrowoop();
   }
   size = normalize_array_size(size);
   return (TypeAry*)(new TypeAry(elem,size))->hashcons();
@@ -1849,9 +1856,8 @@
   if (_elem == BOTTOM)      return false;  // general array not exact
   if (_elem == TOP   )      return false;  // inverted general array not exact
   const TypeOopPtr*  toop = NULL;
-  if (UseCompressedOops) {
-    const TypeNarrowOop* noop = _elem->isa_narrowoop();
-    if (noop) toop = noop->make_oopptr()->isa_oopptr();
+  if (UseCompressedOops && _elem->isa_narrowoop()) {
+    toop = _elem->make_ptr()->isa_oopptr();
   } else {
     toop = _elem->isa_oopptr();
   }
@@ -1861,16 +1867,18 @@
   if (!tklass->is_loaded()) return false;  // unloaded class
   const TypeInstPtr* tinst;
   if (_elem->isa_narrowoop())
-    tinst = _elem->is_narrowoop()->make_oopptr()->isa_instptr();
+    tinst = _elem->make_ptr()->isa_instptr();
   else
     tinst = _elem->isa_instptr();
-  if (tinst)                return tklass->as_instance_klass()->is_final();
+  if (tinst)
+    return tklass->as_instance_klass()->is_final();
   const TypeAryPtr*  tap;
   if (_elem->isa_narrowoop())
-    tap = _elem->is_narrowoop()->make_oopptr()->isa_aryptr();
+    tap = _elem->make_ptr()->isa_aryptr();
   else
     tap = _elem->isa_aryptr();
-  if (tap)                  return tap->ary()->ary_must_be_exact();
+  if (tap)
+    return tap->ary()->ary_must_be_exact();
   return false;
 }
 
@@ -2579,10 +2587,6 @@
   return make( _ptr, xadd_offset(offset) );
 }
 
-const TypeNarrowOop* TypeOopPtr::make_narrowoop() const {
-  return TypeNarrowOop::make(this);
-}
-
 int TypeOopPtr::meet_instance(int iid) const {
   if (iid == 0) {
     return (_instance_id < 0)  ? _instance_id : UNKNOWN_INSTANCE;
@@ -3494,7 +3498,7 @@
     return this;
 
   case NarrowOop: {
-    const Type* result = _ooptype->xmeet(t->is_narrowoop()->make_oopptr());
+    const Type* result = _ooptype->xmeet(t->make_ptr());
     if (result->isa_ptr()) {
       return TypeNarrowOop::make(result->is_ptr());
     }
@@ -3604,7 +3608,7 @@
   const TypeAryPtr *tary;
   const Type* el = elem();
   if (el->isa_narrowoop()) {
-    el = el->is_narrowoop()->make_oopptr();
+    el = el->make_ptr();
   }
 
   // Get element klass