diff options
Diffstat (limited to 'src/share/vm/opto/connode.hpp')
-rw-r--r-- | src/share/vm/opto/connode.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/share/vm/opto/connode.hpp b/src/share/vm/opto/connode.hpp index 1c1b96a19..63204ce6b 100644 --- a/src/share/vm/opto/connode.hpp +++ b/src/share/vm/opto/connode.hpp @@ -78,6 +78,20 @@ public: }; +//------------------------------ConNNode-------------------------------------- +// Simple narrow oop constants +class ConNNode : public ConNode { +public: + ConNNode( const TypeNarrowOop *t ) : ConNode(t) {} + virtual int Opcode() const; + + static ConNNode* make( Compile *C, ciObject* con ) { + return new (C, 1) ConNNode( TypeNarrowOop::make_from_constant(con) ); + } + +}; + + //------------------------------ConLNode--------------------------------------- // Simple long constants class ConLNode : public ConNode { @@ -254,6 +268,41 @@ public: //virtual Node *Ideal_DU_postCCP( PhaseCCP * ); }; + +//------------------------------EncodeP-------------------------------- +// Encodes an oop pointers into its compressed form +// Takes an extra argument which is the real heap base as a long which +// may be useful for code generation in the backend. +class EncodePNode : public TypeNode { + public: + EncodePNode(Node* value, const Type* type): + TypeNode(type, 2) { + init_req(0, NULL); + init_req(1, value); + } + virtual int Opcode() const; + virtual Node *Identity( PhaseTransform *phase ); + virtual uint ideal_reg() const { return Op_RegN; } + + static Node* encode(PhaseGVN* phase, Node* value); +}; + +//------------------------------DecodeN-------------------------------- +// Converts a narrow oop into a real oop ptr. +// Takes an extra argument which is the real heap base as a long which +// may be useful for code generation in the backend. +class DecodeNNode : public TypeNode { + public: + DecodeNNode(Node* value, const Type* type): + TypeNode(type, 2) { + init_req(0, NULL); + init_req(1, value); + } + virtual int Opcode() const; + virtual Node *Identity( PhaseTransform *phase ); + virtual uint ideal_reg() const { return Op_RegP; } +}; + //------------------------------Conv2BNode------------------------------------- // Convert int/pointer to a Boolean. Map zero to zero, all else to 1. class Conv2BNode : public Node { |