< prev index next >

src/hotspot/share/opto/macroArrayCopy.cpp

Print this page




 118   }
 119 
 120   IfNode* iff = new IfNode(*ctrl, test, true_prob, COUNT_UNKNOWN);
 121   transform_later(iff);
 122 
 123   Node* if_slow = new IfTrueNode(iff);
 124   transform_later(if_slow);
 125 
 126   if (region != NULL) {
 127     region->add_req(if_slow);
 128   }
 129 
 130   Node* if_fast = new IfFalseNode(iff);
 131   transform_later(if_fast);
 132 
 133   *ctrl = if_fast;
 134 
 135   return if_slow;
 136 }
 137 
 138 inline Node* PhaseMacroExpand::generate_slow_guard(Node** ctrl, Node* test, RegionNode* region) {
 139   return generate_guard(ctrl, test, region, PROB_UNLIKELY_MAG(3));
 140 }
 141 
 142 inline Node* PhaseMacroExpand::generate_fair_guard(Node** ctrl, Node* test, RegionNode* region) {
 143   return generate_guard(ctrl, test, region, PROB_FAIR);
 144 }
 145 
 146 void PhaseMacroExpand::generate_negative_guard(Node** ctrl, Node* index, RegionNode* region) {
 147   if ((*ctrl)->is_top())
 148     return;                // already stopped
 149   if (_igvn.type(index)->higher_equal(TypeInt::POS)) // [0,maxint]
 150     return;                // index is already adequately typed
 151   Node* cmp_lt = new CmpINode(index, intcon(0));
 152   transform_later(cmp_lt);
 153   Node* bol_lt = new BoolNode(cmp_lt, BoolTest::lt);
 154   transform_later(bol_lt);
 155   generate_guard(ctrl, bol_lt, region, PROB_MIN);
 156 }
 157 
 158 void PhaseMacroExpand::generate_limit_guard(Node** ctrl, Node* offset, Node* subseq_length, Node* array_length, RegionNode* region) {




 118   }
 119 
 120   IfNode* iff = new IfNode(*ctrl, test, true_prob, COUNT_UNKNOWN);
 121   transform_later(iff);
 122 
 123   Node* if_slow = new IfTrueNode(iff);
 124   transform_later(if_slow);
 125 
 126   if (region != NULL) {
 127     region->add_req(if_slow);
 128   }
 129 
 130   Node* if_fast = new IfFalseNode(iff);
 131   transform_later(if_fast);
 132 
 133   *ctrl = if_fast;
 134 
 135   return if_slow;
 136 }
 137 
 138 Node* PhaseMacroExpand::generate_slow_guard(Node** ctrl, Node* test, RegionNode* region) {
 139   return generate_guard(ctrl, test, region, PROB_UNLIKELY_MAG(3));
 140 }
 141 
 142 inline Node* PhaseMacroExpand::generate_fair_guard(Node** ctrl, Node* test, RegionNode* region) {
 143   return generate_guard(ctrl, test, region, PROB_FAIR);
 144 }
 145 
 146 void PhaseMacroExpand::generate_negative_guard(Node** ctrl, Node* index, RegionNode* region) {
 147   if ((*ctrl)->is_top())
 148     return;                // already stopped
 149   if (_igvn.type(index)->higher_equal(TypeInt::POS)) // [0,maxint]
 150     return;                // index is already adequately typed
 151   Node* cmp_lt = new CmpINode(index, intcon(0));
 152   transform_later(cmp_lt);
 153   Node* bol_lt = new BoolNode(cmp_lt, BoolTest::lt);
 154   transform_later(bol_lt);
 155   generate_guard(ctrl, bol_lt, region, PROB_MIN);
 156 }
 157 
 158 void PhaseMacroExpand::generate_limit_guard(Node** ctrl, Node* offset, Node* subseq_length, Node* array_length, RegionNode* region) {


< prev index next >