Mercurial > hg > truffle
comparison src/share/vm/opto/cfgnode.cpp @ 235:9c2ecc2ffb12 jdk7-b31
Merge
author | trims |
---|---|
date | Fri, 11 Jul 2008 01:14:44 -0700 |
parents | d1605aabd0a1 1dd146f17531 |
children | 02a35ad4adf8 |
comparison
equal
deleted
inserted
replaced
197:de141433919f | 235:9c2ecc2ffb12 |
---|---|
706 | 706 |
707 //------------------------split_out_instance----------------------------------- | 707 //------------------------split_out_instance----------------------------------- |
708 // Split out an instance type from a bottom phi. | 708 // Split out an instance type from a bottom phi. |
709 PhiNode* PhiNode::split_out_instance(const TypePtr* at, PhaseIterGVN *igvn) const { | 709 PhiNode* PhiNode::split_out_instance(const TypePtr* at, PhaseIterGVN *igvn) const { |
710 const TypeOopPtr *t_oop = at->isa_oopptr(); | 710 const TypeOopPtr *t_oop = at->isa_oopptr(); |
711 assert(t_oop != NULL && t_oop->is_instance(), "expecting instance oopptr"); | 711 assert(t_oop != NULL && t_oop->is_known_instance(), "expecting instance oopptr"); |
712 const TypePtr *t = adr_type(); | 712 const TypePtr *t = adr_type(); |
713 assert(type() == Type::MEMORY && | 713 assert(type() == Type::MEMORY && |
714 (t == TypePtr::BOTTOM || t == TypeRawPtr::BOTTOM || | 714 (t == TypePtr::BOTTOM || t == TypeRawPtr::BOTTOM || |
715 t->isa_oopptr() && !t->is_oopptr()->is_instance() && | 715 t->isa_oopptr() && !t->is_oopptr()->is_known_instance() && |
716 t->is_oopptr()->cast_to_instance(t_oop->instance_id()) == t_oop), | 716 t->is_oopptr()->cast_to_instance_id(t_oop->instance_id()) == t_oop), |
717 "bottom or raw memory required"); | 717 "bottom or raw memory required"); |
718 | 718 |
719 // Check if an appropriate node already exists. | 719 // Check if an appropriate node already exists. |
720 Node *region = in(0); | 720 Node *region = in(0); |
721 for (DUIterator_Fast kmax, k = region->fast_outs(kmax); k < kmax; k++) { | 721 for (DUIterator_Fast kmax, k = region->fast_outs(kmax); k < kmax; k++) { |
852 } | 852 } |
853 | 853 |
854 // Until we have harmony between classes and interfaces in the type | 854 // Until we have harmony between classes and interfaces in the type |
855 // lattice, we must tread carefully around phis which implicitly | 855 // lattice, we must tread carefully around phis which implicitly |
856 // convert the one to the other. | 856 // convert the one to the other. |
857 const TypeInstPtr* ttip = _type->isa_narrowoop() ? _type->isa_narrowoop()->make_oopptr()->isa_instptr() :_type->isa_instptr(); | 857 const TypePtr* ttp = _type->make_ptr(); |
858 const TypeInstPtr* ttip = (ttp != NULL) ? ttp->isa_instptr() : NULL; | |
858 bool is_intf = false; | 859 bool is_intf = false; |
859 if (ttip != NULL) { | 860 if (ttip != NULL) { |
860 ciKlass* k = ttip->klass(); | 861 ciKlass* k = ttip->klass(); |
861 if (k->is_loaded() && k->is_interface()) | 862 if (k->is_loaded() && k->is_interface()) |
862 is_intf = true; | 863 is_intf = true; |
871 // We assume that each input of an interface-valued Phi is a true | 872 // We assume that each input of an interface-valued Phi is a true |
872 // subtype of that interface. This might not be true of the meet | 873 // subtype of that interface. This might not be true of the meet |
873 // of all the input types. The lattice is not distributive in | 874 // of all the input types. The lattice is not distributive in |
874 // such cases. Ward off asserts in type.cpp by refusing to do | 875 // such cases. Ward off asserts in type.cpp by refusing to do |
875 // meets between interfaces and proper classes. | 876 // meets between interfaces and proper classes. |
876 const TypeInstPtr* tiip = ti->isa_narrowoop() ? ti->is_narrowoop()->make_oopptr()->isa_instptr() : ti->isa_instptr(); | 877 const TypePtr* tip = ti->make_ptr(); |
878 const TypeInstPtr* tiip = (tip != NULL) ? tip->isa_instptr() : NULL; | |
877 if (tiip) { | 879 if (tiip) { |
878 bool ti_is_intf = false; | 880 bool ti_is_intf = false; |
879 ciKlass* k = tiip->klass(); | 881 ciKlass* k = tiip->klass(); |
880 if (k->is_loaded() && k->is_interface()) | 882 if (k->is_loaded() && k->is_interface()) |
881 ti_is_intf = true; | 883 ti_is_intf = true; |
928 // If we have an interface-typed Phi and we narrow to a class type, the join | 930 // If we have an interface-typed Phi and we narrow to a class type, the join |
929 // should report back the class. However, if we have a J/L/Object | 931 // should report back the class. However, if we have a J/L/Object |
930 // class-typed Phi and an interface flows in, it's possible that the meet & | 932 // class-typed Phi and an interface flows in, it's possible that the meet & |
931 // join report an interface back out. This isn't possible but happens | 933 // join report an interface back out. This isn't possible but happens |
932 // because the type system doesn't interact well with interfaces. | 934 // because the type system doesn't interact well with interfaces. |
933 const TypeInstPtr *jtip = jt->isa_narrowoop() ? jt->isa_narrowoop()->make_oopptr()->isa_instptr() : jt->isa_instptr(); | 935 const TypePtr *jtp = jt->make_ptr(); |
936 const TypeInstPtr *jtip = (jtp != NULL) ? jtp->isa_instptr() : NULL; | |
934 if( jtip && ttip ) { | 937 if( jtip && ttip ) { |
935 if( jtip->is_loaded() && jtip->klass()->is_interface() && | 938 if( jtip->is_loaded() && jtip->klass()->is_interface() && |
936 ttip->is_loaded() && !ttip->klass()->is_interface() ) { | 939 ttip->is_loaded() && !ttip->klass()->is_interface() ) { |
937 // Happens in a CTW of rt.jar, 320-341, no extra flags | 940 // Happens in a CTW of rt.jar, 320-341, no extra flags |
938 assert(ft == ttip->cast_to_ptr_type(jtip->ptr()) || | 941 assert(ft == ttip->cast_to_ptr_type(jtip->ptr()) || |
939 ft->isa_narrowoop() && ft->isa_narrowoop()->make_oopptr() == ttip->cast_to_ptr_type(jtip->ptr()), ""); | 942 ft->isa_narrowoop() && ft->make_ptr() == ttip->cast_to_ptr_type(jtip->ptr()), ""); |
940 jt = ft; | 943 jt = ft; |
941 } | 944 } |
942 } | 945 } |
943 if (jt != ft && jt->base() == ft->base()) { | 946 if (jt != ft && jt->base() == ft->base()) { |
944 if (jt->isa_int() && | 947 if (jt->isa_int() && |