7184649: NPG: Implement another MetdataPtr case

Tue, 04 Sep 2012 23:27:55 +0200

author
roland
date
Tue, 04 Sep 2012 23:27:55 +0200
changeset 4040
ca11db66f9de
parent 4039
46c017102631
child 4041
d17383603741

7184649: NPG: Implement another MetdataPtr case
Summary: xmeet when both inputs are MetadataPtr.
Reviewed-by: kvn

src/share/vm/opto/type.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/opto/type.cpp	Tue Sep 04 13:01:03 2012 +0200
     1.2 +++ b/src/share/vm/opto/type.cpp	Tue Sep 04 23:27:55 2012 +0200
     1.3 @@ -3913,10 +3913,25 @@
     1.4    case AryPtr:
     1.5      return TypePtr::BOTTOM;     // Oop meet raw is not well defined
     1.6  
     1.7 -  case MetadataPtr:
     1.8 -    ShouldNotReachHere();
     1.9 +  case MetadataPtr: {
    1.10 +    const TypeMetadataPtr *tp = t->is_metadataptr();
    1.11 +    int offset = meet_offset(tp->offset());
    1.12 +    PTR tptr = tp->ptr();
    1.13 +    PTR ptr = meet_ptr(tptr);
    1.14 +    ciMetadata* md = (tptr == TopPTR) ? metadata() : tp->metadata();
    1.15 +    if (tptr == TopPTR || _ptr == TopPTR ||
    1.16 +        metadata()->equals(tp->metadata())) {
    1.17 +      return make(ptr, md, offset);
    1.18 +    }
    1.19 +    // metadata is different
    1.20 +    if( ptr == Constant ) {  // Cannot be equal constants, so...
    1.21 +      if( tptr == Constant && _ptr != Constant)  return t;
    1.22 +      if( _ptr == Constant && tptr != Constant)  return this;
    1.23 +      ptr = NotNull;            // Fall down in lattice
    1.24 +    }
    1.25 +    return make(ptr, NULL, offset);
    1.26      break;
    1.27 -
    1.28 +  }
    1.29    } // End of switch
    1.30    return this;                  // Return the double constant
    1.31  }

mercurial