Mercurial > hg > graal-compiler
comparison src/share/vm/opto/cfgnode.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | 2a9af0b9cb1c |
children | 72f4a668df19 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
846 } | 846 } |
847 | 847 |
848 // Until we have harmony between classes and interfaces in the type | 848 // Until we have harmony between classes and interfaces in the type |
849 // lattice, we must tread carefully around phis which implicitly | 849 // lattice, we must tread carefully around phis which implicitly |
850 // convert the one to the other. | 850 // convert the one to the other. |
851 const TypeInstPtr* ttip = _type->isa_instptr(); | 851 const TypeInstPtr* ttip = _type->isa_narrowoop() ? _type->isa_narrowoop()->make_oopptr()->isa_instptr() :_type->isa_instptr(); |
852 bool is_intf = false; | 852 bool is_intf = false; |
853 if (ttip != NULL) { | 853 if (ttip != NULL) { |
854 ciKlass* k = ttip->klass(); | 854 ciKlass* k = ttip->klass(); |
855 if (k->is_loaded() && k->is_interface()) | 855 if (k->is_loaded() && k->is_interface()) |
856 is_intf = true; | 856 is_intf = true; |
865 // We assume that each input of an interface-valued Phi is a true | 865 // We assume that each input of an interface-valued Phi is a true |
866 // subtype of that interface. This might not be true of the meet | 866 // subtype of that interface. This might not be true of the meet |
867 // of all the input types. The lattice is not distributive in | 867 // of all the input types. The lattice is not distributive in |
868 // such cases. Ward off asserts in type.cpp by refusing to do | 868 // such cases. Ward off asserts in type.cpp by refusing to do |
869 // meets between interfaces and proper classes. | 869 // meets between interfaces and proper classes. |
870 const TypeInstPtr* tiip = ti->isa_instptr(); | 870 const TypeInstPtr* tiip = ti->isa_narrowoop() ? ti->is_narrowoop()->make_oopptr()->isa_instptr() : ti->isa_instptr(); |
871 if (tiip) { | 871 if (tiip) { |
872 bool ti_is_intf = false; | 872 bool ti_is_intf = false; |
873 ciKlass* k = tiip->klass(); | 873 ciKlass* k = tiip->klass(); |
874 if (k->is_loaded() && k->is_interface()) | 874 if (k->is_loaded() && k->is_interface()) |
875 ti_is_intf = true; | 875 ti_is_intf = true; |
922 // If we have an interface-typed Phi and we narrow to a class type, the join | 922 // If we have an interface-typed Phi and we narrow to a class type, the join |
923 // should report back the class. However, if we have a J/L/Object | 923 // should report back the class. However, if we have a J/L/Object |
924 // class-typed Phi and an interface flows in, it's possible that the meet & | 924 // class-typed Phi and an interface flows in, it's possible that the meet & |
925 // join report an interface back out. This isn't possible but happens | 925 // join report an interface back out. This isn't possible but happens |
926 // because the type system doesn't interact well with interfaces. | 926 // because the type system doesn't interact well with interfaces. |
927 const TypeInstPtr *jtip = jt->isa_instptr(); | 927 const TypeInstPtr *jtip = jt->isa_narrowoop() ? jt->isa_narrowoop()->make_oopptr()->isa_instptr() : jt->isa_instptr(); |
928 if( jtip && ttip ) { | 928 if( jtip && ttip ) { |
929 if( jtip->is_loaded() && jtip->klass()->is_interface() && | 929 if( jtip->is_loaded() && jtip->klass()->is_interface() && |
930 ttip->is_loaded() && !ttip->klass()->is_interface() ) | 930 ttip->is_loaded() && !ttip->klass()->is_interface() ) { |
931 // Happens in a CTW of rt.jar, 320-341, no extra flags | 931 // Happens in a CTW of rt.jar, 320-341, no extra flags |
932 { assert(ft == ttip->cast_to_ptr_type(jtip->ptr()), ""); jt = ft; } | 932 assert(ft == ttip->cast_to_ptr_type(jtip->ptr()) || |
933 ft->isa_narrowoop() && ft->isa_narrowoop()->make_oopptr() == ttip->cast_to_ptr_type(jtip->ptr()), ""); | |
934 jt = ft; | |
935 } | |
933 } | 936 } |
934 if (jt != ft && jt->base() == ft->base()) { | 937 if (jt != ft && jt->base() == ft->base()) { |
935 if (jt->isa_int() && | 938 if (jt->isa_int() && |
936 jt->is_int()->_lo == ft->is_int()->_lo && | 939 jt->is_int()->_lo == ft->is_int()->_lo && |
937 jt->is_int()->_hi == ft->is_int()->_hi) | 940 jt->is_int()->_hi == ft->is_int()->_hi) |