changeset 49487 | bde392011cd8 |
parent 48603 | e5da6c246176 |
child 49600 | d7c83c8e4e65 |
49486:a3f1db30ab85 | 49487:bde392011cd8 |
---|---|
980 set_ctrl( n, find_non_split_ctrl(back_ctrl->in(0)) ); |
980 set_ctrl( n, find_non_split_ctrl(back_ctrl->in(0)) ); |
981 } |
981 } |
982 return n; |
982 return n; |
983 } |
983 } |
984 |
984 |
985 bool PhaseIdealLoop::cast_incr_before_loop(Node* incr, Node* ctrl, Node* loop) { |
985 Node* PhaseIdealLoop::cast_incr_before_loop(Node* incr, Node* ctrl, Node* loop) { |
986 Node* castii = new CastIINode(incr, TypeInt::INT, true); |
986 Node* castii = new CastIINode(incr, TypeInt::INT, true); |
987 castii->set_req(0, ctrl); |
987 castii->set_req(0, ctrl); |
988 register_new_node(castii, ctrl); |
988 register_new_node(castii, ctrl); |
989 for (DUIterator_Fast imax, i = incr->fast_outs(imax); i < imax; i++) { |
989 for (DUIterator_Fast imax, i = incr->fast_outs(imax); i < imax; i++) { |
990 Node* n = incr->fast_out(i); |
990 Node* n = incr->fast_out(i); |
991 if (n->is_Phi() && n->in(0) == loop) { |
991 if (n->is_Phi() && n->in(0) == loop) { |
992 int nrep = n->replace_edge(incr, castii); |
992 int nrep = n->replace_edge(incr, castii); |
993 return true; |
993 return castii; |
994 } |
994 } |
995 } |
995 } |
996 return false; |
996 return NULL; |
997 } |
|
998 |
|
999 // Make a copy of the skeleton range check predicates before the main |
|
1000 // loop and set the initial value of loop as input. After unrolling, |
|
1001 // the range of values for the induction variable in the main loop can |
|
1002 // fall outside the allowed range of values by the array access (main |
|
1003 // loop is never executed). When that happens, range check |
|
1004 // CastII/ConvI2L nodes cause some data paths to die. For consistency, |
|
1005 // the control paths must die too but the range checks were removed by |
|
1006 // predication. The range checks that we add here guarantee that they |
|
1007 // do. |
|
1008 void PhaseIdealLoop::duplicate_predicates(CountedLoopNode* pre_head, Node* min_taken, Node* castii, |
|
1009 IdealLoopTree* outer_loop, LoopNode* outer_main_head, |
|
1010 uint dd_main_head) { |
|
1011 if (UseLoopPredicate) { |
|
1012 Node* entry = pre_head->in(LoopNode::EntryControl); |
|
1013 Node* predicate = NULL; |
|
1014 predicate = find_predicate_insertion_point(entry, Deoptimization::Reason_loop_limit_check); |
|
1015 if (predicate != NULL) { |
|
1016 entry = entry->in(0)->in(0); |
|
1017 } |
|
1018 predicate = find_predicate_insertion_point(entry, Deoptimization::Reason_predicate); |
|
1019 if (predicate != NULL) { |
|
1020 IfNode* iff = entry->in(0)->as_If(); |
|
1021 ProjNode* uncommon_proj = iff->proj_out(1 - entry->as_Proj()->_con); |
|
1022 Node* rgn = uncommon_proj->unique_ctrl_out(); |
|
1023 assert(rgn->is_Region() || rgn->is_Call(), "must be a region or call uct"); |
|
1024 assert(iff->in(1)->in(1)->Opcode() == Op_Opaque1, "unexpected predicate shape"); |
|
1025 entry = entry->in(0)->in(0); |
|
1026 Node* prev_proj = min_taken; |
|
1027 while (entry != NULL && entry->is_Proj() && entry->in(0)->is_If()) { |
|
1028 uncommon_proj = entry->in(0)->as_If()->proj_out(1 - entry->as_Proj()->_con); |
|
1029 if (uncommon_proj->unique_ctrl_out() != rgn) |
|
1030 break; |
|
1031 iff = entry->in(0)->as_If(); |
|
1032 if (iff->in(1)->Opcode() == Op_Opaque4) { |
|
1033 Node_Stack to_clone(2); |
|
1034 to_clone.push(iff->in(1), 1); |
|
1035 uint current = C->unique(); |
|
1036 Node* result = NULL; |
|
1037 // Look for the opaque node to replace with the init value |
|
1038 // and clone everything in between. We keep the Opaque4 node |
|
1039 // so the duplicated predicates are eliminated once loop |
|
1040 // opts are over: they are here only to keep the IR graph |
|
1041 // consistent. |
|
1042 do { |
|
1043 Node* n = to_clone.node(); |
|
1044 uint i = to_clone.index(); |
|
1045 Node* m = n->in(i); |
|
1046 int op = m->Opcode(); |
|
1047 if (m->is_Bool() || |
|
1048 m->is_Cmp() || |
|
1049 op == Op_AndL || |
|
1050 op == Op_OrL || |
|
1051 op == Op_RShiftL || |
|
1052 op == Op_LShiftL || |
|
1053 op == Op_AddL || |
|
1054 op == Op_AddI || |
|
1055 op == Op_MulL || |
|
1056 op == Op_MulI || |
|
1057 op == Op_SubL || |
|
1058 op == Op_SubI || |
|
1059 op == Op_ConvI2L) { |
|
1060 to_clone.push(m, 1); |
|
1061 continue; |
|
1062 } |
|
1063 if (op == Op_Opaque1) { |
|
1064 if (n->_idx < current) { |
|
1065 n = n->clone(); |
|
1066 } |
|
1067 n->set_req(i, castii); |
|
1068 register_new_node(n, min_taken); |
|
1069 to_clone.set_node(n); |
|
1070 } |
|
1071 for (;;) { |
|
1072 Node* cur = to_clone.node(); |
|
1073 uint j = to_clone.index(); |
|
1074 if (j+1 < cur->req()) { |
|
1075 to_clone.set_index(j+1); |
|
1076 break; |
|
1077 } |
|
1078 to_clone.pop(); |
|
1079 if (to_clone.size() == 0) { |
|
1080 result = cur; |
|
1081 break; |
|
1082 } |
|
1083 Node* next = to_clone.node(); |
|
1084 j = to_clone.index(); |
|
1085 if (cur->_idx >= current) { |
|
1086 if (next->_idx < current) { |
|
1087 next = next->clone(); |
|
1088 register_new_node(next, min_taken); |
|
1089 to_clone.set_node(next); |
|
1090 } |
|
1091 assert(next->in(j) != cur, "input should have been cloned"); |
|
1092 next->set_req(j, cur); |
|
1093 } |
|
1094 } |
|
1095 } while (result == NULL); |
|
1096 assert(result->_idx >= current, "new node expected"); |
|
1097 |
|
1098 Node* proj = entry->clone(); |
|
1099 Node* other_proj = uncommon_proj->clone(); |
|
1100 Node* new_iff = iff->clone(); |
|
1101 new_iff->set_req(1, result); |
|
1102 proj->set_req(0, new_iff); |
|
1103 other_proj->set_req(0, new_iff); |
|
1104 Node *frame = new ParmNode(C->start(), TypeFunc::FramePtr); |
|
1105 register_new_node(frame, C->start()); |
|
1106 // It's impossible for the predicate to fail at runtime. Use |
|
1107 // an Halt node. |
|
1108 Node* halt = new HaltNode(other_proj, frame); |
|
1109 C->root()->add_req(halt); |
|
1110 new_iff->set_req(0, prev_proj); |
|
1111 |
|
1112 register_control(new_iff, outer_loop->_parent, prev_proj); |
|
1113 register_control(proj, outer_loop->_parent, new_iff); |
|
1114 register_control(other_proj, _ltree_root, new_iff); |
|
1115 register_control(halt, _ltree_root, other_proj); |
|
1116 |
|
1117 prev_proj = proj; |
|
1118 } |
|
1119 entry = entry->in(0)->in(0); |
|
1120 } |
|
1121 _igvn.replace_input_of(outer_main_head, LoopNode::EntryControl, prev_proj); |
|
1122 set_idom(outer_main_head, prev_proj, dd_main_head); |
|
1123 } |
|
1124 } |
|
997 } |
1125 } |
998 |
1126 |
999 //------------------------------insert_pre_post_loops-------------------------- |
1127 //------------------------------insert_pre_post_loops-------------------------- |
1000 // Insert pre and post loops. If peel_only is set, the pre-loop can not have |
1128 // Insert pre and post loops. If peel_only is set, the pre-loop can not have |
1001 // more iterations added. It acts as a 'peel' only, no lower-bound RCE, no |
1129 // more iterations added. It acts as a 'peel' only, no lower-bound RCE, no |
1135 // the if branch that enters the loop, between the input induction |
1263 // the if branch that enters the loop, between the input induction |
1136 // variable value and the induction variable Phi to preserve correct |
1264 // variable value and the induction variable Phi to preserve correct |
1137 // dependencies. |
1265 // dependencies. |
1138 |
1266 |
1139 // CastII for the main loop: |
1267 // CastII for the main loop: |
1140 bool inserted = cast_incr_before_loop( pre_incr, min_taken, main_head ); |
1268 Node* castii = cast_incr_before_loop( pre_incr, min_taken, main_head ); |
1141 assert(inserted, "no castII inserted"); |
1269 assert(castii != NULL, "no castII inserted"); |
1270 duplicate_predicates(pre_head, min_taken, castii, outer_loop, outer_main_head, dd_main_head); |
|
1142 |
1271 |
1143 // Step B4: Shorten the pre-loop to run only 1 iteration (for now). |
1272 // Step B4: Shorten the pre-loop to run only 1 iteration (for now). |
1144 // RCE and alignment may change this later. |
1273 // RCE and alignment may change this later. |
1145 Node *cmp_end = pre_end->cmp_node(); |
1274 Node *cmp_end = pre_end->cmp_node(); |
1146 assert( cmp_end->in(2) == limit, "" ); |
1275 assert( cmp_end->in(2) == limit, "" ); |
1401 cur_phi->set_req(LoopNode::EntryControl, fallnew); |
1530 cur_phi->set_req(LoopNode::EntryControl, fallnew); |
1402 } |
1531 } |
1403 } |
1532 } |
1404 |
1533 |
1405 // CastII for the new post loop: |
1534 // CastII for the new post loop: |
1406 bool inserted = cast_incr_before_loop(zer_opaq->in(1), zer_taken, post_head); |
1535 Node* castii = cast_incr_before_loop(zer_opaq->in(1), zer_taken, post_head); |
1407 assert(inserted, "no castII inserted"); |
1536 assert(castii != NULL, "no castII inserted"); |
1408 |
1537 |
1409 return new_main_exit; |
1538 return new_main_exit; |
1410 } |
1539 } |
1411 |
1540 |
1412 //------------------------------is_invariant----------------------------- |
1541 //------------------------------is_invariant----------------------------- |
1465 // graph shape is encountered, the compiler bails out loop unrolling; |
1594 // graph shape is encountered, the compiler bails out loop unrolling; |
1466 // compilation of the method will still succeed. |
1595 // compilation of the method will still succeed. |
1467 if (!is_canonical_loop_entry(loop_head)) { |
1596 if (!is_canonical_loop_entry(loop_head)) { |
1468 return; |
1597 return; |
1469 } |
1598 } |
1470 opaq = ctrl->in(0)->in(1)->in(1)->in(2); |
1599 opaq = loop_head->skip_predicates()->in(0)->in(1)->in(1)->in(2); |
1471 // Zero-trip test uses an 'opaque' node which is not shared. |
1600 // Zero-trip test uses an 'opaque' node which is not shared. |
1472 assert(opaq->outcnt() == 1 && opaq->in(1) == limit, ""); |
1601 assert(opaq->outcnt() == 1 && opaq->in(1) == limit, ""); |
1473 } |
1602 } |
1474 |
1603 |
1475 C->set_major_progress(); |
1604 C->set_major_progress(); |
2032 } |
2161 } |
2033 } |
2162 } |
2034 return false; |
2163 return false; |
2035 } |
2164 } |
2036 |
2165 |
2166 // Same as PhaseIdealLoop::duplicate_predicates() but for range checks |
|
2167 // eliminated by iteration splitting. |
|
2168 Node* PhaseIdealLoop::add_range_check_predicate(IdealLoopTree* loop, CountedLoopNode* cl, |
|
2169 Node* predicate_proj, int scale_con, Node* offset, |
|
2170 Node* limit, jint stride_con) { |
|
2171 bool overflow = false; |
|
2172 BoolNode* bol = rc_predicate(loop, predicate_proj, scale_con, offset, cl->init_trip(), NULL, stride_con, limit, (stride_con > 0) != (scale_con > 0), overflow); |
|
2173 Node* opaque_bol = new Opaque4Node(C, bol, _igvn.intcon(1)); |
|
2174 register_new_node(opaque_bol, predicate_proj); |
|
2175 IfNode* new_iff = NULL; |
|
2176 if (overflow) { |
|
2177 new_iff = new IfNode(predicate_proj, bol, PROB_MAX, COUNT_UNKNOWN); |
|
2178 } else { |
|
2179 new_iff = new RangeCheckNode(predicate_proj, bol, PROB_MAX, COUNT_UNKNOWN); |
|
2180 } |
|
2181 register_control(new_iff, loop->_parent, predicate_proj); |
|
2182 Node* iffalse = new IfFalseNode(new_iff); |
|
2183 register_control(iffalse, _ltree_root, new_iff); |
|
2184 ProjNode* iftrue = new IfTrueNode(new_iff); |
|
2185 register_control(iftrue, loop->_parent, new_iff); |
|
2186 Node *frame = new ParmNode(C->start(), TypeFunc::FramePtr); |
|
2187 register_new_node(frame, C->start()); |
|
2188 Node* halt = new HaltNode(iffalse, frame); |
|
2189 register_control(halt, _ltree_root, iffalse); |
|
2190 C->root()->add_req(halt); |
|
2191 return iftrue; |
|
2192 } |
|
2193 |
|
2037 //------------------------------do_range_check--------------------------------- |
2194 //------------------------------do_range_check--------------------------------- |
2038 // Eliminate range-checks and other trip-counter vs loop-invariant tests. |
2195 // Eliminate range-checks and other trip-counter vs loop-invariant tests. |
2039 int PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) { |
2196 int PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) { |
2040 #ifndef PRODUCT |
2197 #ifndef PRODUCT |
2041 if (PrintOpto && VerifyLoopOptimizations) { |
2198 if (PrintOpto && VerifyLoopOptimizations) { |
2067 if (!is_canonical_loop_entry(cl)) { |
2224 if (!is_canonical_loop_entry(cl)) { |
2068 return closed_range_checks; |
2225 return closed_range_checks; |
2069 } |
2226 } |
2070 |
2227 |
2071 // Need to find the main-loop zero-trip guard |
2228 // Need to find the main-loop zero-trip guard |
2072 Node *ctrl = cl->skip_strip_mined()->in(LoopNode::EntryControl); |
2229 Node *ctrl = cl->skip_predicates(); |
2073 Node *iffm = ctrl->in(0); |
2230 Node *iffm = ctrl->in(0); |
2074 Node *opqzm = iffm->in(1)->in(1)->in(2); |
2231 Node *opqzm = iffm->in(1)->in(1)->in(2); |
2075 assert(opqzm->in(1) == main_limit, "do not understand situation"); |
2232 assert(opqzm->in(1) == main_limit, "do not understand situation"); |
2076 |
2233 |
2077 // Find the pre-loop limit; we will expand its iterations to |
2234 // Find the pre-loop limit; we will expand its iterations to |
2122 |
2279 |
2123 // Count number of range checks and reduce by load range limits, if zero, |
2280 // Count number of range checks and reduce by load range limits, if zero, |
2124 // the loop is in canonical form to multiversion. |
2281 // the loop is in canonical form to multiversion. |
2125 closed_range_checks = 0; |
2282 closed_range_checks = 0; |
2126 |
2283 |
2284 Node* predicate_proj = cl->skip_strip_mined()->in(LoopNode::EntryControl); |
|
2285 assert(predicate_proj->is_Proj() && predicate_proj->in(0)->is_If(), "if projection only"); |
|
2127 // Check loop body for tests of trip-counter plus loop-invariant vs loop-variant. |
2286 // Check loop body for tests of trip-counter plus loop-invariant vs loop-variant. |
2128 for( uint i = 0; i < loop->_body.size(); i++ ) { |
2287 for( uint i = 0; i < loop->_body.size(); i++ ) { |
2129 Node *iff = loop->_body[i]; |
2288 Node *iff = loop->_body[i]; |
2130 if (iff->Opcode() == Op_If || |
2289 if (iff->Opcode() == Op_If || |
2131 iff->Opcode() == Op_RangeCheck) { // Test? |
2290 iff->Opcode() == Op_RangeCheck) { // Test? |
2166 // Here we know 'limit' is loop invariant |
2325 // Here we know 'limit' is loop invariant |
2167 |
2326 |
2168 // 'limit' maybe pinned below the zero trip test (probably from a |
2327 // 'limit' maybe pinned below the zero trip test (probably from a |
2169 // previous round of rce), in which case, it can't be used in the |
2328 // previous round of rce), in which case, it can't be used in the |
2170 // zero trip test expression which must occur before the zero test's if. |
2329 // zero trip test expression which must occur before the zero test's if. |
2171 if( limit_c == ctrl ) { |
2330 if (is_dominator(ctrl, limit_c)) { |
2172 continue; // Don't rce this check but continue looking for other candidates. |
2331 continue; // Don't rce this check but continue looking for other candidates. |
2173 } |
2332 } |
2174 |
2333 |
2175 // Check for scaled induction variable plus an offset |
2334 // Check for scaled induction variable plus an offset |
2176 Node *offset = NULL; |
2335 Node *offset = NULL; |
2184 continue; // Offset is not really loop invariant |
2343 continue; // Offset is not really loop invariant |
2185 // Here we know 'offset' is loop invariant. |
2344 // Here we know 'offset' is loop invariant. |
2186 |
2345 |
2187 // As above for the 'limit', the 'offset' maybe pinned below the |
2346 // As above for the 'limit', the 'offset' maybe pinned below the |
2188 // zero trip test. |
2347 // zero trip test. |
2189 if( offset_c == ctrl ) { |
2348 if (is_dominator(ctrl, offset_c)) { |
2190 continue; // Don't rce this check but continue looking for other candidates. |
2349 continue; // Don't rce this check but continue looking for other candidates. |
2191 } |
2350 } |
2192 #ifdef ASSERT |
2351 #ifdef ASSERT |
2193 if (TraceRangeLimitCheck) { |
2352 if (TraceRangeLimitCheck) { |
2194 tty->print_cr("RC bool node%s", flip ? " flipped:" : ":"); |
2353 tty->print_cr("RC bool node%s", flip ? " flipped:" : ":"); |
2207 if( b_test._test == BoolTest::lt ) { // Range checks always use lt |
2366 if( b_test._test == BoolTest::lt ) { // Range checks always use lt |
2208 // The underflow and overflow limits: 0 <= scale*I+offset < limit |
2367 // The underflow and overflow limits: 0 <= scale*I+offset < limit |
2209 add_constraint( stride_con, scale_con, offset, zero, limit, pre_ctrl, &pre_limit, &main_limit ); |
2368 add_constraint( stride_con, scale_con, offset, zero, limit, pre_ctrl, &pre_limit, &main_limit ); |
2210 // (0-offset)/scale could be outside of loop iterations range. |
2369 // (0-offset)/scale could be outside of loop iterations range. |
2211 conditional_rc = true; |
2370 conditional_rc = true; |
2371 predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, offset, limit, stride_con); |
|
2212 } else { |
2372 } else { |
2213 if (PrintOpto) { |
2373 if (PrintOpto) { |
2214 tty->print_cr("missed RCE opportunity"); |
2374 tty->print_cr("missed RCE opportunity"); |
2215 } |
2375 } |
2216 continue; // In release mode, ignore it |
2376 continue; // In release mode, ignore it |
2275 closed_range_checks--; |
2435 closed_range_checks--; |
2276 } |
2436 } |
2277 |
2437 |
2278 } // End of is IF |
2438 } // End of is IF |
2279 |
2439 |
2440 } |
|
2441 if (predicate_proj != cl->skip_strip_mined()->in(LoopNode::EntryControl)) { |
|
2442 _igvn.replace_input_of(cl->skip_strip_mined(), LoopNode::EntryControl, predicate_proj); |
|
2443 set_idom(cl->skip_strip_mined(), predicate_proj, dom_depth(cl->skip_strip_mined())); |
|
2280 } |
2444 } |
2281 |
2445 |
2282 // Update loop limits |
2446 // Update loop limits |
2283 if (conditional_rc) { |
2447 if (conditional_rc) { |
2284 pre_limit = (stride_con > 0) ? (Node*)new MinINode(pre_limit, orig_limit) |
2448 pre_limit = (stride_con > 0) ? (Node*)new MinINode(pre_limit, orig_limit) |
2538 } |
2702 } |
2539 } |
2703 } |
2540 |
2704 |
2541 #ifdef ASSERT |
2705 #ifdef ASSERT |
2542 static CountedLoopNode* locate_pre_from_main(CountedLoopNode *cl) { |
2706 static CountedLoopNode* locate_pre_from_main(CountedLoopNode *cl) { |
2543 Node *ctrl = cl->skip_strip_mined()->in(LoopNode::EntryControl); |
2707 Node *ctrl = cl->skip_predicates(); |
2544 assert(ctrl->Opcode() == Op_IfTrue || ctrl->Opcode() == Op_IfFalse, ""); |
2708 assert(ctrl->Opcode() == Op_IfTrue || ctrl->Opcode() == Op_IfFalse, ""); |
2545 Node *iffm = ctrl->in(0); |
2709 Node *iffm = ctrl->in(0); |
2546 assert(iffm->Opcode() == Op_If, ""); |
2710 assert(iffm->Opcode() == Op_If, ""); |
2547 Node *p_f = iffm->in(0); |
2711 Node *p_f = iffm->in(0); |
2548 assert(p_f->Opcode() == Op_IfFalse, ""); |
2712 assert(p_f->Opcode() == Op_IfFalse, ""); |
2577 if (!main_head->is_main_loop()) { |
2741 if (!main_head->is_main_loop()) { |
2578 return; |
2742 return; |
2579 } |
2743 } |
2580 |
2744 |
2581 assert(locate_pre_from_main(main_head) == cl, "bad main loop"); |
2745 assert(locate_pre_from_main(main_head) == cl, "bad main loop"); |
2582 Node* main_iff = main_head->skip_strip_mined()->in(LoopNode::EntryControl)->in(0); |
2746 Node* main_iff = main_head->skip_predicates()->in(0); |
2583 |
2747 |
2584 // Remove the Opaque1Node of the pre loop and make it execute all iterations |
2748 // Remove the Opaque1Node of the pre loop and make it execute all iterations |
2585 phase->_igvn.replace_input_of(pre_cmp, 2, pre_cmp->in(2)->in(2)); |
2749 phase->_igvn.replace_input_of(pre_cmp, 2, pre_cmp->in(2)->in(2)); |
2586 // Remove the Opaque1Node of the main loop so it can be optimized out |
2750 // Remove the Opaque1Node of the main loop so it can be optimized out |
2587 Node* main_cmp = main_iff->in(1)->in(1); |
2751 Node* main_cmp = main_iff->in(1)->in(1); |
2638 needs_guard = (init_t->_lo <= limit_t->_hi); |
2802 needs_guard = (init_t->_lo <= limit_t->_hi); |
2639 } |
2803 } |
2640 } |
2804 } |
2641 if (needs_guard) { |
2805 if (needs_guard) { |
2642 // Check for an obvious zero trip guard. |
2806 // Check for an obvious zero trip guard. |
2643 Node* inctrl = PhaseIdealLoop::skip_loop_predicates(cl->skip_strip_mined()->in(LoopNode::EntryControl)); |
2807 Node* inctrl = PhaseIdealLoop::skip_loop_predicates(cl->skip_predicates()); |
2644 if (inctrl->Opcode() == Op_IfTrue || inctrl->Opcode() == Op_IfFalse) { |
2808 if (inctrl->Opcode() == Op_IfTrue || inctrl->Opcode() == Op_IfFalse) { |
2645 bool maybe_swapped = (inctrl->Opcode() == Op_IfFalse); |
2809 bool maybe_swapped = (inctrl->Opcode() == Op_IfFalse); |
2646 // The test should look like just the backedge of a CountedLoop |
2810 // The test should look like just the backedge of a CountedLoop |
2647 Node* iff = inctrl->in(0); |
2811 Node* iff = inctrl->in(0); |
2648 if (iff->is_If()) { |
2812 if (iff->is_If()) { |