1019 #endif
1020 }
1021 }
1022 }
1023 return true;
1024 }
1025
1026
1027 //------------------------------place_near_use---------------------------------
1028 // Place some computation next to use but not inside inner loops.
1029 // For inner loop uses move it to the preheader area.
1030 Node *PhaseIdealLoop::place_near_use( Node *useblock ) const {
1031 IdealLoopTree *u_loop = get_loop( useblock );
1032 return (u_loop->_irreducible || u_loop->_child)
1033 ? useblock
1034 : u_loop->_head->as_Loop()->skip_strip_mined()->in(LoopNode::EntryControl);
1035 }
1036
1037
1038 bool PhaseIdealLoop::identical_backtoback_ifs(Node *n) {
1039 if (!n->is_If()) {
1040 return false;
1041 }
1042 if (!n->in(0)->is_Region()) {
1043 return false;
1044 }
1045 Node* region = n->in(0);
1046 Node* dom = idom(region);
1047 if (!dom->is_If() || dom->in(1) != n->in(1)) {
1048 return false;
1049 }
1050 IfNode* dom_if = dom->as_If();
1051 Node* proj_true = dom_if->proj_out(1);
1052 Node* proj_false = dom_if->proj_out(0);
1053
1054 for (uint i = 1; i < region->req(); i++) {
1055 if (is_dominator(proj_true, region->in(i))) {
1056 continue;
1057 }
1058 if (is_dominator(proj_false, region->in(i))) {
1059 continue;
|
1019 #endif
1020 }
1021 }
1022 }
1023 return true;
1024 }
1025
1026
1027 //------------------------------place_near_use---------------------------------
1028 // Place some computation next to use but not inside inner loops.
1029 // For inner loop uses move it to the preheader area.
1030 Node *PhaseIdealLoop::place_near_use( Node *useblock ) const {
1031 IdealLoopTree *u_loop = get_loop( useblock );
1032 return (u_loop->_irreducible || u_loop->_child)
1033 ? useblock
1034 : u_loop->_head->as_Loop()->skip_strip_mined()->in(LoopNode::EntryControl);
1035 }
1036
1037
1038 bool PhaseIdealLoop::identical_backtoback_ifs(Node *n) {
1039 if (!n->is_If() || n->is_CountedLoopEnd()) {
1040 return false;
1041 }
1042 if (!n->in(0)->is_Region()) {
1043 return false;
1044 }
1045 Node* region = n->in(0);
1046 Node* dom = idom(region);
1047 if (!dom->is_If() || dom->in(1) != n->in(1)) {
1048 return false;
1049 }
1050 IfNode* dom_if = dom->as_If();
1051 Node* proj_true = dom_if->proj_out(1);
1052 Node* proj_false = dom_if->proj_out(0);
1053
1054 for (uint i = 1; i < region->req(); i++) {
1055 if (is_dominator(proj_true, region->in(i))) {
1056 continue;
1057 }
1058 if (is_dominator(proj_false, region->in(i))) {
1059 continue;
|