src/share/vm/opto/type.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/type.cpp	Thu Sep 10 18:03:30 2009
--- new/src/share/vm/opto/type.cpp	Thu Sep 10 18:03:30 2009

*** 2234,2249 **** --- 2234,2249 ---- #endif } //------------------------------make------------------------------------------- const TypeOopPtr *TypeOopPtr::make(PTR ptr, ! int offset, int instance_id) { assert(ptr != Constant, "no constant generic pointers"); ciKlass* k = ciKlassKlass::make(); bool xk = false; ciObject* o = NULL; ! return (TypeOopPtr*)(new TypeOopPtr(OopPtr, ptr, k, xk, o, offset, InstanceBot))->hashcons(); ! return (TypeOopPtr*)(new TypeOopPtr(OopPtr, ptr, k, xk, o, offset, instance_id))->hashcons(); } //------------------------------cast_to_ptr_type------------------------------- const Type *TypeOopPtr::cast_to_ptr_type(PTR ptr) const {
*** 2328,2338 **** --- 2328,2339 ---- } } case OopPtr: { // Meeting to other OopPtrs const TypeOopPtr *tp = t->is_oopptr(); ! return make( meet_ptr(tp->ptr()), meet_offset(tp->offset()) ); ! int instance_id = meet_instance_id(tp->instance_id()); + return make( meet_ptr(tp->ptr()), meet_offset(tp->offset()), instance_id ); } case InstPtr: // For these, flip the call around to cut down case KlassPtr: // on the cases I have to handle. case AryPtr:
*** 2799,2809 **** --- 2800,2810 ---- } } case OopPtr: { // Meeting to OopPtrs // Found a OopPtr type vs self-InstPtr type ! const TypePtr *tp = t->is_oopptr(); ! const TypeOopPtr *tp = t->is_oopptr(); int offset = meet_offset(tp->offset()); PTR ptr = meet_ptr(tp->ptr()); switch (tp->ptr()) { case TopPTR: case AnyNull: {
*** 2810,2821 **** --- 2811,2824 ---- int instance_id = meet_instance_id(InstanceTop); return make(ptr, klass(), klass_is_exact(), (ptr == Constant ? const_oop() : NULL), offset, instance_id); } case NotNull: ! case BotPTR: { ! return TypeOopPtr::make(ptr, offset); ! int instance_id = meet_instance_id(tp->instance_id()); + return TypeOopPtr::make(ptr, offset, instance_id); + } default: typerr(t); } } case AnyPtr: { // Meeting to AnyPtrs
*** 3257,3267 **** --- 3260,3270 ---- default: // All else is a mistake typerr(t); case OopPtr: { // Meeting to OopPtrs // Found a OopPtr type vs self-AryPtr type ! const TypePtr *tp = t->is_oopptr(); ! const TypeOopPtr *tp = t->is_oopptr(); int offset = meet_offset(tp->offset()); PTR ptr = meet_ptr(tp->ptr()); switch (tp->ptr()) { case TopPTR: case AnyNull: {
*** 3268,3279 **** --- 3271,3284 ---- int instance_id = meet_instance_id(InstanceTop); return make(ptr, (ptr == Constant ? const_oop() : NULL), _ary, _klass, _klass_is_exact, offset, instance_id); } case BotPTR: ! case NotNull: { ! return TypeOopPtr::make(ptr, offset); ! int instance_id = meet_instance_id(tp->instance_id()); + return TypeOopPtr::make(ptr, offset, instance_id); + } default: ShouldNotReachHere(); } } case AnyPtr: { // Meeting two AnyPtrs

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