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 }