Mercurial > hg > graal-compiler
comparison src/share/vm/opto/memnode.cpp @ 17671:de95063c0e34
8027422: assert(_gvn.type(obj)->higher_equal(tjp)) failed: cast_up is no longer needed
Summary: type methods shouldn't always operate on speculative part
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Fri, 24 Jan 2014 09:31:53 +0100 |
parents | 55fb97c4c58d |
children | 45467c53f178 752ba2e5f6d0 |
comparison
equal
deleted
inserted
replaced
17670:04d32e7fad07 | 17671:de95063c0e34 |
---|---|
655 "must stay in the original alias category"); | 655 "must stay in the original alias category"); |
656 // The type of the address must be contained in the adr_type, | 656 // The type of the address must be contained in the adr_type, |
657 // disregarding "null"-ness. | 657 // disregarding "null"-ness. |
658 // (We make an exception for TypeRawPtr::BOTTOM, which is a bit bucket.) | 658 // (We make an exception for TypeRawPtr::BOTTOM, which is a bit bucket.) |
659 const TypePtr* tp_notnull = tp->join(TypePtr::NOTNULL)->is_ptr(); | 659 const TypePtr* tp_notnull = tp->join(TypePtr::NOTNULL)->is_ptr(); |
660 assert(cross_check->meet(tp_notnull) == cross_check, | 660 assert(cross_check->meet(tp_notnull) == cross_check->remove_speculative(), |
661 "real address must not escape from expected memory type"); | 661 "real address must not escape from expected memory type"); |
662 } | 662 } |
663 #endif | 663 #endif |
664 return tp; | 664 return tp; |
665 } | 665 } |
1679 && (_type->isa_vect() == NULL) | 1679 && (_type->isa_vect() == NULL) |
1680 && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { | 1680 && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { |
1681 // t might actually be lower than _type, if _type is a unique | 1681 // t might actually be lower than _type, if _type is a unique |
1682 // concrete subclass of abstract class t. | 1682 // concrete subclass of abstract class t. |
1683 if (off_beyond_header) { // is the offset beyond the header? | 1683 if (off_beyond_header) { // is the offset beyond the header? |
1684 const Type* jt = t->join(_type); | 1684 const Type* jt = t->join_speculative(_type); |
1685 // In any case, do not allow the join, per se, to empty out the type. | 1685 // In any case, do not allow the join, per se, to empty out the type. |
1686 if (jt->empty() && !t->empty()) { | 1686 if (jt->empty() && !t->empty()) { |
1687 // This can happen if a interface-typed array narrows to a class type. | 1687 // This can happen if a interface-typed array narrows to a class type. |
1688 jt = _type; | 1688 jt = _type; |
1689 } | 1689 } |