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