Mercurial > hg > truffle
comparison src/share/vm/opto/type.cpp @ 958:c7e94e8fff43
6880053: assert(alloc_obj->as_CheckCastPP()->type() != TypeInstPtr::NOTNULL)
Summary: Removed second CheckCastPP and use MembarCPUOrder after arraycopy to cloned object.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 10 Sep 2009 18:18:06 -0700 |
parents | bf3489cc0aa0 |
children | 148e5441d916 |
comparison
equal
deleted
inserted
replaced
957:159d56b94894 | 958:c7e94e8fff43 |
---|---|
2234 #endif | 2234 #endif |
2235 } | 2235 } |
2236 | 2236 |
2237 //------------------------------make------------------------------------------- | 2237 //------------------------------make------------------------------------------- |
2238 const TypeOopPtr *TypeOopPtr::make(PTR ptr, | 2238 const TypeOopPtr *TypeOopPtr::make(PTR ptr, |
2239 int offset) { | 2239 int offset, int instance_id) { |
2240 assert(ptr != Constant, "no constant generic pointers"); | 2240 assert(ptr != Constant, "no constant generic pointers"); |
2241 ciKlass* k = ciKlassKlass::make(); | 2241 ciKlass* k = ciKlassKlass::make(); |
2242 bool xk = false; | 2242 bool xk = false; |
2243 ciObject* o = NULL; | 2243 ciObject* o = NULL; |
2244 return (TypeOopPtr*)(new TypeOopPtr(OopPtr, ptr, k, xk, o, offset, InstanceBot))->hashcons(); | 2244 return (TypeOopPtr*)(new TypeOopPtr(OopPtr, ptr, k, xk, o, offset, instance_id))->hashcons(); |
2245 } | 2245 } |
2246 | 2246 |
2247 | 2247 |
2248 //------------------------------cast_to_ptr_type------------------------------- | 2248 //------------------------------cast_to_ptr_type------------------------------- |
2249 const Type *TypeOopPtr::cast_to_ptr_type(PTR ptr) const { | 2249 const Type *TypeOopPtr::cast_to_ptr_type(PTR ptr) const { |
2328 } | 2328 } |
2329 } | 2329 } |
2330 | 2330 |
2331 case OopPtr: { // Meeting to other OopPtrs | 2331 case OopPtr: { // Meeting to other OopPtrs |
2332 const TypeOopPtr *tp = t->is_oopptr(); | 2332 const TypeOopPtr *tp = t->is_oopptr(); |
2333 return make( meet_ptr(tp->ptr()), meet_offset(tp->offset()) ); | 2333 int instance_id = meet_instance_id(tp->instance_id()); |
2334 return make( meet_ptr(tp->ptr()), meet_offset(tp->offset()), instance_id ); | |
2334 } | 2335 } |
2335 | 2336 |
2336 case InstPtr: // For these, flip the call around to cut down | 2337 case InstPtr: // For these, flip the call around to cut down |
2337 case KlassPtr: // on the cases I have to handle. | 2338 case KlassPtr: // on the cases I have to handle. |
2338 case AryPtr: | 2339 case AryPtr: |
2799 } | 2800 } |
2800 } | 2801 } |
2801 | 2802 |
2802 case OopPtr: { // Meeting to OopPtrs | 2803 case OopPtr: { // Meeting to OopPtrs |
2803 // Found a OopPtr type vs self-InstPtr type | 2804 // Found a OopPtr type vs self-InstPtr type |
2804 const TypePtr *tp = t->is_oopptr(); | 2805 const TypeOopPtr *tp = t->is_oopptr(); |
2805 int offset = meet_offset(tp->offset()); | 2806 int offset = meet_offset(tp->offset()); |
2806 PTR ptr = meet_ptr(tp->ptr()); | 2807 PTR ptr = meet_ptr(tp->ptr()); |
2807 switch (tp->ptr()) { | 2808 switch (tp->ptr()) { |
2808 case TopPTR: | 2809 case TopPTR: |
2809 case AnyNull: { | 2810 case AnyNull: { |
2810 int instance_id = meet_instance_id(InstanceTop); | 2811 int instance_id = meet_instance_id(InstanceTop); |
2811 return make(ptr, klass(), klass_is_exact(), | 2812 return make(ptr, klass(), klass_is_exact(), |
2812 (ptr == Constant ? const_oop() : NULL), offset, instance_id); | 2813 (ptr == Constant ? const_oop() : NULL), offset, instance_id); |
2813 } | 2814 } |
2814 case NotNull: | 2815 case NotNull: |
2815 case BotPTR: | 2816 case BotPTR: { |
2816 return TypeOopPtr::make(ptr, offset); | 2817 int instance_id = meet_instance_id(tp->instance_id()); |
2818 return TypeOopPtr::make(ptr, offset, instance_id); | |
2819 } | |
2817 default: typerr(t); | 2820 default: typerr(t); |
2818 } | 2821 } |
2819 } | 2822 } |
2820 | 2823 |
2821 case AnyPtr: { // Meeting to AnyPtrs | 2824 case AnyPtr: { // Meeting to AnyPtrs |
3257 default: // All else is a mistake | 3260 default: // All else is a mistake |
3258 typerr(t); | 3261 typerr(t); |
3259 | 3262 |
3260 case OopPtr: { // Meeting to OopPtrs | 3263 case OopPtr: { // Meeting to OopPtrs |
3261 // Found a OopPtr type vs self-AryPtr type | 3264 // Found a OopPtr type vs self-AryPtr type |
3262 const TypePtr *tp = t->is_oopptr(); | 3265 const TypeOopPtr *tp = t->is_oopptr(); |
3263 int offset = meet_offset(tp->offset()); | 3266 int offset = meet_offset(tp->offset()); |
3264 PTR ptr = meet_ptr(tp->ptr()); | 3267 PTR ptr = meet_ptr(tp->ptr()); |
3265 switch (tp->ptr()) { | 3268 switch (tp->ptr()) { |
3266 case TopPTR: | 3269 case TopPTR: |
3267 case AnyNull: { | 3270 case AnyNull: { |
3268 int instance_id = meet_instance_id(InstanceTop); | 3271 int instance_id = meet_instance_id(InstanceTop); |
3269 return make(ptr, (ptr == Constant ? const_oop() : NULL), | 3272 return make(ptr, (ptr == Constant ? const_oop() : NULL), |
3270 _ary, _klass, _klass_is_exact, offset, instance_id); | 3273 _ary, _klass, _klass_is_exact, offset, instance_id); |
3271 } | 3274 } |
3272 case BotPTR: | 3275 case BotPTR: |
3273 case NotNull: | 3276 case NotNull: { |
3274 return TypeOopPtr::make(ptr, offset); | 3277 int instance_id = meet_instance_id(tp->instance_id()); |
3278 return TypeOopPtr::make(ptr, offset, instance_id); | |
3279 } | |
3275 default: ShouldNotReachHere(); | 3280 default: ShouldNotReachHere(); |
3276 } | 3281 } |
3277 } | 3282 } |
3278 | 3283 |
3279 case AnyPtr: { // Meeting two AnyPtrs | 3284 case AnyPtr: { // Meeting two AnyPtrs |