aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/connode.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/vm/opto/connode.hpp')
-rw-r--r--src/share/vm/opto/connode.hpp49
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 {