1.1 --- a/src/share/vm/opto/connode.hpp Tue Apr 28 00:37:33 2015 -0700 1.2 +++ b/src/share/vm/opto/connode.hpp Thu Jan 29 10:25:59 2015 -0800 1.3 @@ -669,6 +669,31 @@ 1.4 bool rtm_opt() const { return (_opt == RTM_OPT); } 1.5 }; 1.6 1.7 +//------------------------------ProfileBooleanNode------------------------------- 1.8 +// A node represents value profile for a boolean during parsing. 1.9 +// Once parsing is over, the node goes away (during IGVN). 1.10 +// It is used to override branch frequencies from MDO (see has_injected_profile in parse2.cpp). 1.11 +class ProfileBooleanNode : public Node { 1.12 + uint _false_cnt; 1.13 + uint _true_cnt; 1.14 + bool _consumed; 1.15 + bool _delay_removal; 1.16 + virtual uint hash() const ; // { return NO_HASH; } 1.17 + virtual uint cmp( const Node &n ) const; 1.18 + public: 1.19 + ProfileBooleanNode(Node *n, uint false_cnt, uint true_cnt) : Node(0, n), 1.20 + _false_cnt(false_cnt), _true_cnt(true_cnt), _delay_removal(true), _consumed(false) {} 1.21 + 1.22 + uint false_count() const { return _false_cnt; } 1.23 + uint true_count() const { return _true_cnt; } 1.24 + 1.25 + void consume() { _consumed = true; } 1.26 + 1.27 + virtual int Opcode() const; 1.28 + virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 1.29 + virtual Node *Identity(PhaseTransform *phase); 1.30 + virtual const Type *bottom_type() const { return TypeInt::BOOL; } 1.31 +}; 1.32 1.33 //----------------------PartialSubtypeCheckNode-------------------------------- 1.34 // The 2nd slow-half of a subtype check. Scan the subklass's 2ndary superklass