comparison src/share/vm/opto/subnode.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents ae9241bbce4a
children e626685e9f6c
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
1 /* 1 /*
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
662 !klass1->as_obj_array_klass()->base_element_klass()->is_interface())) { 662 !klass1->as_obj_array_klass()->base_element_klass()->is_interface())) {
663 bool unrelated_classes = false; 663 bool unrelated_classes = false;
664 // See if neither subclasses the other, or if the class on top 664 // See if neither subclasses the other, or if the class on top
665 // is precise. In either of these cases, the compare is known 665 // is precise. In either of these cases, the compare is known
666 // to fail if at least one of the pointers is provably not null. 666 // to fail if at least one of the pointers is provably not null.
667 if (klass0->equals(klass1) || // if types are unequal but klasses are 667 if (klass0->equals(klass1)) { // if types are unequal but klasses are equal
668 !klass0->is_java_klass() || // types not part of Java language?
669 !klass1->is_java_klass()) { // types not part of Java language?
670 // Do nothing; we know nothing for imprecise types 668 // Do nothing; we know nothing for imprecise types
671 } else if (klass0->is_subtype_of(klass1)) { 669 } else if (klass0->is_subtype_of(klass1)) {
672 // If klass1's type is PRECISE, then classes are unrelated. 670 // If klass1's type is PRECISE, then classes are unrelated.
673 unrelated_classes = xklass1; 671 unrelated_classes = xklass1;
674 } else if (klass1->is_subtype_of(klass0)) { 672 } else if (klass1->is_subtype_of(klass0)) {
742 if (mirror_type->is_classless()) { 740 if (mirror_type->is_classless()) {
743 return phase->makecon(TypePtr::NULL_PTR); 741 return phase->makecon(TypePtr::NULL_PTR);
744 } 742 }
745 743
746 // return the ConP(Foo.klass) 744 // return the ConP(Foo.klass)
747 assert(mirror_type->is_klass(), "mirror_type should represent a klassOop"); 745 assert(mirror_type->is_klass(), "mirror_type should represent a Klass*");
748 return phase->makecon(TypeKlassPtr::make(mirror_type->as_klass())); 746 return phase->makecon(TypeKlassPtr::make(mirror_type->as_klass()));
749 } 747 }
750 748
751 //------------------------------Ideal------------------------------------------ 749 //------------------------------Ideal------------------------------------------
752 // Normalize comparisons between Java mirror loads to compare the klass instead. 750 // Normalize comparisons between Java mirror loads to compare the klass instead.
889 !klass1->is_interface()) { 887 !klass1->is_interface()) {
890 bool unrelated_classes = false; 888 bool unrelated_classes = false;
891 // See if neither subclasses the other, or if the class on top 889 // See if neither subclasses the other, or if the class on top
892 // is precise. In either of these cases, the compare is known 890 // is precise. In either of these cases, the compare is known
893 // to fail if at least one of the pointers is provably not null. 891 // to fail if at least one of the pointers is provably not null.
894 if (klass0->equals(klass1) || // if types are unequal but klasses are 892 if (klass0->equals(klass1)) { // if types are unequal but klasses are equal
895 !klass0->is_java_klass() || // types not part of Java language?
896 !klass1->is_java_klass()) { // types not part of Java language?
897 // Do nothing; we know nothing for imprecise types 893 // Do nothing; we know nothing for imprecise types
898 } else if (klass0->is_subtype_of(klass1)) { 894 } else if (klass0->is_subtype_of(klass1)) {
899 // If klass1's type is PRECISE, then classes are unrelated. 895 // If klass1's type is PRECISE, then classes are unrelated.
900 unrelated_classes = xklass1; 896 unrelated_classes = xklass1;
901 } else if (klass1->is_subtype_of(klass0)) { 897 } else if (klass1->is_subtype_of(klass0)) {