< prev index next >

src/hotspot/share/opto/subnode.hpp

Print this page
@@ -209,12 +209,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;
    virtual bool operates_on(BasicType bt, bool signed_int) const {
      assert(bt == T_INT || bt == T_LONG, "unsupported");
      return bt == T_LONG && signed_int;
    }
  };

@@ -297,10 +299,29 @@
    }
    virtual int Opcode() const;
    virtual uint ideal_reg() const { return Op_RegI; }
  };
  
+ //--------------------------FlatArrayCheckNode---------------------------------
+ // Returns true if one of the input arrays (there can be multiple) is flat.
+ class FlatArrayCheckNode : public CmpNode {
+ public:
+   enum {
+     Control,
+     Memory,
+     Array
+   };
+   FlatArrayCheckNode(Compile* C, Node* mem, Node* array) : CmpNode(mem, array) {
+     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 NULL; }
+   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 >