src/hotspot/share/opto/loopTransform.cpp
changeset 49487 bde392011cd8
parent 48603 e5da6c246176
child 49600 d7c83c8e4e65
equal deleted inserted replaced
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()) {