comparison src/share/vm/opto/type.cpp @ 6728:ca11db66f9de

7184649: NPG: Implement another MetdataPtr case Summary: xmeet when both inputs are MetadataPtr. Reviewed-by: kvn
author roland
date Tue, 04 Sep 2012 23:27:55 +0200
parents da91efe96a93
children aed758eda82a
comparison
equal deleted inserted replaced
6727:46c017102631 6728:ca11db66f9de
3911 case OopPtr: 3911 case OopPtr:
3912 case InstPtr: 3912 case InstPtr:
3913 case AryPtr: 3913 case AryPtr:
3914 return TypePtr::BOTTOM; // Oop meet raw is not well defined 3914 return TypePtr::BOTTOM; // Oop meet raw is not well defined
3915 3915
3916 case MetadataPtr: 3916 case MetadataPtr: {
3917 ShouldNotReachHere(); 3917 const TypeMetadataPtr *tp = t->is_metadataptr();
3918 int offset = meet_offset(tp->offset());
3919 PTR tptr = tp->ptr();
3920 PTR ptr = meet_ptr(tptr);
3921 ciMetadata* md = (tptr == TopPTR) ? metadata() : tp->metadata();
3922 if (tptr == TopPTR || _ptr == TopPTR ||
3923 metadata()->equals(tp->metadata())) {
3924 return make(ptr, md, offset);
3925 }
3926 // metadata is different
3927 if( ptr == Constant ) { // Cannot be equal constants, so...
3928 if( tptr == Constant && _ptr != Constant) return t;
3929 if( _ptr == Constant && tptr != Constant) return this;
3930 ptr = NotNull; // Fall down in lattice
3931 }
3932 return make(ptr, NULL, offset);
3918 break; 3933 break;
3919 3934 }
3920 } // End of switch 3935 } // End of switch
3921 return this; // Return the double constant 3936 return this; // Return the double constant
3922 } 3937 }
3923 3938
3924 3939