hotspot/src/share/vm/opto/memnode.hpp
changeset 22851 4c4b6a45be43
parent 22845 d8812d0ff387
parent 21526 03b4acedb351
child 22855 d637fd28a6c3
equal deleted inserted replaced
22850:4e69ce7e1101 22851:4c4b6a45be43
   218   static bool is_immutable_value(Node* adr);
   218   static bool is_immutable_value(Node* adr);
   219 #endif
   219 #endif
   220 protected:
   220 protected:
   221   const Type* load_array_final_field(const TypeKlassPtr *tkls,
   221   const Type* load_array_final_field(const TypeKlassPtr *tkls,
   222                                      ciKlass* klass) const;
   222                                      ciKlass* klass) const;
       
   223   // depends_only_on_test is almost always true, and needs to be almost always
       
   224   // true to enable key hoisting & commoning optimizations.  However, for the
       
   225   // special case of RawPtr loads from TLS top & end, and other loads performed by
       
   226   // GC barriers, the control edge carries the dependence preventing hoisting past
       
   227   // a Safepoint instead of the memory edge.  (An unfortunate consequence of having
       
   228   // Safepoints not set Raw Memory; itself an unfortunate consequence of having Nodes
       
   229   // which produce results (new raw memory state) inside of loops preventing all
       
   230   // manner of other optimizations).  Basically, it's ugly but so is the alternative.
       
   231   // See comment in macro.cpp, around line 125 expand_allocate_common().
       
   232   virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
       
   233 
   223 };
   234 };
   224 
   235 
   225 //------------------------------LoadBNode--------------------------------------
   236 //------------------------------LoadBNode--------------------------------------
   226 // Load a byte (8bits signed) from memory
   237 // Load a byte (8bits signed) from memory
   227 class LoadBNode : public LoadNode {
   238 class LoadBNode : public LoadNode {
   382     : LoadNode(c, mem, adr, at, t, mo) {}
   393     : LoadNode(c, mem, adr, at, t, mo) {}
   383   virtual int Opcode() const;
   394   virtual int Opcode() const;
   384   virtual uint ideal_reg() const { return Op_RegP; }
   395   virtual uint ideal_reg() const { return Op_RegP; }
   385   virtual int store_Opcode() const { return Op_StoreP; }
   396   virtual int store_Opcode() const { return Op_StoreP; }
   386   virtual BasicType memory_type() const { return T_ADDRESS; }
   397   virtual BasicType memory_type() const { return T_ADDRESS; }
   387   // depends_only_on_test is almost always true, and needs to be almost always
       
   388   // true to enable key hoisting & commoning optimizations.  However, for the
       
   389   // special case of RawPtr loads from TLS top & end, the control edge carries
       
   390   // the dependence preventing hoisting past a Safepoint instead of the memory
       
   391   // edge.  (An unfortunate consequence of having Safepoints not set Raw
       
   392   // Memory; itself an unfortunate consequence of having Nodes which produce
       
   393   // results (new raw memory state) inside of loops preventing all manner of
       
   394   // other optimizations).  Basically, it's ugly but so is the alternative.
       
   395   // See comment in macro.cpp, around line 125 expand_allocate_common().
       
   396   virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
       
   397 };
   398 };
   398 
   399 
   399 
   400 
   400 //------------------------------LoadNNode--------------------------------------
   401 //------------------------------LoadNNode--------------------------------------
   401 // Load a narrow oop from memory (either object or array)
   402 // Load a narrow oop from memory (either object or array)
   405     : LoadNode(c, mem, adr, at, t, mo) {}
   406     : LoadNode(c, mem, adr, at, t, mo) {}
   406   virtual int Opcode() const;
   407   virtual int Opcode() const;
   407   virtual uint ideal_reg() const { return Op_RegN; }
   408   virtual uint ideal_reg() const { return Op_RegN; }
   408   virtual int store_Opcode() const { return Op_StoreN; }
   409   virtual int store_Opcode() const { return Op_StoreN; }
   409   virtual BasicType memory_type() const { return T_NARROWOOP; }
   410   virtual BasicType memory_type() const { return T_NARROWOOP; }
   410   // depends_only_on_test is almost always true, and needs to be almost always
       
   411   // true to enable key hoisting & commoning optimizations.  However, for the
       
   412   // special case of RawPtr loads from TLS top & end, the control edge carries
       
   413   // the dependence preventing hoisting past a Safepoint instead of the memory
       
   414   // edge.  (An unfortunate consequence of having Safepoints not set Raw
       
   415   // Memory; itself an unfortunate consequence of having Nodes which produce
       
   416   // results (new raw memory state) inside of loops preventing all manner of
       
   417   // other optimizations).  Basically, it's ugly but so is the alternative.
       
   418   // See comment in macro.cpp, around line 125 expand_allocate_common().
       
   419   virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
       
   420 };
   411 };
   421 
   412 
   422 //------------------------------LoadKlassNode----------------------------------
   413 //------------------------------LoadKlassNode----------------------------------
   423 // Load a Klass from an object
   414 // Load a Klass from an object
   424 class LoadKlassNode : public LoadPNode {
   415 class LoadKlassNode : public LoadPNode {