76 } |
76 } |
77 |
77 |
78 }; |
78 }; |
79 |
79 |
80 |
80 |
|
81 //------------------------------ConNNode-------------------------------------- |
|
82 // Simple narrow oop constants |
|
83 class ConNNode : public ConNode { |
|
84 public: |
|
85 ConNNode( const TypeNarrowOop *t ) : ConNode(t) {} |
|
86 virtual int Opcode() const; |
|
87 |
|
88 static ConNNode* make( Compile *C, ciObject* con ) { |
|
89 return new (C, 1) ConNNode( TypeNarrowOop::make_from_constant(con) ); |
|
90 } |
|
91 |
|
92 }; |
|
93 |
|
94 |
81 //------------------------------ConLNode--------------------------------------- |
95 //------------------------------ConLNode--------------------------------------- |
82 // Simple long constants |
96 // Simple long constants |
83 class ConLNode : public ConNode { |
97 class ConLNode : public ConNode { |
84 public: |
98 public: |
85 ConLNode( const TypeLong *t ) : ConNode(t) {} |
99 ConLNode( const TypeLong *t ) : ConNode(t) {} |
252 // No longer remove CheckCast after CCP as it gives me a place to hang |
266 // No longer remove CheckCast after CCP as it gives me a place to hang |
253 // the proper address type - which is required to compute anti-deps. |
267 // the proper address type - which is required to compute anti-deps. |
254 //virtual Node *Ideal_DU_postCCP( PhaseCCP * ); |
268 //virtual Node *Ideal_DU_postCCP( PhaseCCP * ); |
255 }; |
269 }; |
256 |
270 |
|
271 |
|
272 //------------------------------EncodeP-------------------------------- |
|
273 // Encodes an oop pointers into its compressed form |
|
274 // Takes an extra argument which is the real heap base as a long which |
|
275 // may be useful for code generation in the backend. |
|
276 class EncodePNode : public TypeNode { |
|
277 public: |
|
278 EncodePNode(Node* value, const Type* type): |
|
279 TypeNode(type, 2) { |
|
280 init_req(0, NULL); |
|
281 init_req(1, value); |
|
282 } |
|
283 virtual int Opcode() const; |
|
284 virtual Node *Identity( PhaseTransform *phase ); |
|
285 virtual uint ideal_reg() const { return Op_RegN; } |
|
286 |
|
287 static Node* encode(PhaseGVN* phase, Node* value); |
|
288 }; |
|
289 |
|
290 //------------------------------DecodeN-------------------------------- |
|
291 // Converts a narrow oop into a real oop ptr. |
|
292 // Takes an extra argument which is the real heap base as a long which |
|
293 // may be useful for code generation in the backend. |
|
294 class DecodeNNode : public TypeNode { |
|
295 public: |
|
296 DecodeNNode(Node* value, const Type* type): |
|
297 TypeNode(type, 2) { |
|
298 init_req(0, NULL); |
|
299 init_req(1, value); |
|
300 } |
|
301 virtual int Opcode() const; |
|
302 virtual Node *Identity( PhaseTransform *phase ); |
|
303 virtual uint ideal_reg() const { return Op_RegP; } |
|
304 }; |
|
305 |
257 //------------------------------Conv2BNode------------------------------------- |
306 //------------------------------Conv2BNode------------------------------------- |
258 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1. |
307 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1. |
259 class Conv2BNode : public Node { |
308 class Conv2BNode : public Node { |
260 public: |
309 public: |
261 Conv2BNode( Node *i ) : Node(0,i) {} |
310 Conv2BNode( Node *i ) : Node(0,i) {} |