< prev index next >

src/hotspot/share/opto/memnode.hpp

Print this page

        

*** 109,118 **** --- 109,122 ---- #else return 0; #endif } + #ifdef ASSERT + void set_adr_type(const TypePtr* adr_type) { _adr_type = adr_type; } + #endif + // Map a load or store opcode to its corresponding store opcode. // (Return -1 if unknown.) virtual int store_Opcode() const { return -1; } // What is the type of the value in memory? (T_VOID mean "unspecified".)
*** 520,529 **** --- 524,560 ---- virtual const Type* Value(PhaseGVN* phase) const; virtual Node* Identity(PhaseGVN* phase); virtual bool depends_only_on_test() const { return true; } }; + // Retrieve the null free property from an array klass. This is + // treated a bit like a field that would be read from the klass + // structure at runtime except, the implementation encodes the + // property as a bit in the klass header field of the array. This + // implementation detail is hidden under this node so it doesn't make + // a difference for high level optimizations. At final graph reshaping + // time, this node is turned into the actual logical operations that + // extract the property from the klass pointer. For this to work + // correctly, GetNullFreePropertyNode must take a LoadKlass/LoadNKlass + // input. The Ideal transformation splits the GetNullFreePropertyNode + // through phis, Value returns a constant if the node's input is a + // constant. These 2 should guarantee GetNullFreePropertyNode does + // indeed have a LoadKlass/LoadNKlass input at final graph reshaping + // time. + class GetNullFreePropertyNode : public Node { + public: + GetNullFreePropertyNode(Node* klass) : Node(NULL, klass) {} + virtual int Opcode() const; + virtual const Type* Value(PhaseGVN* phase) const; + virtual Node* Ideal(PhaseGVN *phase, bool can_reshape); + virtual const Type* bottom_type() const { + if (in(1)->bottom_type()->isa_klassptr()) { + return TypeLong::LONG; + } + return TypeInt::INT; + } + }; //------------------------------StoreNode-------------------------------------- // Store value; requires Store, Address and Value class StoreNode : public MemNode { private:
< prev index next >