160 161 //------------------------------CmpUNode--------------------------------------- 162 // Compare 2 unsigned values (integer or pointer), returning condition codes (-1, 0 or 1). 163 class CmpUNode : public CmpNode { 164 public: 165 CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 166 virtual int Opcode() const; 167 virtual const Type *sub( const Type *, const Type * ) const; 168 const Type* Value(PhaseGVN* phase) const; 169 bool is_index_range_check() const; 170 }; 171 172 //------------------------------CmpPNode--------------------------------------- 173 // Compare 2 pointer values, returning condition codes (-1, 0 or 1). 174 class CmpPNode : public CmpNode { 175 public: 176 CmpPNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 177 virtual int Opcode() const; 178 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 179 virtual const Type *sub( const Type *, const Type * ) const; 180 }; 181 182 //------------------------------CmpNNode-------------------------------------- 183 // Compare 2 narrow oop values, returning condition codes (-1, 0 or 1). 184 class CmpNNode : public CmpNode { 185 public: 186 CmpNNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 187 virtual int Opcode() const; 188 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 189 virtual const Type *sub( const Type *, const Type * ) const; 190 }; 191 192 //------------------------------CmpLNode--------------------------------------- 193 // Compare 2 long values, returning condition codes (-1, 0 or 1). 194 class CmpLNode : public CmpNode { 195 public: 196 CmpLNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 197 virtual int Opcode() const; 198 virtual const Type *sub( const Type *, const Type * ) const; 199 }; 200 201 //------------------------------CmpULNode--------------------------------------- 202 // Compare 2 unsigned long values, returning condition codes (-1, 0 or 1). 203 class CmpULNode : public CmpNode { 204 public: 205 CmpULNode(Node* in1, Node* in2) : CmpNode(in1, in2) { } 206 virtual int Opcode() const; 207 virtual const Type* sub(const Type*, const Type*) const; 208 }; 209 210 //------------------------------CmpL3Node-------------------------------------- 211 // Compare 2 long values, returning integer value (-1, 0 or 1). 212 class CmpL3Node : public CmpLNode { 213 public: 214 CmpL3Node( Node *in1, Node *in2 ) : CmpLNode(in1,in2) { 215 // Since it is not consumed by Bools, it is not really a Cmp. 216 init_class_id(Class_Sub); 217 } 218 virtual int Opcode() const; | 160 161 //------------------------------CmpUNode--------------------------------------- 162 // Compare 2 unsigned values (integer or pointer), returning condition codes (-1, 0 or 1). 163 class CmpUNode : public CmpNode { 164 public: 165 CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 166 virtual int Opcode() const; 167 virtual const Type *sub( const Type *, const Type * ) const; 168 const Type* Value(PhaseGVN* phase) const; 169 bool is_index_range_check() const; 170 }; 171 172 //------------------------------CmpPNode--------------------------------------- 173 // Compare 2 pointer values, returning condition codes (-1, 0 or 1). 174 class CmpPNode : public CmpNode { 175 public: 176 CmpPNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 177 virtual int Opcode() const; 178 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 179 virtual const Type *sub( const Type *, const Type * ) const; 180 Node* has_perturbed_operand() const; 181 }; 182 183 //------------------------------CmpNNode-------------------------------------- 184 // Compare 2 narrow oop values, returning condition codes (-1, 0 or 1). 185 class CmpNNode : public CmpNode { 186 public: 187 CmpNNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 188 virtual int Opcode() const; 189 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 190 virtual const Type *sub( const Type *, const Type * ) const; 191 }; 192 193 //------------------------------CmpLNode--------------------------------------- 194 // Compare 2 long values, returning condition codes (-1, 0 or 1). 195 class CmpLNode : public CmpNode { 196 public: 197 CmpLNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} 198 virtual int Opcode() const; 199 virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); 200 virtual const Type* Value(PhaseGVN* phase) const; 201 virtual const Type *sub( const Type *, const Type * ) const; 202 bool is_double_null_check(PhaseGVN* phase, Node*& a, Node*& b) const; 203 }; 204 205 //------------------------------CmpULNode--------------------------------------- 206 // Compare 2 unsigned long values, returning condition codes (-1, 0 or 1). 207 class CmpULNode : public CmpNode { 208 public: 209 CmpULNode(Node* in1, Node* in2) : CmpNode(in1, in2) { } 210 virtual int Opcode() const; 211 virtual const Type* sub(const Type*, const Type*) const; 212 }; 213 214 //------------------------------CmpL3Node-------------------------------------- 215 // Compare 2 long values, returning integer value (-1, 0 or 1). 216 class CmpL3Node : public CmpLNode { 217 public: 218 CmpL3Node( Node *in1, Node *in2 ) : CmpLNode(in1,in2) { 219 // Since it is not consumed by Bools, it is not really a Cmp. 220 init_class_id(Class_Sub); 221 } 222 virtual int Opcode() const; |