< prev index next > src/hotspot/share/opto/subnode.hpp
Print this page
// Compare 2 long values, returning condition codes (-1, 0 or 1).
class CmpLNode : public CmpNode {
public:
CmpLNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
- virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
+ virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
+ virtual const Type* Value(PhaseGVN* phase) const;
virtual const Type *sub( const Type *, const Type * ) const;
+ bool is_double_null_check(PhaseGVN* phase, Node*& a, Node*& b) const;
};
//------------------------------CmpULNode---------------------------------------
// Compare 2 unsigned long values, returning condition codes (-1, 0 or 1).
class CmpULNode : public CmpNode {
}
virtual int Opcode() const;
virtual uint ideal_reg() const { return Op_RegI; }
};
+ //--------------------------FlatArrayCheckNode---------------------------------
+ // Returns true if one of the input array objects or array klass ptrs (there
+ // can be multiple) is flat.
+ class FlatArrayCheckNode : public CmpNode {
+ public:
+ enum {
+ Control,
+ Memory,
+ ArrayOrKlass
+ };
+ FlatArrayCheckNode(Compile* C, Node* mem, Node* array_or_klass) : CmpNode(mem, array_or_klass) {
+ init_class_id(Class_FlatArrayCheck);
+ init_flags(Flag_is_macro);
+ C->add_macro_node(this);
+ }
+ virtual int Opcode() const;
+ virtual const Type* sub(const Type*, const Type*) const { ShouldNotReachHere(); return nullptr; }
+ const Type* Value(PhaseGVN* phase) const;
+ virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
+ };
//------------------------------BoolTest---------------------------------------
// Convert condition codes to a boolean test value (0 or -1).
// We pick the values as 3 bits; the low order 2 bits we compare against the
// condition codes, the high bit flips the sense of the result.
< prev index next >