278 virtual int Opcode() const; |
278 virtual int Opcode() const; |
279 virtual Node *Identity( PhaseTransform *phase ); |
279 virtual Node *Identity( PhaseTransform *phase ); |
280 virtual const Type *Value( PhaseTransform *phase ) const; |
280 virtual const Type *Value( PhaseTransform *phase ) const; |
281 virtual uint ideal_reg() const { return Op_RegN; } |
281 virtual uint ideal_reg() const { return Op_RegN; } |
282 |
282 |
283 static Node* encode(PhaseTransform* phase, Node* value); |
|
284 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp ); |
283 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp ); |
285 }; |
284 }; |
286 |
285 |
287 //------------------------------DecodeN-------------------------------- |
286 //------------------------------DecodeN-------------------------------- |
288 // Converts a narrow oop into a real oop ptr. |
287 // Converts a narrow oop into a real oop ptr. |
298 } |
297 } |
299 virtual int Opcode() const; |
298 virtual int Opcode() const; |
300 virtual Node *Identity( PhaseTransform *phase ); |
299 virtual Node *Identity( PhaseTransform *phase ); |
301 virtual const Type *Value( PhaseTransform *phase ) const; |
300 virtual const Type *Value( PhaseTransform *phase ) const; |
302 virtual uint ideal_reg() const { return Op_RegP; } |
301 virtual uint ideal_reg() const { return Op_RegP; } |
303 |
|
304 static Node* decode(PhaseTransform* phase, Node* value); |
|
305 }; |
302 }; |
306 |
303 |
307 //------------------------------Conv2BNode------------------------------------- |
304 //------------------------------Conv2BNode------------------------------------- |
308 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1. |
305 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1. |
309 class Conv2BNode : public Node { |
306 class Conv2BNode : public Node { |
547 // Stops value-numbering, Ideal calls or Identity functions. |
544 // Stops value-numbering, Ideal calls or Identity functions. |
548 class Opaque1Node : public Node { |
545 class Opaque1Node : public Node { |
549 virtual uint hash() const ; // { return NO_HASH; } |
546 virtual uint hash() const ; // { return NO_HASH; } |
550 virtual uint cmp( const Node &n ) const; |
547 virtual uint cmp( const Node &n ) const; |
551 public: |
548 public: |
552 Opaque1Node( Node *n ) : Node(0,n) {} |
549 Opaque1Node( Compile* C, Node *n ) : Node(0,n) { |
|
550 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
551 init_flags(Flag_is_macro); |
|
552 C->add_macro_node(this); |
|
553 } |
553 // Special version for the pre-loop to hold the original loop limit |
554 // Special version for the pre-loop to hold the original loop limit |
554 // which is consumed by range check elimination. |
555 // which is consumed by range check elimination. |
555 Opaque1Node( Node *n, Node* orig_limit ) : Node(0,n,orig_limit) {} |
556 Opaque1Node( Compile* C, Node *n, Node* orig_limit ) : Node(0,n,orig_limit) { |
|
557 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
558 init_flags(Flag_is_macro); |
|
559 C->add_macro_node(this); |
|
560 } |
556 Node* original_loop_limit() { return req()==3 ? in(2) : NULL; } |
561 Node* original_loop_limit() { return req()==3 ? in(2) : NULL; } |
557 virtual int Opcode() const; |
562 virtual int Opcode() const; |
558 virtual const Type *bottom_type() const { return TypeInt::INT; } |
563 virtual const Type *bottom_type() const { return TypeInt::INT; } |
559 virtual Node *Identity( PhaseTransform *phase ); |
564 virtual Node *Identity( PhaseTransform *phase ); |
560 }; |
565 }; |
570 // it's OK to be slightly sloppy on optimizations here. |
575 // it's OK to be slightly sloppy on optimizations here. |
571 class Opaque2Node : public Node { |
576 class Opaque2Node : public Node { |
572 virtual uint hash() const ; // { return NO_HASH; } |
577 virtual uint hash() const ; // { return NO_HASH; } |
573 virtual uint cmp( const Node &n ) const; |
578 virtual uint cmp( const Node &n ) const; |
574 public: |
579 public: |
575 Opaque2Node( Node *n ) : Node(0,n) {} |
580 Opaque2Node( Compile* C, Node *n ) : Node(0,n) { |
|
581 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
582 init_flags(Flag_is_macro); |
|
583 C->add_macro_node(this); |
|
584 } |
576 virtual int Opcode() const; |
585 virtual int Opcode() const; |
577 virtual const Type *bottom_type() const { return TypeInt::INT; } |
586 virtual const Type *bottom_type() const { return TypeInt::INT; } |
578 }; |
587 }; |
579 |
588 |
580 //----------------------PartialSubtypeCheckNode-------------------------------- |
589 //----------------------PartialSubtypeCheckNode-------------------------------- |