hotspot/src/share/vm/opto/memnode.hpp
changeset 13974 791cba24758f
parent 13963 e5b53c306fb5
parent 13970 11a9630698a6
child 15242 695bb216be99
equal deleted inserted replaced
13963:e5b53c306fb5 13974:791cba24758f
   272   virtual uint ideal_reg() const { return Op_RegI; }
   272   virtual uint ideal_reg() const { return Op_RegI; }
   273   virtual int store_Opcode() const { return Op_StoreI; }
   273   virtual int store_Opcode() const { return Op_StoreI; }
   274   virtual BasicType memory_type() const { return T_INT; }
   274   virtual BasicType memory_type() const { return T_INT; }
   275 };
   275 };
   276 
   276 
   277 //------------------------------LoadUI2LNode-----------------------------------
       
   278 // Load an unsigned integer into long from memory
       
   279 class LoadUI2LNode : public LoadNode {
       
   280 public:
       
   281   LoadUI2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong* t = TypeLong::UINT)
       
   282     : LoadNode(c, mem, adr, at, t) {}
       
   283   virtual int Opcode() const;
       
   284   virtual uint ideal_reg() const { return Op_RegL; }
       
   285   virtual int store_Opcode() const { return Op_StoreL; }
       
   286   virtual BasicType memory_type() const { return T_LONG; }
       
   287 };
       
   288 
       
   289 //------------------------------LoadRangeNode----------------------------------
   277 //------------------------------LoadRangeNode----------------------------------
   290 // Load an array length from the array
   278 // Load an array length from the array
   291 class LoadRangeNode : public LoadINode {
   279 class LoadRangeNode : public LoadINode {
   292 public:
   280 public:
   293   LoadRangeNode( Node *c, Node *mem, Node *adr, const TypeInt *ti = TypeInt::POS )
   281   LoadRangeNode( Node *c, Node *mem, Node *adr, const TypeInt *ti = TypeInt::POS )
   435 
   423 
   436 //------------------------------LoadNKlassNode---------------------------------
   424 //------------------------------LoadNKlassNode---------------------------------
   437 // Load a narrow Klass from an object.
   425 // Load a narrow Klass from an object.
   438 class LoadNKlassNode : public LoadNNode {
   426 class LoadNKlassNode : public LoadNNode {
   439 public:
   427 public:
   440   LoadNKlassNode( Node *c, Node *mem, Node *adr, const TypePtr *at, const TypeNarrowOop *tk )
   428   LoadNKlassNode( Node *c, Node *mem, Node *adr, const TypePtr *at, const TypeNarrowKlass *tk )
   441     : LoadNNode(c,mem,adr,at,tk) {}
   429     : LoadNNode(c,mem,adr,at,tk) {}
   442   virtual int Opcode() const;
   430   virtual int Opcode() const;
   443   virtual uint ideal_reg() const { return Op_RegN; }
   431   virtual uint ideal_reg() const { return Op_RegN; }
   444   virtual int store_Opcode() const { return Op_StoreN; }
   432   virtual int store_Opcode() const { return Op_StoreNKlass; }
   445   virtual BasicType memory_type() const { return T_NARROWOOP; }
   433   virtual BasicType memory_type() const { return T_NARROWKLASS; }
   446 
   434 
   447   virtual const Type *Value( PhaseTransform *phase ) const;
   435   virtual const Type *Value( PhaseTransform *phase ) const;
   448   virtual Node *Identity( PhaseTransform *phase );
   436   virtual Node *Identity( PhaseTransform *phase );
   449   virtual bool depends_only_on_test() const { return true; }
   437   virtual bool depends_only_on_test() const { return true; }
   450 };
   438 };
   589 class StoreNNode : public StoreNode {
   577 class StoreNNode : public StoreNode {
   590 public:
   578 public:
   591   StoreNNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
   579   StoreNNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
   592   virtual int Opcode() const;
   580   virtual int Opcode() const;
   593   virtual BasicType memory_type() const { return T_NARROWOOP; }
   581   virtual BasicType memory_type() const { return T_NARROWOOP; }
       
   582 };
       
   583 
       
   584 //------------------------------StoreNKlassNode--------------------------------------
       
   585 // Store narrow klass to memory
       
   586 class StoreNKlassNode : public StoreNNode {
       
   587 public:
       
   588   StoreNKlassNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNNode(c,mem,adr,at,val) {}
       
   589   virtual int Opcode() const;
       
   590   virtual BasicType memory_type() const { return T_NARROWKLASS; }
   594 };
   591 };
   595 
   592 
   596 //------------------------------StoreCMNode-----------------------------------
   593 //------------------------------StoreCMNode-----------------------------------
   597 // Store card-mark byte to memory for CM
   594 // Store card-mark byte to memory for CM
   598 // The last StoreCM before a SafePoint must be preserved and occur after its "oop" store
   595 // The last StoreCM before a SafePoint must be preserved and occur after its "oop" store