667 Opaque3Node(Compile* C, Node *n, int opt) : Opaque2Node(C, n), _opt(opt) {} |
667 Opaque3Node(Compile* C, Node *n, int opt) : Opaque2Node(C, n), _opt(opt) {} |
668 virtual int Opcode() const; |
668 virtual int Opcode() const; |
669 bool rtm_opt() const { return (_opt == RTM_OPT); } |
669 bool rtm_opt() const { return (_opt == RTM_OPT); } |
670 }; |
670 }; |
671 |
671 |
|
672 //------------------------------ProfileBooleanNode------------------------------- |
|
673 // A node represents value profile for a boolean during parsing. |
|
674 // Once parsing is over, the node goes away (during IGVN). |
|
675 // It is used to override branch frequencies from MDO (see has_injected_profile in parse2.cpp). |
|
676 class ProfileBooleanNode : public Node { |
|
677 uint _false_cnt; |
|
678 uint _true_cnt; |
|
679 bool _consumed; |
|
680 bool _delay_removal; |
|
681 virtual uint hash() const ; // { return NO_HASH; } |
|
682 virtual uint cmp( const Node &n ) const; |
|
683 public: |
|
684 ProfileBooleanNode(Node *n, uint false_cnt, uint true_cnt) : Node(0, n), |
|
685 _false_cnt(false_cnt), _true_cnt(true_cnt), _delay_removal(true), _consumed(false) {} |
|
686 |
|
687 uint false_count() const { return _false_cnt; } |
|
688 uint true_count() const { return _true_cnt; } |
|
689 |
|
690 void consume() { _consumed = true; } |
|
691 |
|
692 virtual int Opcode() const; |
|
693 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
|
694 virtual Node *Identity(PhaseTransform *phase); |
|
695 virtual const Type *bottom_type() const { return TypeInt::BOOL; } |
|
696 }; |
672 |
697 |
673 //----------------------PartialSubtypeCheckNode-------------------------------- |
698 //----------------------PartialSubtypeCheckNode-------------------------------- |
674 // The 2nd slow-half of a subtype check. Scan the subklass's 2ndary superklass |
699 // The 2nd slow-half of a subtype check. Scan the subklass's 2ndary superklass |
675 // array for an instance of the superklass. Set a hidden internal cache on a |
700 // array for an instance of the superklass. Set a hidden internal cache on a |
676 // hit (cache is checked with exposed code in gen_subtype_check()). Return |
701 // hit (cache is checked with exposed code in gen_subtype_check()). Return |