Mercurial > hg > graal-compiler
comparison src/share/vm/opto/cfgnode.cpp @ 18041:52b4284cb496
Merge with jdk8u20-b26
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Wed, 15 Oct 2014 16:02:50 +0200 |
parents | 4ca6dc0799b6 |
children |
comparison
equal
deleted
inserted
replaced
17606:45d7b2c7029d | 18041:52b4284cb496 |
---|---|
949 if (k->is_loaded() && k->is_interface()) | 949 if (k->is_loaded() && k->is_interface()) |
950 ti_is_intf = true; | 950 ti_is_intf = true; |
951 if (is_intf != ti_is_intf) | 951 if (is_intf != ti_is_intf) |
952 { t = _type; break; } | 952 { t = _type; break; } |
953 } | 953 } |
954 t = t->meet(ti); | 954 t = t->meet_speculative(ti); |
955 } | 955 } |
956 } | 956 } |
957 | 957 |
958 // The worst-case type (from ciTypeFlow) should be consistent with "t". | 958 // The worst-case type (from ciTypeFlow) should be consistent with "t". |
959 // That is, we expect that "t->higher_equal(_type)" holds true. | 959 // That is, we expect that "t->higher_equal(_type)" holds true. |
966 // - Value calls on inputs might produce fuzzy results. | 966 // - Value calls on inputs might produce fuzzy results. |
967 // (Occurrences of this case suggest improvements to Value methods.) | 967 // (Occurrences of this case suggest improvements to Value methods.) |
968 // | 968 // |
969 // It is not possible to see Type::BOTTOM values as phi inputs, | 969 // It is not possible to see Type::BOTTOM values as phi inputs, |
970 // because the ciTypeFlow pre-pass produces verifier-quality types. | 970 // because the ciTypeFlow pre-pass produces verifier-quality types. |
971 const Type* ft = t->filter(_type); // Worst case type | 971 const Type* ft = t->filter_speculative(_type); // Worst case type |
972 | 972 |
973 #ifdef ASSERT | 973 #ifdef ASSERT |
974 // The following logic has been moved into TypeOopPtr::filter. | 974 // The following logic has been moved into TypeOopPtr::filter. |
975 const Type* jt = t->join(_type); | 975 const Type* jt = t->join_speculative(_type); |
976 if( jt->empty() ) { // Emptied out??? | 976 if( jt->empty() ) { // Emptied out??? |
977 | 977 |
978 // Check for evil case of 't' being a class and '_type' expecting an | 978 // Check for evil case of 't' being a class and '_type' expecting an |
979 // interface. This can happen because the bytecodes do not contain | 979 // interface. This can happen because the bytecodes do not contain |
980 // enough type info to distinguish a Java-level interface variable | 980 // enough type info to distinguish a Java-level interface variable |
1016 if( jtkp && ttkp ) { | 1016 if( jtkp && ttkp ) { |
1017 if( jtkp->is_loaded() && jtkp->klass()->is_interface() && | 1017 if( jtkp->is_loaded() && jtkp->klass()->is_interface() && |
1018 !jtkp->klass_is_exact() && // Keep exact interface klass (6894807) | 1018 !jtkp->klass_is_exact() && // Keep exact interface klass (6894807) |
1019 ttkp->is_loaded() && !ttkp->klass()->is_interface() ) { | 1019 ttkp->is_loaded() && !ttkp->klass()->is_interface() ) { |
1020 assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) || | 1020 assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) || |
1021 ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), ""); | 1021 ft->isa_narrowklass() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), ""); |
1022 jt = ft; | 1022 jt = ft; |
1023 } | 1023 } |
1024 } | 1024 } |
1025 if (jt != ft && jt->base() == ft->base()) { | 1025 if (jt != ft && jt->base() == ft->base()) { |
1026 if (jt->isa_int() && | 1026 if (jt->isa_int() && |
1755 in(i)->in(AddPNode::Offset) != y) { | 1755 in(i)->in(AddPNode::Offset) != y) { |
1756 doit = false; | 1756 doit = false; |
1757 break; | 1757 break; |
1758 } | 1758 } |
1759 // Accumulate type for resulting Phi | 1759 // Accumulate type for resulting Phi |
1760 type = type->meet(in(i)->in(AddPNode::Base)->bottom_type()); | 1760 type = type->meet_speculative(in(i)->in(AddPNode::Base)->bottom_type()); |
1761 } | 1761 } |
1762 Node* base = NULL; | 1762 Node* base = NULL; |
1763 if (doit) { | 1763 if (doit) { |
1764 // Check for neighboring AddP nodes in a tree. | 1764 // Check for neighboring AddP nodes in a tree. |
1765 // If they have a base, use that it. | 1765 // If they have a base, use that it. |