Mercurial > hg > graal-compiler
diff src/share/vm/opto/memnode.hpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | 2a9af0b9cb1c |
children | d1a5218d7eaf |
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.hpp Fri Apr 11 09:56:35 2008 -0400 +++ b/src/share/vm/opto/memnode.hpp Sun Apr 13 17:43:42 2008 -0400 @@ -137,7 +137,8 @@ } // Polymorphic factory method: - static LoadNode* make( Compile *C, Node *c, Node *mem, Node *adr, const TypePtr* at, const Type *rt, BasicType bt ); + static Node* make( PhaseGVN& gvn, Node *c, Node *mem, Node *adr, + const TypePtr* at, const Type *rt, BasicType bt ); virtual uint hash() const; // Check the type @@ -330,6 +331,29 @@ virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; } }; + +//------------------------------LoadNNode-------------------------------------- +// Load a narrow oop from memory (either object or array) +class LoadNNode : public LoadNode { +public: + LoadNNode( Node *c, Node *mem, Node *adr, const TypePtr *at, const Type* t ) + : LoadNode(c,mem,adr,at,t) {} + virtual int Opcode() const; + virtual uint ideal_reg() const { return Op_RegN; } + virtual int store_Opcode() const { return Op_StoreN; } + virtual BasicType memory_type() const { return T_NARROWOOP; } + // depends_only_on_test is almost always true, and needs to be almost always + // true to enable key hoisting & commoning optimizations. However, for the + // special case of RawPtr loads from TLS top & end, the control edge carries + // the dependence preventing hoisting past a Safepoint instead of the memory + // edge. (An unfortunate consequence of having Safepoints not set Raw + // Memory; itself an unfortunate consequence of having Nodes which produce + // results (new raw memory state) inside of loops preventing all manner of + // other optimizations). Basically, it's ugly but so is the alternative. + // See comment in macro.cpp, around line 125 expand_allocate_common(). + virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; } +}; + //------------------------------LoadKlassNode---------------------------------- // Load a Klass from an object class LoadKlassNode : public LoadPNode { @@ -376,7 +400,8 @@ } // Polymorphic factory method: - static StoreNode* make( Compile *C, Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, BasicType bt ); + static StoreNode* make( PhaseGVN& gvn, Node *c, Node *mem, Node *adr, + const TypePtr* at, Node *val, BasicType bt ); virtual uint hash() const; // Check the type @@ -488,6 +513,15 @@ virtual BasicType memory_type() const { return T_ADDRESS; } }; +//------------------------------StoreNNode------------------------------------- +// Store narrow oop to memory +class StoreNNode : public StoreNode { +public: + StoreNNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {} + virtual int Opcode() const; + virtual BasicType memory_type() const { return T_NARROWOOP; } +}; + //------------------------------StoreCMNode----------------------------------- // Store card-mark byte to memory for CM // The last StoreCM before a SafePoint must be preserved and occur after its "oop" store @@ -600,6 +634,13 @@ virtual int Opcode() const; }; +//------------------------------CompareAndSwapNNode--------------------------- +class CompareAndSwapNNode : public LoadStoreNode { +public: + CompareAndSwapNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex) : LoadStoreNode(c, mem, adr, val, ex) { } + virtual int Opcode() const; +}; + //------------------------------ClearArray------------------------------------- class ClearArrayNode: public Node { public: