mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-12 11:28:35 +00:00
7181658: CTW: assert(t->meet(t0) == t) failed: Not monotonic
Use uncast node equivalence checks in CmpUNode::sub. Reviewed-by: kvn, twisti
This commit is contained in:
parent
761e0b221d
commit
e2fc7f742c
@ -554,9 +554,7 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const {
|
||||
return TypeInt::CC_GE;
|
||||
} else if (hi0 <= lo1) {
|
||||
// Check for special case in Hashtable::get. (See below.)
|
||||
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 &&
|
||||
in(1)->Opcode() == Op_ModI &&
|
||||
in(1)->in(2) == in(2) )
|
||||
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check())
|
||||
return TypeInt::CC_LT;
|
||||
return TypeInt::CC_LE;
|
||||
}
|
||||
@ -567,13 +565,17 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const {
|
||||
// to be positive.
|
||||
// (This is a gross hack, since the sub method never
|
||||
// looks at the structure of the node in any other case.)
|
||||
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 &&
|
||||
in(1)->Opcode() == Op_ModI &&
|
||||
in(1)->in(2)->uncast() == in(2)->uncast())
|
||||
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check())
|
||||
return TypeInt::CC_LT;
|
||||
return TypeInt::CC; // else use worst case results
|
||||
}
|
||||
|
||||
bool CmpUNode::is_index_range_check() const {
|
||||
// Check for the "(X ModI Y) CmpU Y" shape
|
||||
return (in(1)->Opcode() == Op_ModI &&
|
||||
in(1)->in(2)->eqv_uncast(in(2)));
|
||||
}
|
||||
|
||||
//------------------------------Idealize---------------------------------------
|
||||
Node *CmpINode::Ideal( PhaseGVN *phase, bool can_reshape ) {
|
||||
if (phase->type(in(2))->higher_equal(TypeInt::ZERO)) {
|
||||
|
||||
@ -158,6 +158,7 @@ public:
|
||||
CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
|
||||
virtual int Opcode() const;
|
||||
virtual const Type *sub( const Type *, const Type * ) const;
|
||||
bool is_index_range_check() const;
|
||||
};
|
||||
|
||||
//------------------------------CmpPNode---------------------------------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user