Wed, 01 Jul 2009 12:22:23 -0700
6856025: assert(_base >= OopPtr && _base <= KlassPtr,"Not a Java pointer")
Reviewed-by: kvn
1.1 --- a/src/share/vm/adlc/output_h.cpp Fri Jun 26 16:14:31 2009 -0700 1.2 +++ b/src/share/vm/adlc/output_h.cpp Wed Jul 01 12:22:23 2009 -0700 1.3 @@ -1367,11 +1367,11 @@ 1.4 else if (!strcmp(oper->ideal_type(_globalNames), "ConN")) { 1.5 // Access the locally stored constant 1.6 fprintf(fp," virtual intptr_t constant() const {"); 1.7 - fprintf(fp, " return _c0->make_oopptr()->get_con();"); 1.8 + fprintf(fp, " return _c0->get_ptrtype()->get_con();"); 1.9 fprintf(fp, " }\n"); 1.10 // Generate query to determine if this pointer is an oop 1.11 fprintf(fp," virtual bool constant_is_oop() const {"); 1.12 - fprintf(fp, " return _c0->make_oopptr()->isa_oop_ptr();"); 1.13 + fprintf(fp, " return _c0->get_ptrtype()->isa_oop_ptr();"); 1.14 fprintf(fp, " }\n"); 1.15 } 1.16 else if (!strcmp(oper->ideal_type(_globalNames), "ConL")) {
2.1 --- a/src/share/vm/opto/graphKit.cpp Fri Jun 26 16:14:31 2009 -0700 2.2 +++ b/src/share/vm/opto/graphKit.cpp Wed Jul 01 12:22:23 2009 -0700 2.3 @@ -1480,7 +1480,7 @@ 2.4 } 2.5 } 2.6 } else if (adr_type->isa_aryptr()) { 2.7 - val_type = adr_type->is_aryptr()->elem()->isa_oopptr(); 2.8 + val_type = adr_type->is_aryptr()->elem()->make_oopptr(); 2.9 } 2.10 if (val_type == NULL) { 2.11 val_type = TypeInstPtr::BOTTOM;
3.1 --- a/src/share/vm/opto/library_call.cpp Fri Jun 26 16:14:31 2009 -0700 3.2 +++ b/src/share/vm/opto/library_call.cpp Wed Jul 01 12:22:23 2009 -0700 3.3 @@ -2393,7 +2393,7 @@ 3.4 case T_OBJECT: 3.5 // reference stores need a store barrier. 3.6 // (They don't if CAS fails, but it isn't worth checking.) 3.7 - pre_barrier(control(), base, adr, alias_idx, newval, value_type->is_oopptr(), T_OBJECT); 3.8 + pre_barrier(control(), base, adr, alias_idx, newval, value_type->make_oopptr(), T_OBJECT); 3.9 #ifdef _LP64 3.10 if (adr->bottom_type()->is_ptr_to_narrowoop()) { 3.11 Node *newval_enc = _gvn.transform(new (C, 2) EncodePNode(newval, newval->bottom_type()->make_narrowoop()));
4.1 --- a/src/share/vm/opto/parse2.cpp Fri Jun 26 16:14:31 2009 -0700 4.2 +++ b/src/share/vm/opto/parse2.cpp Wed Jul 01 12:22:23 2009 -0700 4.3 @@ -1565,7 +1565,7 @@ 4.4 c = pop(); // Oop to store 4.5 b = pop(); // index (already used) 4.6 a = pop(); // the array itself 4.7 - const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->is_oopptr(); 4.8 + const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr(); 4.9 const TypeAryPtr* adr_type = TypeAryPtr::OOPS; 4.10 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT); 4.11 break;
5.1 --- a/src/share/vm/opto/parse3.cpp Fri Jun 26 16:14:31 2009 -0700 5.2 +++ b/src/share/vm/opto/parse3.cpp Wed Jul 01 12:22:23 2009 -0700 5.3 @@ -361,7 +361,7 @@ 5.4 guarantee(length_con >= 0, "non-constant multianewarray"); 5.5 ciArrayKlass* array_klass_1 = array_klass->as_obj_array_klass()->element_klass()->as_array_klass(); 5.6 const TypePtr* adr_type = TypeAryPtr::OOPS; 5.7 - const TypeOopPtr* elemtype = _gvn.type(array)->is_aryptr()->elem()->is_oopptr(); 5.8 + const TypeOopPtr* elemtype = _gvn.type(array)->is_aryptr()->elem()->make_oopptr(); 5.9 const intptr_t header = arrayOopDesc::base_offset_in_bytes(T_OBJECT); 5.10 for (jint i = 0; i < length_con; i++) { 5.11 Node* elem = expand_multianewarray(array_klass_1, &lengths[1], ndimensions-1, nargs);
6.1 --- a/src/share/vm/opto/type.cpp Fri Jun 26 16:14:31 2009 -0700 6.2 +++ b/src/share/vm/opto/type.cpp Wed Jul 01 12:22:23 2009 -0700 6.3 @@ -3484,27 +3484,27 @@ 6.4 //------------------------------hash------------------------------------------- 6.5 // Type-specific hashing function. 6.6 int TypeNarrowOop::hash(void) const { 6.7 - return _ooptype->hash() + 7; 6.8 + return _ptrtype->hash() + 7; 6.9 } 6.10 6.11 6.12 bool TypeNarrowOop::eq( const Type *t ) const { 6.13 const TypeNarrowOop* tc = t->isa_narrowoop(); 6.14 if (tc != NULL) { 6.15 - if (_ooptype->base() != tc->_ooptype->base()) { 6.16 + if (_ptrtype->base() != tc->_ptrtype->base()) { 6.17 return false; 6.18 } 6.19 - return tc->_ooptype->eq(_ooptype); 6.20 + return tc->_ptrtype->eq(_ptrtype); 6.21 } 6.22 return false; 6.23 } 6.24 6.25 bool TypeNarrowOop::singleton(void) const { // TRUE if type is a singleton 6.26 - return _ooptype->singleton(); 6.27 + return _ptrtype->singleton(); 6.28 } 6.29 6.30 bool TypeNarrowOop::empty(void) const { 6.31 - return _ooptype->empty(); 6.32 + return _ptrtype->empty(); 6.33 } 6.34 6.35 //------------------------------xmeet------------------------------------------ 6.36 @@ -3538,7 +3538,7 @@ 6.37 return this; 6.38 6.39 case NarrowOop: { 6.40 - const Type* result = _ooptype->xmeet(t->make_ptr()); 6.41 + const Type* result = _ptrtype->xmeet(t->make_ptr()); 6.42 if (result->isa_ptr()) { 6.43 return TypeNarrowOop::make(result->is_ptr()); 6.44 } 6.45 @@ -3554,13 +3554,13 @@ 6.46 } 6.47 6.48 const Type *TypeNarrowOop::xdual() const { // Compute dual right now. 6.49 - const TypePtr* odual = _ooptype->dual()->is_ptr(); 6.50 + const TypePtr* odual = _ptrtype->dual()->is_ptr(); 6.51 return new TypeNarrowOop(odual); 6.52 } 6.53 6.54 const Type *TypeNarrowOop::filter( const Type *kills ) const { 6.55 if (kills->isa_narrowoop()) { 6.56 - const Type* ft =_ooptype->filter(kills->is_narrowoop()->_ooptype); 6.57 + const Type* ft =_ptrtype->filter(kills->is_narrowoop()->_ptrtype); 6.58 if (ft->empty()) 6.59 return Type::TOP; // Canonical empty value 6.60 if (ft->isa_ptr()) { 6.61 @@ -3568,7 +3568,7 @@ 6.62 } 6.63 return ft; 6.64 } else if (kills->isa_ptr()) { 6.65 - const Type* ft = _ooptype->join(kills); 6.66 + const Type* ft = _ptrtype->join(kills); 6.67 if (ft->empty()) 6.68 return Type::TOP; // Canonical empty value 6.69 return ft; 6.70 @@ -3579,13 +3579,13 @@ 6.71 6.72 6.73 intptr_t TypeNarrowOop::get_con() const { 6.74 - return _ooptype->get_con(); 6.75 + return _ptrtype->get_con(); 6.76 } 6.77 6.78 #ifndef PRODUCT 6.79 void TypeNarrowOop::dump2( Dict & d, uint depth, outputStream *st ) const { 6.80 st->print("narrowoop: "); 6.81 - _ooptype->dump2(d, depth, st); 6.82 + _ptrtype->dump2(d, depth, st); 6.83 } 6.84 #endif 6.85
7.1 --- a/src/share/vm/opto/type.hpp Fri Jun 26 16:14:31 2009 -0700 7.2 +++ b/src/share/vm/opto/type.hpp Wed Jul 01 12:22:23 2009 -0700 7.3 @@ -232,6 +232,11 @@ 7.4 7.5 // Returns this ptr type or the equivalent ptr type for this compressed pointer. 7.6 const TypePtr* make_ptr() const; 7.7 + 7.8 + // Returns this oopptr type or the equivalent oopptr type for this compressed pointer. 7.9 + // Asserts if the underlying type is not an oopptr or narrowoop. 7.10 + const TypeOopPtr* make_oopptr() const; 7.11 + 7.12 // Returns this compressed pointer or the equivalent compressed version 7.13 // of this pointer type. 7.14 const TypeNarrowOop* make_narrowoop() const; 7.15 @@ -932,13 +937,13 @@ 7.16 // between the normal and the compressed form. 7.17 class TypeNarrowOop : public Type { 7.18 protected: 7.19 - const TypePtr* _ooptype; // Could be TypePtr::NULL_PTR 7.20 + const TypePtr* _ptrtype; // Could be TypePtr::NULL_PTR 7.21 7.22 - TypeNarrowOop( const TypePtr* ooptype): Type(NarrowOop), 7.23 - _ooptype(ooptype) { 7.24 - assert(ooptype->offset() == 0 || 7.25 - ooptype->offset() == OffsetBot || 7.26 - ooptype->offset() == OffsetTop, "no real offsets"); 7.27 + TypeNarrowOop( const TypePtr* ptrtype): Type(NarrowOop), 7.28 + _ptrtype(ptrtype) { 7.29 + assert(ptrtype->offset() == 0 || 7.30 + ptrtype->offset() == OffsetBot || 7.31 + ptrtype->offset() == OffsetTop, "no real offsets"); 7.32 } 7.33 public: 7.34 virtual bool eq( const Type *t ) const; 7.35 @@ -962,8 +967,8 @@ 7.36 } 7.37 7.38 // returns the equivalent ptr type for this compressed pointer 7.39 - const TypePtr *make_oopptr() const { 7.40 - return _ooptype; 7.41 + const TypePtr *get_ptrtype() const { 7.42 + return _ptrtype; 7.43 } 7.44 7.45 static const TypeNarrowOop *BOTTOM; 7.46 @@ -1150,10 +1155,14 @@ 7.47 } 7.48 7.49 inline const TypePtr* Type::make_ptr() const { 7.50 - return (_base == NarrowOop) ? is_narrowoop()->make_oopptr() : 7.51 + return (_base == NarrowOop) ? is_narrowoop()->get_ptrtype() : 7.52 (isa_ptr() ? is_ptr() : NULL); 7.53 } 7.54 7.55 +inline const TypeOopPtr* Type::make_oopptr() const { 7.56 + return (_base == NarrowOop) ? is_narrowoop()->get_ptrtype()->is_oopptr() : is_oopptr(); 7.57 +} 7.58 + 7.59 inline const TypeNarrowOop* Type::make_narrowoop() const { 7.60 return (_base == NarrowOop) ? is_narrowoop() : 7.61 (isa_ptr() ? TypeNarrowOop::make(is_ptr()) : NULL);