< prev index next >

src/hotspot/share/opto/subnode.hpp

Print this page
@@ -203,12 +203,14 @@
  // 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 {

@@ -295,10 +297,30 @@
    }
    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 >