src/share/vm/opto/connode.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/opto/connode.cpp

src/share/vm/opto/connode.cpp

Print this page
rev 5645 : 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:

*** 186,196 **** //------------------------------Value------------------------------------------ // Result is the meet of inputs const Type *CMoveNode::Value( PhaseTransform *phase ) const { if( phase->type(in(Condition)) == Type::TOP ) return Type::TOP; ! return phase->type(in(IfFalse))->meet(phase->type(in(IfTrue))); } //------------------------------make------------------------------------------- // Make a correctly-flavored CMove. Since _type is directly determined // from the inputs we do not need to specify it here. --- 186,196 ---- //------------------------------Value------------------------------------------ // Result is the meet of inputs const Type *CMoveNode::Value( PhaseTransform *phase ) const { if( phase->type(in(Condition)) == Type::TOP ) return Type::TOP; ! return phase->type(in(IfFalse))->meet(phase->type(in(IfTrue)), true); } //------------------------------make------------------------------------------- // Make a correctly-flavored CMove. Since _type is directly determined // from the inputs we do not need to specify it here.
*** 390,417 **** //============================================================================= // If input is already higher or equal to cast type, then this is an identity. Node *ConstraintCastNode::Identity( PhaseTransform *phase ) { ! return phase->type(in(1))->higher_equal(_type) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; ! const Type* ft = phase->type(in(1))->filter(_type); #ifdef ASSERT // Previous versions of this function had some special case logic, // which is no longer necessary. Make sure of the required effects. switch (Opcode()) { case Op_CastII: { const Type* t1 = phase->type(in(1)); if( t1 == Type::TOP ) assert(ft == Type::TOP, "special case #1"); ! const Type* rt = t1->join(_type); if (rt->empty()) assert(ft == Type::TOP, "special case #2"); break; } case Op_CastPP: if (phase->type(in(1)) == TypePtr::NULL_PTR && --- 390,417 ---- //============================================================================= // If input is already higher or equal to cast type, then this is an identity. Node *ConstraintCastNode::Identity( PhaseTransform *phase ) { ! return phase->type(in(1))->higher_equal(_type, true) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; ! const Type* ft = phase->type(in(1))->filter(_type, true); #ifdef ASSERT // Previous versions of this function had some special case logic, // which is no longer necessary. Make sure of the required effects. switch (Opcode()) { case Op_CastII: { const Type* t1 = phase->type(in(1)); if( t1 == Type::TOP ) assert(ft == Type::TOP, "special case #1"); ! const Type* rt = t1->join(_type, true); if (rt->empty()) assert(ft == Type::TOP, "special case #2"); break; } case Op_CastPP: if (phase->type(in(1)) == TypePtr::NULL_PTR &&
src/share/vm/opto/connode.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File