547 // Stops value-numbering, Ideal calls or Identity functions. |
547 // Stops value-numbering, Ideal calls or Identity functions. |
548 class Opaque1Node : public Node { |
548 class Opaque1Node : public Node { |
549 virtual uint hash() const ; // { return NO_HASH; } |
549 virtual uint hash() const ; // { return NO_HASH; } |
550 virtual uint cmp( const Node &n ) const; |
550 virtual uint cmp( const Node &n ) const; |
551 public: |
551 public: |
552 Opaque1Node( Node *n ) : Node(0,n) {} |
552 Opaque1Node( Compile* C, Node *n ) : Node(0,n) { |
|
553 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
554 init_flags(Flag_is_macro); |
|
555 C->add_macro_node(this); |
|
556 } |
553 // Special version for the pre-loop to hold the original loop limit |
557 // Special version for the pre-loop to hold the original loop limit |
554 // which is consumed by range check elimination. |
558 // which is consumed by range check elimination. |
555 Opaque1Node( Node *n, Node* orig_limit ) : Node(0,n,orig_limit) {} |
559 Opaque1Node( Compile* C, Node *n, Node* orig_limit ) : Node(0,n,orig_limit) { |
|
560 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
561 init_flags(Flag_is_macro); |
|
562 C->add_macro_node(this); |
|
563 } |
556 Node* original_loop_limit() { return req()==3 ? in(2) : NULL; } |
564 Node* original_loop_limit() { return req()==3 ? in(2) : NULL; } |
557 virtual int Opcode() const; |
565 virtual int Opcode() const; |
558 virtual const Type *bottom_type() const { return TypeInt::INT; } |
566 virtual const Type *bottom_type() const { return TypeInt::INT; } |
559 virtual Node *Identity( PhaseTransform *phase ); |
567 virtual Node *Identity( PhaseTransform *phase ); |
560 }; |
568 }; |
570 // it's OK to be slightly sloppy on optimizations here. |
578 // it's OK to be slightly sloppy on optimizations here. |
571 class Opaque2Node : public Node { |
579 class Opaque2Node : public Node { |
572 virtual uint hash() const ; // { return NO_HASH; } |
580 virtual uint hash() const ; // { return NO_HASH; } |
573 virtual uint cmp( const Node &n ) const; |
581 virtual uint cmp( const Node &n ) const; |
574 public: |
582 public: |
575 Opaque2Node( Node *n ) : Node(0,n) {} |
583 Opaque2Node( Compile* C, Node *n ) : Node(0,n) { |
|
584 // Put it on the Macro nodes list to removed during macro nodes expansion. |
|
585 init_flags(Flag_is_macro); |
|
586 C->add_macro_node(this); |
|
587 } |
576 virtual int Opcode() const; |
588 virtual int Opcode() const; |
577 virtual const Type *bottom_type() const { return TypeInt::INT; } |
589 virtual const Type *bottom_type() const { return TypeInt::INT; } |
578 }; |
590 }; |
579 |
591 |
580 //----------------------PartialSubtypeCheckNode-------------------------------- |
592 //----------------------PartialSubtypeCheckNode-------------------------------- |