1 /*
   2  * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/shared/barrierSet.hpp"
  27 #include "gc/shared/c2/barrierSetC2.hpp"
  28 #include "memory/allocation.inline.hpp"
  29 #include "memory/resourceArea.hpp"
  30 #include "opto/addnode.hpp"
  31 #include "opto/callnode.hpp"
  32 #include "opto/castnode.hpp"
  33 #include "opto/connode.hpp"
  34 #include "opto/castnode.hpp"
  35 #include "opto/divnode.hpp"
  36 #include "opto/loopnode.hpp"
  37 #include "opto/matcher.hpp"
  38 #include "opto/mulnode.hpp"
  39 #include "opto/movenode.hpp"
  40 #include "opto/opaquenode.hpp"
  41 #include "opto/rootnode.hpp"
  42 #include "opto/subnode.hpp"
  43 #include "utilities/macros.hpp"
  44 #if INCLUDE_ZGC
  45 #include "gc/z/c2/zBarrierSetC2.hpp"
  46 #endif
  47 
  48 //=============================================================================
  49 //------------------------------split_thru_phi---------------------------------
  50 // Split Node 'n' through merge point if there is enough win.
  51 Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) {
  52   if (n->Opcode() == Op_ConvI2L && n->bottom_type() != TypeLong::LONG) {
  53     // ConvI2L may have type information on it which is unsafe to push up
  54     // so disable this for now
  55     return NULL;
  56   }
  57 
  58   // Splitting range check CastIIs through a loop induction Phi can
  59   // cause new Phis to be created that are left unrelated to the loop
  60   // induction Phi and prevent optimizations (vectorization)
  61   if (n->Opcode() == Op_CastII && n->as_CastII()->has_range_check() &&
  62       region->is_CountedLoop() && n->in(1) == region->as_CountedLoop()->phi()) {
  63     return NULL;
  64   }
  65 
  66   int wins = 0;
  67   assert(!n->is_CFG(), "");
  68   assert(region->is_Region(), "");
  69 
  70   const Type* type = n->bottom_type();
  71   const TypeOopPtr *t_oop = _igvn.type(n)->isa_oopptr();
  72   Node *phi;
  73   if (t_oop != NULL && t_oop->is_known_instance_field()) {
  74     int iid    = t_oop->instance_id();
  75     int index  = C->get_alias_index(t_oop);
  76     int offset = t_oop->offset();
  77     phi = new PhiNode(region, type, NULL, iid, index, offset);
  78   } else {
  79     phi = PhiNode::make_blank(region, n);
  80   }
  81   uint old_unique = C->unique();
  82   for (uint i = 1; i < region->req(); i++) {
  83     Node *x;
  84     Node* the_clone = NULL;
  85     if (region->in(i) == C->top()) {
  86       x = C->top();             // Dead path?  Use a dead data op
  87     } else {
  88       x = n->clone();           // Else clone up the data op
  89       the_clone = x;            // Remember for possible deletion.
  90       // Alter data node to use pre-phi inputs
  91       if (n->in(0) == region)
  92         x->set_req( 0, region->in(i) );
  93       for (uint j = 1; j < n->req(); j++) {
  94         Node *in = n->in(j);
  95         if (in->is_Phi() && in->in(0) == region)
  96           x->set_req( j, in->in(i) ); // Use pre-Phi input for the clone
  97       }
  98     }
  99     // Check for a 'win' on some paths
 100     const Type *t = x->Value(&_igvn);
 101 
 102     bool singleton = t->singleton();
 103 
 104     // A TOP singleton indicates that there are no possible values incoming
 105     // along a particular edge. In most cases, this is OK, and the Phi will
 106     // be eliminated later in an Ideal call. However, we can't allow this to
 107     // happen if the singleton occurs on loop entry, as the elimination of
 108     // the PhiNode may cause the resulting node to migrate back to a previous
 109     // loop iteration.
 110     if (singleton && t == Type::TOP) {
 111       // Is_Loop() == false does not confirm the absence of a loop (e.g., an
 112       // irreducible loop may not be indicated by an affirmative is_Loop());
 113       // therefore, the only top we can split thru a phi is on a backedge of
 114       // a loop.
 115       singleton &= region->is_Loop() && (i != LoopNode::EntryControl);
 116     }
 117 
 118     if (singleton) {
 119       wins++;
 120       x = ((PhaseGVN&)_igvn).makecon(t);
 121     } else {
 122       // We now call Identity to try to simplify the cloned node.
 123       // Note that some Identity methods call phase->type(this).
 124       // Make sure that the type array is big enough for
 125       // our new node, even though we may throw the node away.
 126       // (Note: This tweaking with igvn only works because x is a new node.)
 127       _igvn.set_type(x, t);
 128       // If x is a TypeNode, capture any more-precise type permanently into Node
 129       // otherwise it will be not updated during igvn->transform since
 130       // igvn->type(x) is set to x->Value() already.
 131       x->raise_bottom_type(t);
 132       Node *y = _igvn.apply_identity(x);
 133       if (y != x) {
 134         wins++;
 135         x = y;
 136       } else {
 137         y = _igvn.hash_find(x);
 138         if (y) {
 139           wins++;
 140           x = y;
 141         } else {
 142           // Else x is a new node we are keeping
 143           // We do not need register_new_node_with_optimizer
 144           // because set_type has already been called.
 145           _igvn._worklist.push(x);
 146         }
 147       }
 148     }
 149     if (x != the_clone && the_clone != NULL)
 150       _igvn.remove_dead_node(the_clone);
 151     phi->set_req( i, x );
 152   }
 153   // Too few wins?
 154   if (wins <= policy) {
 155     _igvn.remove_dead_node(phi);
 156     return NULL;
 157   }
 158 
 159   // Record Phi
 160   register_new_node( phi, region );
 161 
 162   for (uint i2 = 1; i2 < phi->req(); i2++) {
 163     Node *x = phi->in(i2);
 164     // If we commoned up the cloned 'x' with another existing Node,
 165     // the existing Node picks up a new use.  We need to make the
 166     // existing Node occur higher up so it dominates its uses.
 167     Node *old_ctrl;
 168     IdealLoopTree *old_loop;
 169 
 170     if (x->is_Con()) {
 171       // Constant's control is always root.
 172       set_ctrl(x, C->root());
 173       continue;
 174     }
 175     // The occasional new node
 176     if (x->_idx >= old_unique) {     // Found a new, unplaced node?
 177       old_ctrl = NULL;
 178       old_loop = NULL;               // Not in any prior loop
 179     } else {
 180       old_ctrl = get_ctrl(x);
 181       old_loop = get_loop(old_ctrl); // Get prior loop
 182     }
 183     // New late point must dominate new use
 184     Node *new_ctrl = dom_lca(old_ctrl, region->in(i2));
 185     if (new_ctrl == old_ctrl) // Nothing is changed
 186       continue;
 187 
 188     IdealLoopTree *new_loop = get_loop(new_ctrl);
 189 
 190     // Don't move x into a loop if its uses are
 191     // outside of loop. Otherwise x will be cloned
 192     // for each use outside of this loop.
 193     IdealLoopTree *use_loop = get_loop(region);
 194     if (!new_loop->is_member(use_loop) &&
 195         (old_loop == NULL || !new_loop->is_member(old_loop))) {
 196       // Take early control, later control will be recalculated
 197       // during next iteration of loop optimizations.
 198       new_ctrl = get_early_ctrl(x);
 199       new_loop = get_loop(new_ctrl);
 200     }
 201     // Set new location
 202     set_ctrl(x, new_ctrl);
 203     // If changing loop bodies, see if we need to collect into new body
 204     if (old_loop != new_loop) {
 205       if (old_loop && !old_loop->_child)
 206         old_loop->_body.yank(x);
 207       if (!new_loop->_child)
 208         new_loop->_body.push(x);  // Collect body info
 209     }
 210   }
 211 
 212   return phi;
 213 }
 214 
 215 //------------------------------dominated_by------------------------------------
 216 // Replace the dominated test with an obvious true or false.  Place it on the
 217 // IGVN worklist for later cleanup.  Move control-dependent data Nodes on the
 218 // live path up to the dominating control.
 219 void PhaseIdealLoop::dominated_by( Node *prevdom, Node *iff, bool flip, bool exclude_loop_predicate ) {
 220   if (VerifyLoopOptimizations && PrintOpto) { tty->print_cr("dominating test"); }
 221 
 222   // prevdom is the dominating projection of the dominating test.
 223   assert( iff->is_If(), "" );
 224   assert(iff->Opcode() == Op_If || iff->Opcode() == Op_CountedLoopEnd || iff->Opcode() == Op_RangeCheck, "Check this code when new subtype is added");
 225   int pop = prevdom->Opcode();
 226   assert( pop == Op_IfFalse || pop == Op_IfTrue, "" );
 227   if (flip) {
 228     if (pop == Op_IfTrue)
 229       pop = Op_IfFalse;
 230     else
 231       pop = Op_IfTrue;
 232   }
 233   // 'con' is set to true or false to kill the dominated test.
 234   Node *con = _igvn.makecon(pop == Op_IfTrue ? TypeInt::ONE : TypeInt::ZERO);
 235   set_ctrl(con, C->root()); // Constant gets a new use
 236   // Hack the dominated test
 237   _igvn.replace_input_of(iff, 1, con);
 238 
 239   // If I dont have a reachable TRUE and FALSE path following the IfNode then
 240   // I can assume this path reaches an infinite loop.  In this case it's not
 241   // important to optimize the data Nodes - either the whole compilation will
 242   // be tossed or this path (and all data Nodes) will go dead.
 243   if (iff->outcnt() != 2) return;
 244 
 245   // Make control-dependent data Nodes on the live path (path that will remain
 246   // once the dominated IF is removed) become control-dependent on the
 247   // dominating projection.
 248   Node* dp = iff->as_If()->proj_out_or_null(pop == Op_IfTrue);
 249 
 250   // Loop predicates may have depending checks which should not
 251   // be skipped. For example, range check predicate has two checks
 252   // for lower and upper bounds.
 253   if (dp == NULL)
 254     return;
 255 
 256   ProjNode* dp_proj  = dp->as_Proj();
 257   ProjNode* unc_proj = iff->as_If()->proj_out(1 - dp_proj->_con)->as_Proj();
 258   if (exclude_loop_predicate &&
 259       (unc_proj->is_uncommon_trap_proj(Deoptimization::Reason_predicate) != NULL ||
 260        unc_proj->is_uncommon_trap_proj(Deoptimization::Reason_profile_predicate) != NULL ||
 261        unc_proj->is_uncommon_trap_proj(Deoptimization::Reason_range_check) != NULL)) {
 262     // If this is a range check (IfNode::is_range_check), do not
 263     // reorder because Compile::allow_range_check_smearing might have
 264     // changed the check.
 265     return; // Let IGVN transformation change control dependence.
 266   }
 267 
 268   IdealLoopTree *old_loop = get_loop(dp);
 269 
 270   for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
 271     Node* cd = dp->fast_out(i); // Control-dependent node
 272     if (cd->depends_only_on_test()) {
 273       assert(cd->in(0) == dp, "");
 274       _igvn.replace_input_of(cd, 0, prevdom);
 275       set_early_ctrl(cd);
 276       IdealLoopTree *new_loop = get_loop(get_ctrl(cd));
 277       if (old_loop != new_loop) {
 278         if (!old_loop->_child) old_loop->_body.yank(cd);
 279         if (!new_loop->_child) new_loop->_body.push(cd);
 280       }
 281       --i;
 282       --imax;
 283     }
 284   }
 285 }
 286 
 287 //------------------------------has_local_phi_input----------------------------
 288 // Return TRUE if 'n' has Phi inputs from its local block and no other
 289 // block-local inputs (all non-local-phi inputs come from earlier blocks)
 290 Node *PhaseIdealLoop::has_local_phi_input( Node *n ) {
 291   Node *n_ctrl = get_ctrl(n);
 292   // See if some inputs come from a Phi in this block, or from before
 293   // this block.
 294   uint i;
 295   for( i = 1; i < n->req(); i++ ) {
 296     Node *phi = n->in(i);
 297     if( phi->is_Phi() && phi->in(0) == n_ctrl )
 298       break;
 299   }
 300   if( i >= n->req() )
 301     return NULL;                // No Phi inputs; nowhere to clone thru
 302 
 303   // Check for inputs created between 'n' and the Phi input.  These
 304   // must split as well; they have already been given the chance
 305   // (courtesy of a post-order visit) and since they did not we must
 306   // recover the 'cost' of splitting them by being very profitable
 307   // when splitting 'n'.  Since this is unlikely we simply give up.
 308   for( i = 1; i < n->req(); i++ ) {
 309     Node *m = n->in(i);
 310     if( get_ctrl(m) == n_ctrl && !m->is_Phi() ) {
 311       // We allow the special case of AddP's with no local inputs.
 312       // This allows us to split-up address expressions.
 313       if (m->is_AddP() &&
 314           get_ctrl(m->in(2)) != n_ctrl &&
 315           get_ctrl(m->in(3)) != n_ctrl) {
 316         // Move the AddP up to dominating point
 317         Node* c = find_non_split_ctrl(idom(n_ctrl));
 318         if (c->is_OuterStripMinedLoop()) {
 319           c->as_Loop()->verify_strip_mined(1);
 320           c = c->in(LoopNode::EntryControl);
 321         }
 322         set_ctrl_and_loop(m, c);
 323         continue;
 324       }
 325       return NULL;
 326     }
 327     assert(m->is_Phi() || is_dominator(get_ctrl(m), n_ctrl), "m has strange control");
 328   }
 329 
 330   return n_ctrl;
 331 }
 332 
 333 //------------------------------remix_address_expressions----------------------
 334 // Rework addressing expressions to get the most loop-invariant stuff
 335 // moved out.  We'd like to do all associative operators, but it's especially
 336 // important (common) to do address expressions.
 337 Node *PhaseIdealLoop::remix_address_expressions( Node *n ) {
 338   if (!has_ctrl(n))  return NULL;
 339   Node *n_ctrl = get_ctrl(n);
 340   IdealLoopTree *n_loop = get_loop(n_ctrl);
 341 
 342   // See if 'n' mixes loop-varying and loop-invariant inputs and
 343   // itself is loop-varying.
 344 
 345   // Only interested in binary ops (and AddP)
 346   if( n->req() < 3 || n->req() > 4 ) return NULL;
 347 
 348   Node *n1_ctrl = get_ctrl(n->in(                    1));
 349   Node *n2_ctrl = get_ctrl(n->in(                    2));
 350   Node *n3_ctrl = get_ctrl(n->in(n->req() == 3 ? 2 : 3));
 351   IdealLoopTree *n1_loop = get_loop( n1_ctrl );
 352   IdealLoopTree *n2_loop = get_loop( n2_ctrl );
 353   IdealLoopTree *n3_loop = get_loop( n3_ctrl );
 354 
 355   // Does one of my inputs spin in a tighter loop than self?
 356   if( (n_loop->is_member( n1_loop ) && n_loop != n1_loop) ||
 357       (n_loop->is_member( n2_loop ) && n_loop != n2_loop) ||
 358       (n_loop->is_member( n3_loop ) && n_loop != n3_loop) )
 359     return NULL;                // Leave well enough alone
 360 
 361   // Is at least one of my inputs loop-invariant?
 362   if( n1_loop == n_loop &&
 363       n2_loop == n_loop &&
 364       n3_loop == n_loop )
 365     return NULL;                // No loop-invariant inputs
 366 
 367 
 368   int n_op = n->Opcode();
 369 
 370   // Replace expressions like ((V+I) << 2) with (V<<2 + I<<2).
 371   if( n_op == Op_LShiftI ) {
 372     // Scale is loop invariant
 373     Node *scale = n->in(2);
 374     Node *scale_ctrl = get_ctrl(scale);
 375     IdealLoopTree *scale_loop = get_loop(scale_ctrl );
 376     if( n_loop == scale_loop || !scale_loop->is_member( n_loop ) )
 377       return NULL;
 378     const TypeInt *scale_t = scale->bottom_type()->isa_int();
 379     if( scale_t && scale_t->is_con() && scale_t->get_con() >= 16 )
 380       return NULL;              // Dont bother with byte/short masking
 381     // Add must vary with loop (else shift would be loop-invariant)
 382     Node *add = n->in(1);
 383     Node *add_ctrl = get_ctrl(add);
 384     IdealLoopTree *add_loop = get_loop(add_ctrl);
 385     //assert( n_loop == add_loop, "" );
 386     if( n_loop != add_loop ) return NULL;  // happens w/ evil ZKM loops
 387 
 388     // Convert I-V into I+ (0-V); same for V-I
 389     if( add->Opcode() == Op_SubI &&
 390         _igvn.type( add->in(1) ) != TypeInt::ZERO ) {
 391       Node *zero = _igvn.intcon(0);
 392       set_ctrl(zero, C->root());
 393       Node *neg = new SubINode( _igvn.intcon(0), add->in(2) );
 394       register_new_node( neg, get_ctrl(add->in(2) ) );
 395       add = new AddINode( add->in(1), neg );
 396       register_new_node( add, add_ctrl );
 397     }
 398     if( add->Opcode() != Op_AddI ) return NULL;
 399     // See if one add input is loop invariant
 400     Node *add_var = add->in(1);
 401     Node *add_var_ctrl = get_ctrl(add_var);
 402     IdealLoopTree *add_var_loop = get_loop(add_var_ctrl );
 403     Node *add_invar = add->in(2);
 404     Node *add_invar_ctrl = get_ctrl(add_invar);
 405     IdealLoopTree *add_invar_loop = get_loop(add_invar_ctrl );
 406     if( add_var_loop == n_loop ) {
 407     } else if( add_invar_loop == n_loop ) {
 408       // Swap to find the invariant part
 409       add_invar = add_var;
 410       add_invar_ctrl = add_var_ctrl;
 411       add_invar_loop = add_var_loop;
 412       add_var = add->in(2);
 413       Node *add_var_ctrl = get_ctrl(add_var);
 414       IdealLoopTree *add_var_loop = get_loop(add_var_ctrl );
 415     } else                      // Else neither input is loop invariant
 416       return NULL;
 417     if( n_loop == add_invar_loop || !add_invar_loop->is_member( n_loop ) )
 418       return NULL;              // No invariant part of the add?
 419 
 420     // Yes!  Reshape address expression!
 421     Node *inv_scale = new LShiftINode( add_invar, scale );
 422     Node *inv_scale_ctrl =
 423       dom_depth(add_invar_ctrl) > dom_depth(scale_ctrl) ?
 424       add_invar_ctrl : scale_ctrl;
 425     register_new_node( inv_scale, inv_scale_ctrl );
 426     Node *var_scale = new LShiftINode( add_var, scale );
 427     register_new_node( var_scale, n_ctrl );
 428     Node *var_add = new AddINode( var_scale, inv_scale );
 429     register_new_node( var_add, n_ctrl );
 430     _igvn.replace_node( n, var_add );
 431     return var_add;
 432   }
 433 
 434   // Replace (I+V) with (V+I)
 435   if( n_op == Op_AddI ||
 436       n_op == Op_AddL ||
 437       n_op == Op_AddF ||
 438       n_op == Op_AddD ||
 439       n_op == Op_MulI ||
 440       n_op == Op_MulL ||
 441       n_op == Op_MulF ||
 442       n_op == Op_MulD ) {
 443     if( n2_loop == n_loop ) {
 444       assert( n1_loop != n_loop, "" );
 445       n->swap_edges(1, 2);
 446     }
 447   }
 448 
 449   // Replace ((I1 +p V) +p I2) with ((I1 +p I2) +p V),
 450   // but not if I2 is a constant.
 451   if( n_op == Op_AddP ) {
 452     if( n2_loop == n_loop && n3_loop != n_loop ) {
 453       if( n->in(2)->Opcode() == Op_AddP && !n->in(3)->is_Con() ) {
 454         Node *n22_ctrl = get_ctrl(n->in(2)->in(2));
 455         Node *n23_ctrl = get_ctrl(n->in(2)->in(3));
 456         IdealLoopTree *n22loop = get_loop( n22_ctrl );
 457         IdealLoopTree *n23_loop = get_loop( n23_ctrl );
 458         if( n22loop != n_loop && n22loop->is_member(n_loop) &&
 459             n23_loop == n_loop ) {
 460           Node *add1 = new AddPNode( n->in(1), n->in(2)->in(2), n->in(3) );
 461           // Stuff new AddP in the loop preheader
 462           register_new_node( add1, n_loop->_head->in(LoopNode::EntryControl) );
 463           Node *add2 = new AddPNode( n->in(1), add1, n->in(2)->in(3) );
 464           register_new_node( add2, n_ctrl );
 465           _igvn.replace_node( n, add2 );
 466           return add2;
 467         }
 468       }
 469     }
 470 
 471     // Replace (I1 +p (I2 + V)) with ((I1 +p I2) +p V)
 472     if (n2_loop != n_loop && n3_loop == n_loop) {
 473       if (n->in(3)->Opcode() == Op_AddX) {
 474         Node *V = n->in(3)->in(1);
 475         Node *I = n->in(3)->in(2);
 476         if (is_member(n_loop,get_ctrl(V))) {
 477         } else {
 478           Node *tmp = V; V = I; I = tmp;
 479         }
 480         if (!is_member(n_loop,get_ctrl(I))) {
 481           Node *add1 = new AddPNode(n->in(1), n->in(2), I);
 482           // Stuff new AddP in the loop preheader
 483           register_new_node(add1, n_loop->_head->in(LoopNode::EntryControl));
 484           Node *add2 = new AddPNode(n->in(1), add1, V);
 485           register_new_node(add2, n_ctrl);
 486           _igvn.replace_node(n, add2);
 487           return add2;
 488         }
 489       }
 490     }
 491   }
 492 
 493   return NULL;
 494 }
 495 
 496 //------------------------------conditional_move-------------------------------
 497 // Attempt to replace a Phi with a conditional move.  We have some pretty
 498 // strict profitability requirements.  All Phis at the merge point must
 499 // be converted, so we can remove the control flow.  We need to limit the
 500 // number of c-moves to a small handful.  All code that was in the side-arms
 501 // of the CFG diamond is now speculatively executed.  This code has to be
 502 // "cheap enough".  We are pretty much limited to CFG diamonds that merge
 503 // 1 or 2 items with a total of 1 or 2 ops executed speculatively.
 504 Node *PhaseIdealLoop::conditional_move( Node *region ) {
 505 
 506   assert(region->is_Region(), "sanity check");
 507   if (region->req() != 3) return NULL;
 508 
 509   // Check for CFG diamond
 510   Node *lp = region->in(1);
 511   Node *rp = region->in(2);
 512   if (!lp || !rp) return NULL;
 513   Node *lp_c = lp->in(0);
 514   if (lp_c == NULL || lp_c != rp->in(0) || !lp_c->is_If()) return NULL;
 515   IfNode *iff = lp_c->as_If();
 516 
 517   // Check for ops pinned in an arm of the diamond.
 518   // Can't remove the control flow in this case
 519   if (lp->outcnt() > 1) return NULL;
 520   if (rp->outcnt() > 1) return NULL;
 521 
 522   IdealLoopTree* r_loop = get_loop(region);
 523   assert(r_loop == get_loop(iff), "sanity");
 524   // Always convert to CMOVE if all results are used only outside this loop.
 525   bool used_inside_loop = (r_loop == _ltree_root);
 526 
 527   // Check profitability
 528   int cost = 0;
 529   int phis = 0;
 530   for (DUIterator_Fast imax, i = region->fast_outs(imax); i < imax; i++) {
 531     Node *out = region->fast_out(i);
 532     if (!out->is_Phi()) continue; // Ignore other control edges, etc
 533     phis++;
 534     PhiNode* phi = out->as_Phi();
 535     BasicType bt = phi->type()->basic_type();
 536     switch (bt) {
 537     case T_DOUBLE:
 538     case T_FLOAT:
 539       if (C->use_cmove()) {
 540         continue; //TODO: maybe we want to add some cost
 541       }
 542       cost += Matcher::float_cmove_cost(); // Could be very expensive
 543       break;
 544     case T_LONG: {
 545       cost += Matcher::long_cmove_cost(); // May encodes as 2 CMOV's
 546     }
 547     case T_INT:                 // These all CMOV fine
 548     case T_ADDRESS: {           // (RawPtr)
 549       cost++;
 550       break;
 551     }
 552     case T_NARROWOOP: // Fall through
 553     case T_OBJECT: {            // Base oops are OK, but not derived oops
 554       const TypeOopPtr *tp = phi->type()->make_ptr()->isa_oopptr();
 555       // Derived pointers are Bad (tm): what's the Base (for GC purposes) of a
 556       // CMOVE'd derived pointer?  It's a CMOVE'd derived base.  Thus
 557       // CMOVE'ing a derived pointer requires we also CMOVE the base.  If we
 558       // have a Phi for the base here that we convert to a CMOVE all is well
 559       // and good.  But if the base is dead, we'll not make a CMOVE.  Later
 560       // the allocator will have to produce a base by creating a CMOVE of the
 561       // relevant bases.  This puts the allocator in the business of
 562       // manufacturing expensive instructions, generally a bad plan.
 563       // Just Say No to Conditionally-Moved Derived Pointers.
 564       if (tp && tp->offset() != 0)
 565         return NULL;
 566       cost++;
 567       break;
 568     }
 569     default:
 570       return NULL;              // In particular, can't do memory or I/O
 571     }
 572     // Add in cost any speculative ops
 573     for (uint j = 1; j < region->req(); j++) {
 574       Node *proj = region->in(j);
 575       Node *inp = phi->in(j);
 576       if (get_ctrl(inp) == proj) { // Found local op
 577         cost++;
 578         // Check for a chain of dependent ops; these will all become
 579         // speculative in a CMOV.
 580         for (uint k = 1; k < inp->req(); k++)
 581           if (get_ctrl(inp->in(k)) == proj)
 582             cost += ConditionalMoveLimit; // Too much speculative goo
 583       }
 584     }
 585     // See if the Phi is used by a Cmp or Narrow oop Decode/Encode.
 586     // This will likely Split-If, a higher-payoff operation.
 587     for (DUIterator_Fast kmax, k = phi->fast_outs(kmax); k < kmax; k++) {
 588       Node* use = phi->fast_out(k);
 589       if (use->is_Cmp() || use->is_DecodeNarrowPtr() || use->is_EncodeNarrowPtr())
 590         cost += ConditionalMoveLimit;
 591       // Is there a use inside the loop?
 592       // Note: check only basic types since CMoveP is pinned.
 593       if (!used_inside_loop && is_java_primitive(bt)) {
 594         IdealLoopTree* u_loop = get_loop(has_ctrl(use) ? get_ctrl(use) : use);
 595         if (r_loop == u_loop || r_loop->is_member(u_loop)) {
 596           used_inside_loop = true;
 597         }
 598       }
 599     }
 600   }//for
 601   Node* bol = iff->in(1);
 602   assert(bol->Opcode() == Op_Bool, "");
 603   int cmp_op = bol->in(1)->Opcode();
 604   // It is expensive to generate flags from a float compare.
 605   // Avoid duplicated float compare.
 606   if (phis > 1 && (cmp_op == Op_CmpF || cmp_op == Op_CmpD)) return NULL;
 607 
 608   float infrequent_prob = PROB_UNLIKELY_MAG(3);
 609   // Ignore cost and blocks frequency if CMOVE can be moved outside the loop.
 610   if (used_inside_loop) {
 611     if (cost >= ConditionalMoveLimit) return NULL; // Too much goo
 612 
 613     // BlockLayoutByFrequency optimization moves infrequent branch
 614     // from hot path. No point in CMOV'ing in such case (110 is used
 615     // instead of 100 to take into account not exactness of float value).
 616     if (BlockLayoutByFrequency) {
 617       infrequent_prob = MAX2(infrequent_prob, (float)BlockLayoutMinDiamondPercentage/110.0f);
 618     }
 619   }
 620   // Check for highly predictable branch.  No point in CMOV'ing if
 621   // we are going to predict accurately all the time.
 622   if (C->use_cmove() && (cmp_op == Op_CmpF || cmp_op == Op_CmpD)) {
 623     //keep going
 624   } else if (iff->_prob < infrequent_prob ||
 625       iff->_prob > (1.0f - infrequent_prob))
 626     return NULL;
 627 
 628   // --------------
 629   // Now replace all Phis with CMOV's
 630   Node *cmov_ctrl = iff->in(0);
 631   uint flip = (lp->Opcode() == Op_IfTrue);
 632   Node_List wq;
 633   while (1) {
 634     PhiNode* phi = NULL;
 635     for (DUIterator_Fast imax, i = region->fast_outs(imax); i < imax; i++) {
 636       Node *out = region->fast_out(i);
 637       if (out->is_Phi()) {
 638         phi = out->as_Phi();
 639         break;
 640       }
 641     }
 642     if (phi == NULL)  break;
 643     if (PrintOpto && VerifyLoopOptimizations) { tty->print_cr("CMOV"); }
 644     // Move speculative ops
 645     wq.push(phi);
 646     while (wq.size() > 0) {
 647       Node *n = wq.pop();
 648       for (uint j = 1; j < n->req(); j++) {
 649         Node* m = n->in(j);
 650         if (m != NULL && !is_dominator(get_ctrl(m), cmov_ctrl)) {
 651 #ifndef PRODUCT
 652           if (PrintOpto && VerifyLoopOptimizations) {
 653             tty->print("  speculate: ");
 654             m->dump();
 655           }
 656 #endif
 657           set_ctrl(m, cmov_ctrl);
 658           wq.push(m);
 659         }
 660       }
 661     }
 662     Node *cmov = CMoveNode::make(cmov_ctrl, iff->in(1), phi->in(1+flip), phi->in(2-flip), _igvn.type(phi));
 663     register_new_node( cmov, cmov_ctrl );
 664     _igvn.replace_node( phi, cmov );
 665 #ifndef PRODUCT
 666     if (TraceLoopOpts) {
 667       tty->print("CMOV  ");
 668       r_loop->dump_head();
 669       if (Verbose) {
 670         bol->in(1)->dump(1);
 671         cmov->dump(1);
 672       }
 673     }
 674     if (VerifyLoopOptimizations) verify();
 675 #endif
 676   }
 677 
 678   // The useless CFG diamond will fold up later; see the optimization in
 679   // RegionNode::Ideal.
 680   _igvn._worklist.push(region);
 681 
 682   return iff->in(1);
 683 }
 684 
 685 static void enqueue_cfg_uses(Node* m, Unique_Node_List& wq) {
 686   for (DUIterator_Fast imax, i = m->fast_outs(imax); i < imax; i++) {
 687     Node* u = m->fast_out(i);
 688     if (u->is_CFG()) {
 689       if (u->Opcode() == Op_NeverBranch) {
 690         u = ((NeverBranchNode*)u)->proj_out(0);
 691         enqueue_cfg_uses(u, wq);
 692       } else {
 693         wq.push(u);
 694       }
 695     }
 696   }
 697 }
 698 
 699 // Try moving a store out of a loop, right before the loop
 700 Node* PhaseIdealLoop::try_move_store_before_loop(Node* n, Node *n_ctrl) {
 701   // Store has to be first in the loop body
 702   IdealLoopTree *n_loop = get_loop(n_ctrl);
 703   if (n->is_Store() && n_loop != _ltree_root &&
 704       n_loop->is_loop() && n_loop->_head->is_Loop() &&
 705       n->in(0) != NULL) {
 706     Node* address = n->in(MemNode::Address);
 707     Node* value = n->in(MemNode::ValueIn);
 708     Node* mem = n->in(MemNode::Memory);
 709     IdealLoopTree* address_loop = get_loop(get_ctrl(address));
 710     IdealLoopTree* value_loop = get_loop(get_ctrl(value));
 711 
 712     // - address and value must be loop invariant
 713     // - memory must be a memory Phi for the loop
 714     // - Store must be the only store on this memory slice in the
 715     // loop: if there's another store following this one then value
 716     // written at iteration i by the second store could be overwritten
 717     // at iteration i+n by the first store: it's not safe to move the
 718     // first store out of the loop
 719     // - nothing must observe the memory Phi: it guarantees no read
 720     // before the store, we are also guaranteed the store post
 721     // dominates the loop head (ignoring a possible early
 722     // exit). Otherwise there would be extra Phi involved between the
 723     // loop's Phi and the store.
 724     // - there must be no early exit from the loop before the Store
 725     // (such an exit most of the time would be an extra use of the
 726     // memory Phi but sometimes is a bottom memory Phi that takes the
 727     // store as input).
 728 
 729     if (!n_loop->is_member(address_loop) &&
 730         !n_loop->is_member(value_loop) &&
 731         mem->is_Phi() && mem->in(0) == n_loop->_head &&
 732         mem->outcnt() == 1 &&
 733         mem->in(LoopNode::LoopBackControl) == n) {
 734 
 735       assert(n_loop->_tail != NULL, "need a tail");
 736       assert(is_dominator(n_ctrl, n_loop->_tail), "store control must not be in a branch in the loop");
 737 
 738       // Verify that there's no early exit of the loop before the store.
 739       bool ctrl_ok = false;
 740       {
 741         // Follow control from loop head until n, we exit the loop or
 742         // we reach the tail
 743         ResourceMark rm;
 744         Unique_Node_List wq;
 745         wq.push(n_loop->_head);
 746 
 747         for (uint next = 0; next < wq.size(); ++next) {
 748           Node *m = wq.at(next);
 749           if (m == n->in(0)) {
 750             ctrl_ok = true;
 751             continue;
 752           }
 753           assert(!has_ctrl(m), "should be CFG");
 754           if (!n_loop->is_member(get_loop(m)) || m == n_loop->_tail) {
 755             ctrl_ok = false;
 756             break;
 757           }
 758           enqueue_cfg_uses(m, wq);
 759           if (wq.size() > 10) {
 760             ctrl_ok = false;
 761             break;
 762           }
 763         }
 764       }
 765       if (ctrl_ok) {
 766         // move the Store
 767         _igvn.replace_input_of(mem, LoopNode::LoopBackControl, mem);
 768         _igvn.replace_input_of(n, 0, n_loop->_head->as_Loop()->skip_strip_mined()->in(LoopNode::EntryControl));
 769         _igvn.replace_input_of(n, MemNode::Memory, mem->in(LoopNode::EntryControl));
 770         // Disconnect the phi now. An empty phi can confuse other
 771         // optimizations in this pass of loop opts.
 772         _igvn.replace_node(mem, mem->in(LoopNode::EntryControl));
 773         n_loop->_body.yank(mem);
 774 
 775         set_ctrl_and_loop(n, n->in(0));
 776 
 777         return n;
 778       }
 779     }
 780   }
 781   return NULL;
 782 }
 783 
 784 // Try moving a store out of a loop, right after the loop
 785 void PhaseIdealLoop::try_move_store_after_loop(Node* n) {
 786   if (n->is_Store() && n->in(0) != NULL) {
 787     Node *n_ctrl = get_ctrl(n);
 788     IdealLoopTree *n_loop = get_loop(n_ctrl);
 789     // Store must be in a loop
 790     if (n_loop != _ltree_root && !n_loop->_irreducible) {
 791       Node* address = n->in(MemNode::Address);
 792       Node* value = n->in(MemNode::ValueIn);
 793       IdealLoopTree* address_loop = get_loop(get_ctrl(address));
 794       // address must be loop invariant
 795       if (!n_loop->is_member(address_loop)) {
 796         // Store must be last on this memory slice in the loop and
 797         // nothing in the loop must observe it
 798         Node* phi = NULL;
 799         for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
 800           Node* u = n->fast_out(i);
 801           if (has_ctrl(u)) { // control use?
 802             IdealLoopTree *u_loop = get_loop(get_ctrl(u));
 803             if (!n_loop->is_member(u_loop)) {
 804               continue;
 805             }
 806             if (u->is_Phi() && u->in(0) == n_loop->_head) {
 807               assert(_igvn.type(u) == Type::MEMORY, "bad phi");
 808               // multiple phis on the same slice are possible
 809               if (phi != NULL) {
 810                 return;
 811               }
 812               phi = u;
 813               continue;
 814             }
 815           }
 816           return;
 817         }
 818         if (phi != NULL) {
 819           // Nothing in the loop before the store (next iteration)
 820           // must observe the stored value
 821           bool mem_ok = true;
 822           {
 823             ResourceMark rm;
 824             Unique_Node_List wq;
 825             wq.push(phi);
 826             for (uint next = 0; next < wq.size() && mem_ok; ++next) {
 827               Node *m = wq.at(next);
 828               for (DUIterator_Fast imax, i = m->fast_outs(imax); i < imax && mem_ok; i++) {
 829                 Node* u = m->fast_out(i);
 830                 if (u->is_Store() || u->is_Phi()) {
 831                   if (u != n) {
 832                     wq.push(u);
 833                     mem_ok = (wq.size() <= 10);
 834                   }
 835                 } else {
 836                   mem_ok = false;
 837                   break;
 838                 }
 839               }
 840             }
 841           }
 842           if (mem_ok) {
 843             // Move the store out of the loop if the LCA of all
 844             // users (except for the phi) is outside the loop.
 845             Node* hook = new Node(1);
 846             _igvn.rehash_node_delayed(phi);
 847             int count = phi->replace_edge(n, hook);
 848             assert(count > 0, "inconsistent phi");
 849 
 850             // Compute latest point this store can go
 851             Node* lca = get_late_ctrl(n, get_ctrl(n));
 852             if (n_loop->is_member(get_loop(lca))) {
 853               // LCA is in the loop - bail out
 854               _igvn.replace_node(hook, n);
 855               return;
 856             }
 857 #ifdef ASSERT
 858             if (n_loop->_head->is_Loop() && n_loop->_head->as_Loop()->is_strip_mined()) {
 859               assert(n_loop->_head->Opcode() == Op_CountedLoop, "outer loop is a strip mined");
 860               n_loop->_head->as_Loop()->verify_strip_mined(1);
 861               Node* outer = n_loop->_head->as_CountedLoop()->outer_loop();
 862               IdealLoopTree* outer_loop = get_loop(outer);
 863               assert(n_loop->_parent == outer_loop, "broken loop tree");
 864               assert(get_loop(lca) == outer_loop, "safepoint in outer loop consume all memory state");
 865             }
 866 #endif
 867 
 868             // Move store out of the loop
 869             _igvn.replace_node(hook, n->in(MemNode::Memory));
 870             _igvn.replace_input_of(n, 0, lca);
 871             set_ctrl_and_loop(n, lca);
 872 
 873             // Disconnect the phi now. An empty phi can confuse other
 874             // optimizations in this pass of loop opts..
 875             if (phi->in(LoopNode::LoopBackControl) == phi) {
 876               _igvn.replace_node(phi, phi->in(LoopNode::EntryControl));
 877               n_loop->_body.yank(phi);
 878             }
 879           }
 880         }
 881       }
 882     }
 883   }
 884 }
 885 
 886 //------------------------------split_if_with_blocks_pre-----------------------
 887 // Do the real work in a non-recursive function.  Data nodes want to be
 888 // cloned in the pre-order so they can feed each other nicely.
 889 Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) {
 890   BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
 891   Node* bs_res = bs->split_if_pre(this, n);
 892   if (bs_res != NULL) {
 893     return bs_res;
 894   }
 895   // Cloning these guys is unlikely to win
 896   int n_op = n->Opcode();
 897   if( n_op == Op_MergeMem ) return n;
 898   if( n->is_Proj() ) return n;
 899   // Do not clone-up CmpFXXX variations, as these are always
 900   // followed by a CmpI
 901   if( n->is_Cmp() ) return n;
 902   // Attempt to use a conditional move instead of a phi/branch
 903   if( ConditionalMoveLimit > 0 && n_op == Op_Region ) {
 904     Node *cmov = conditional_move( n );
 905     if( cmov ) return cmov;
 906   }
 907   if( n->is_CFG() || n->is_LoadStore() )
 908     return n;
 909   if( n_op == Op_Opaque1 ||     // Opaque nodes cannot be mod'd
 910       n_op == Op_Opaque2 ) {
 911     if( !C->major_progress() )   // If chance of no more loop opts...
 912       _igvn._worklist.push(n);  // maybe we'll remove them
 913     return n;
 914   }
 915 
 916   if( n->is_Con() ) return n;   // No cloning for Con nodes
 917 
 918   Node *n_ctrl = get_ctrl(n);
 919   if( !n_ctrl ) return n;       // Dead node
 920 
 921   Node* res = try_move_store_before_loop(n, n_ctrl);
 922   if (res != NULL) {
 923     return n;
 924   }
 925 
 926   // Attempt to remix address expressions for loop invariants
 927   Node *m = remix_address_expressions( n );
 928   if( m ) return m;
 929 
 930   if (n->is_ConstraintCast()) {
 931     Node* dom_cast = n->as_ConstraintCast()->dominating_cast(&_igvn, this);
 932     // ConstraintCastNode::dominating_cast() uses node control input to determine domination.
 933     // Node control inputs don't necessarily agree with loop control info (due to
 934     // transformations happened in between), thus additional dominance check is needed
 935     // to keep loop info valid.
 936     if (dom_cast != NULL && is_dominator(get_ctrl(dom_cast), get_ctrl(n))) {
 937       _igvn.replace_node(n, dom_cast);
 938       return dom_cast;
 939     }
 940   }
 941 
 942   // Determine if the Node has inputs from some local Phi.
 943   // Returns the block to clone thru.
 944   Node *n_blk = has_local_phi_input( n );
 945   if( !n_blk ) return n;
 946 
 947   // Do not clone the trip counter through on a CountedLoop
 948   // (messes up the canonical shape).
 949   if( n_blk->is_CountedLoop() && n->Opcode() == Op_AddI ) return n;
 950 
 951   // Check for having no control input; not pinned.  Allow
 952   // dominating control.
 953   if (n->in(0)) {
 954     Node *dom = idom(n_blk);
 955     if (dom_lca(n->in(0), dom) != n->in(0)) {
 956       return n;
 957     }
 958   }
 959   // Policy: when is it profitable.  You must get more wins than
 960   // policy before it is considered profitable.  Policy is usually 0,
 961   // so 1 win is considered profitable.  Big merges will require big
 962   // cloning, so get a larger policy.
 963   int policy = n_blk->req() >> 2;
 964 
 965   // If the loop is a candidate for range check elimination,
 966   // delay splitting through it's phi until a later loop optimization
 967   if (n_blk->is_CountedLoop()) {
 968     IdealLoopTree *lp = get_loop(n_blk);
 969     if (lp && lp->_rce_candidate) {
 970       return n;
 971     }
 972   }
 973 
 974   // Use same limit as split_if_with_blocks_post
 975   if( C->live_nodes() > 35000 ) return n; // Method too big
 976 
 977   // Split 'n' through the merge point if it is profitable
 978   Node *phi = split_thru_phi( n, n_blk, policy );
 979   if (!phi) return n;
 980 
 981   // Found a Phi to split thru!
 982   // Replace 'n' with the new phi
 983   _igvn.replace_node( n, phi );
 984   // Moved a load around the loop, 'en-registering' something.
 985   if (n_blk->is_Loop() && n->is_Load() &&
 986       !phi->in(LoopNode::LoopBackControl)->is_Load())
 987     C->set_major_progress();
 988 
 989   return phi;
 990 }
 991 
 992 static bool merge_point_too_heavy(Compile* C, Node* region) {
 993   // Bail out if the region and its phis have too many users.
 994   int weight = 0;
 995   for (DUIterator_Fast imax, i = region->fast_outs(imax); i < imax; i++) {
 996     weight += region->fast_out(i)->outcnt();
 997   }
 998   int nodes_left = C->max_node_limit() - C->live_nodes();
 999   if (weight * 8 > nodes_left) {
1000     if (PrintOpto) {
1001       tty->print_cr("*** Split-if bails out:  %d nodes, region weight %d", C->unique(), weight);
1002     }
1003     return true;
1004   } else {
1005     return false;
1006   }
1007 }
1008 
1009 static bool merge_point_safe(Node* region) {
1010   // 4799512: Stop split_if_with_blocks from splitting a block with a ConvI2LNode
1011   // having a PhiNode input. This sidesteps the dangerous case where the split
1012   // ConvI2LNode may become TOP if the input Value() does not
1013   // overlap the ConvI2L range, leaving a node which may not dominate its
1014   // uses.
1015   // A better fix for this problem can be found in the BugTraq entry, but
1016   // expediency for Mantis demands this hack.
1017   // 6855164: If the merge point has a FastLockNode with a PhiNode input, we stop
1018   // split_if_with_blocks from splitting a block because we could not move around
1019   // the FastLockNode.
1020   for (DUIterator_Fast imax, i = region->fast_outs(imax); i < imax; i++) {
1021     Node* n = region->fast_out(i);
1022     if (n->is_Phi()) {
1023       for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
1024         Node* m = n->fast_out(j);
1025         if (m->is_FastLock())
1026           return false;
1027 #ifdef _LP64
1028         if (m->Opcode() == Op_ConvI2L)
1029           return false;
1030         if (m->is_CastII() && m->isa_CastII()->has_range_check()) {
1031           return false;
1032         }
1033 #endif
1034       }
1035     }
1036   }
1037   return true;
1038 }
1039 
1040 
1041 //------------------------------place_near_use---------------------------------
1042 // Place some computation next to use but not inside inner loops.
1043 // For inner loop uses move it to the preheader area.
1044 Node *PhaseIdealLoop::place_near_use(Node *useblock) const {
1045   IdealLoopTree *u_loop = get_loop( useblock );
1046   if (u_loop->_irreducible) {
1047     return useblock;
1048   }
1049   if (u_loop->_child) {
1050     if (useblock == u_loop->_head && u_loop->_head->is_OuterStripMinedLoop()) {
1051       return u_loop->_head->in(LoopNode::EntryControl);
1052     }
1053     return useblock;
1054   }
1055   return u_loop->_head->as_Loop()->skip_strip_mined()->in(LoopNode::EntryControl);
1056 }
1057 
1058 
1059 bool PhaseIdealLoop::identical_backtoback_ifs(Node *n) {
1060   if (!n->is_If() || n->is_CountedLoopEnd()) {
1061     return false;
1062   }
1063   if (!n->in(0)->is_Region()) {
1064     return false;
1065   }
1066   Node* region = n->in(0);
1067   Node* dom = idom(region);
1068   if (!dom->is_If() || dom->in(1) != n->in(1)) {
1069     return false;
1070   }
1071   IfNode* dom_if = dom->as_If();
1072   Node* proj_true = dom_if->proj_out(1);
1073   Node* proj_false = dom_if->proj_out(0);
1074 
1075   for (uint i = 1; i < region->req(); i++) {
1076     if (is_dominator(proj_true, region->in(i))) {
1077       continue;
1078     }
1079     if (is_dominator(proj_false, region->in(i))) {
1080       continue;
1081     }
1082     return false;
1083   }
1084 
1085   return true;
1086 }
1087 
1088 bool PhaseIdealLoop::can_split_if(Node *n_ctrl) {
1089   if (C->live_nodes() > 35000) {
1090     return false; // Method too big
1091   }
1092 
1093   // Do not do 'split-if' if irreducible loops are present.
1094   if (_has_irreducible_loops) {
1095     return false;
1096   }
1097 
1098   if (merge_point_too_heavy(C, n_ctrl)) {
1099     return false;
1100   }
1101 
1102   // Do not do 'split-if' if some paths are dead.  First do dead code
1103   // elimination and then see if its still profitable.
1104   for (uint i = 1; i < n_ctrl->req(); i++) {
1105     if (n_ctrl->in(i) == C->top()) {
1106       return false;
1107     }
1108   }
1109 
1110   // If trying to do a 'Split-If' at the loop head, it is only
1111   // profitable if the cmp folds up on BOTH paths.  Otherwise we
1112   // risk peeling a loop forever.
1113 
1114   // CNC - Disabled for now.  Requires careful handling of loop
1115   // body selection for the cloned code.  Also, make sure we check
1116   // for any input path not being in the same loop as n_ctrl.  For
1117   // irreducible loops we cannot check for 'n_ctrl->is_Loop()'
1118   // because the alternative loop entry points won't be converted
1119   // into LoopNodes.
1120   IdealLoopTree *n_loop = get_loop(n_ctrl);
1121   for (uint j = 1; j < n_ctrl->req(); j++) {
1122     if (get_loop(n_ctrl->in(j)) != n_loop) {
1123       return false;
1124     }
1125   }
1126 
1127   // Check for safety of the merge point.
1128   if (!merge_point_safe(n_ctrl)) {
1129     return false;
1130   }
1131 
1132   return true;
1133 }
1134 
1135 //------------------------------split_if_with_blocks_post----------------------
1136 // Do the real work in a non-recursive function.  CFG hackery wants to be
1137 // in the post-order, so it can dirty the I-DOM info and not use the dirtied
1138 // info.
1139 void PhaseIdealLoop::split_if_with_blocks_post(Node *n, bool last_round) {
1140 
1141   // Cloning Cmp through Phi's involves the split-if transform.
1142   // FastLock is not used by an If
1143   if (n->is_Cmp() && !n->is_FastLock() && !last_round) {
1144     Node *n_ctrl = get_ctrl(n);
1145     // Determine if the Node has inputs from some local Phi.
1146     // Returns the block to clone thru.
1147     Node *n_blk = has_local_phi_input(n);
1148     if (n_blk != n_ctrl) {
1149       return;
1150     }
1151 
1152     if (!can_split_if(n_ctrl)) {
1153       return;
1154     }
1155 
1156     if (n->outcnt() != 1) {
1157       return; // Multiple bool's from 1 compare?
1158     }
1159     Node *bol = n->unique_out();
1160     assert(bol->is_Bool(), "expect a bool here");
1161     if (bol->outcnt() != 1) {
1162       return;// Multiple branches from 1 compare?
1163     }
1164     Node *iff = bol->unique_out();
1165 
1166     // Check some safety conditions
1167     if (iff->is_If()) {        // Classic split-if?
1168       if (iff->in(0) != n_ctrl) {
1169         return; // Compare must be in same blk as if
1170       }
1171     } else if (iff->is_CMove()) { // Trying to split-up a CMOVE
1172       // Can't split CMove with different control edge.
1173       if (iff->in(0) != NULL && iff->in(0) != n_ctrl ) {
1174         return;
1175       }
1176       if (get_ctrl(iff->in(2)) == n_ctrl ||
1177           get_ctrl(iff->in(3)) == n_ctrl) {
1178         return;                 // Inputs not yet split-up
1179       }
1180       if (get_loop(n_ctrl) != get_loop(get_ctrl(iff))) {
1181         return;                 // Loop-invar test gates loop-varying CMOVE
1182       }
1183     } else {
1184       return;  // some other kind of node, such as an Allocate
1185     }
1186 
1187     // When is split-if profitable?  Every 'win' on means some control flow
1188     // goes dead, so it's almost always a win.
1189     int policy = 0;
1190     // Split compare 'n' through the merge point if it is profitable
1191     Node *phi = split_thru_phi( n, n_ctrl, policy);
1192     if (!phi) {
1193       return;
1194     }
1195 
1196     // Found a Phi to split thru!
1197     // Replace 'n' with the new phi
1198     _igvn.replace_node(n, phi);
1199 
1200     // Now split the bool up thru the phi
1201     Node *bolphi = split_thru_phi(bol, n_ctrl, -1);
1202     guarantee(bolphi != NULL, "null boolean phi node");
1203 
1204     _igvn.replace_node(bol, bolphi);
1205     assert(iff->in(1) == bolphi, "");
1206 
1207     if (bolphi->Value(&_igvn)->singleton()) {
1208       return;
1209     }
1210 
1211     // Conditional-move?  Must split up now
1212     if (!iff->is_If()) {
1213       Node *cmovphi = split_thru_phi(iff, n_ctrl, -1);
1214       _igvn.replace_node(iff, cmovphi);
1215       return;
1216     }
1217 
1218     // Now split the IF
1219     do_split_if(iff);
1220     return;
1221   }
1222 
1223   // Two identical ifs back to back can be merged
1224   if (identical_backtoback_ifs(n) && can_split_if(n->in(0))) {
1225     Node *n_ctrl = n->in(0);
1226     PhiNode* bolphi = PhiNode::make_blank(n_ctrl, n->in(1));
1227     IfNode* dom_if = idom(n_ctrl)->as_If();
1228     Node* proj_true = dom_if->proj_out(1);
1229     Node* proj_false = dom_if->proj_out(0);
1230     Node* con_true = _igvn.makecon(TypeInt::ONE);
1231     Node* con_false = _igvn.makecon(TypeInt::ZERO);
1232 
1233     for (uint i = 1; i < n_ctrl->req(); i++) {
1234       if (is_dominator(proj_true, n_ctrl->in(i))) {
1235         bolphi->init_req(i, con_true);
1236       } else {
1237         assert(is_dominator(proj_false, n_ctrl->in(i)), "bad if");
1238         bolphi->init_req(i, con_false);
1239       }
1240     }
1241     register_new_node(bolphi, n_ctrl);
1242     _igvn.replace_input_of(n, 1, bolphi);
1243 
1244     // Now split the IF
1245     do_split_if(n);
1246     return;
1247   }
1248 
1249   // Check for an IF ready to split; one that has its
1250   // condition codes input coming from a Phi at the block start.
1251   int n_op = n->Opcode();
1252 
1253   // Check for an IF being dominated by another IF same test
1254   if (n_op == Op_If ||
1255       n_op == Op_RangeCheck) {
1256     Node *bol = n->in(1);
1257     uint max = bol->outcnt();
1258     // Check for same test used more than once?
1259     if (max > 1 && bol->is_Bool()) {
1260       // Search up IDOMs to see if this IF is dominated.
1261       Node *cutoff = get_ctrl(bol);
1262 
1263       // Now search up IDOMs till cutoff, looking for a dominating test
1264       Node *prevdom = n;
1265       Node *dom = idom(prevdom);
1266       while (dom != cutoff) {
1267         if (dom->req() > 1 && dom->in(1) == bol && prevdom->in(0) == dom) {
1268           // Replace the dominated test with an obvious true or false.
1269           // Place it on the IGVN worklist for later cleanup.
1270           C->set_major_progress();
1271           dominated_by(prevdom, n, false, true);
1272 #ifndef PRODUCT
1273           if( VerifyLoopOptimizations ) verify();
1274 #endif
1275           return;
1276         }
1277         prevdom = dom;
1278         dom = idom(prevdom);
1279       }
1280     }
1281   }
1282 
1283   // See if a shared loop-varying computation has no loop-varying uses.
1284   // Happens if something is only used for JVM state in uncommon trap exits,
1285   // like various versions of induction variable+offset.  Clone the
1286   // computation per usage to allow it to sink out of the loop.
1287   if (has_ctrl(n) && !n->in(0)) {// n not dead and has no control edge (can float about)
1288     Node *n_ctrl = get_ctrl(n);
1289     IdealLoopTree *n_loop = get_loop(n_ctrl);
1290     if( n_loop != _ltree_root ) {
1291       DUIterator_Fast imax, i = n->fast_outs(imax);
1292       for (; i < imax; i++) {
1293         Node* u = n->fast_out(i);
1294         if( !has_ctrl(u) )     break; // Found control user
1295         IdealLoopTree *u_loop = get_loop(get_ctrl(u));
1296         if( u_loop == n_loop ) break; // Found loop-varying use
1297         if( n_loop->is_member( u_loop ) ) break; // Found use in inner loop
1298         if( u->Opcode() == Op_Opaque1 ) break; // Found loop limit, bugfix for 4677003
1299       }
1300       bool did_break = (i < imax);  // Did we break out of the previous loop?
1301       if (!did_break && n->outcnt() > 1) { // All uses in outer loops!
1302         Node *late_load_ctrl = NULL;
1303         if (n->is_Load()) {
1304           // If n is a load, get and save the result from get_late_ctrl(),
1305           // to be later used in calculating the control for n's clones.
1306           clear_dom_lca_tags();
1307           late_load_ctrl = get_late_ctrl(n, n_ctrl);
1308         }
1309         // If n is a load, and the late control is the same as the current
1310         // control, then the cloning of n is a pointless exercise, because
1311         // GVN will ensure that we end up where we started.
1312         if (!n->is_Load() || late_load_ctrl != n_ctrl) {
1313           for (DUIterator_Last jmin, j = n->last_outs(jmin); j >= jmin; ) {
1314             Node *u = n->last_out(j); // Clone private computation per use
1315             _igvn.rehash_node_delayed(u);
1316             Node *x = n->clone(); // Clone computation
1317             Node *x_ctrl = NULL;
1318             if( u->is_Phi() ) {
1319               // Replace all uses of normal nodes.  Replace Phi uses
1320               // individually, so the separate Nodes can sink down
1321               // different paths.
1322               uint k = 1;
1323               while( u->in(k) != n ) k++;
1324               u->set_req( k, x );
1325               // x goes next to Phi input path
1326               x_ctrl = u->in(0)->in(k);
1327               --j;
1328             } else {              // Normal use
1329               // Replace all uses
1330               for( uint k = 0; k < u->req(); k++ ) {
1331                 if( u->in(k) == n ) {
1332                   u->set_req( k, x );
1333                   --j;
1334                 }
1335               }
1336               x_ctrl = get_ctrl(u);
1337             }
1338 
1339             // Find control for 'x' next to use but not inside inner loops.
1340             // For inner loop uses get the preheader area.
1341             x_ctrl = place_near_use(x_ctrl);
1342 
1343             if (n->is_Load()) {
1344               // For loads, add a control edge to a CFG node outside of the loop
1345               // to force them to not combine and return back inside the loop
1346               // during GVN optimization (4641526).
1347               //
1348               // Because we are setting the actual control input, factor in
1349               // the result from get_late_ctrl() so we respect any
1350               // anti-dependences. (6233005).
1351               x_ctrl = dom_lca(late_load_ctrl, x_ctrl);
1352 
1353               // Don't allow the control input to be a CFG splitting node.
1354               // Such nodes should only have ProjNodes as outs, e.g. IfNode
1355               // should only have IfTrueNode and IfFalseNode (4985384).
1356               x_ctrl = find_non_split_ctrl(x_ctrl);
1357               assert(dom_depth(n_ctrl) <= dom_depth(x_ctrl), "n is later than its clone");
1358 
1359               x->set_req(0, x_ctrl);
1360             }
1361             register_new_node(x, x_ctrl);
1362 
1363             // Some institutional knowledge is needed here: 'x' is
1364             // yanked because if the optimizer runs GVN on it all the
1365             // cloned x's will common up and undo this optimization and
1366             // be forced back in the loop.  This is annoying because it
1367             // makes +VerifyOpto report false-positives on progress.  I
1368             // tried setting control edges on the x's to force them to
1369             // not combine, but the matching gets worried when it tries
1370             // to fold a StoreP and an AddP together (as part of an
1371             // address expression) and the AddP and StoreP have
1372             // different controls.
1373             if (!x->is_Load() && !x->is_DecodeNarrowPtr()) _igvn._worklist.yank(x);
1374           }
1375           _igvn.remove_dead_node(n);
1376         }
1377       }
1378     }
1379   }
1380 
1381   try_move_store_after_loop(n);
1382 
1383   // Check for Opaque2's who's loop has disappeared - who's input is in the
1384   // same loop nest as their output.  Remove 'em, they are no longer useful.
1385   if( n_op == Op_Opaque2 &&
1386       n->in(1) != NULL &&
1387       get_loop(get_ctrl(n)) == get_loop(get_ctrl(n->in(1))) ) {
1388     _igvn.replace_node( n, n->in(1) );
1389   }
1390 
1391 #if INCLUDE_ZGC
1392   if (UseZGC) {
1393     ZBarrierSetC2::loop_optimize_gc_barrier(this, n, last_round);
1394   }
1395 #endif
1396 }
1397 
1398 //------------------------------split_if_with_blocks---------------------------
1399 // Check for aggressive application of 'split-if' optimization,
1400 // using basic block level info.
1401 void PhaseIdealLoop::split_if_with_blocks(VectorSet &visited, Node_Stack &nstack, bool last_round) {
1402   Node *n = C->root();
1403   visited.set(n->_idx); // first, mark node as visited
1404   // Do pre-visit work for root
1405   n = split_if_with_blocks_pre( n );
1406   uint cnt = n->outcnt();
1407   uint i   = 0;
1408   while (true) {
1409     // Visit all children
1410     if (i < cnt) {
1411       Node* use = n->raw_out(i);
1412       ++i;
1413       if (use->outcnt() != 0 && !visited.test_set(use->_idx)) {
1414         // Now do pre-visit work for this use
1415         use = split_if_with_blocks_pre( use );
1416         nstack.push(n, i); // Save parent and next use's index.
1417         n   = use;         // Process all children of current use.
1418         cnt = use->outcnt();
1419         i   = 0;
1420       }
1421     }
1422     else {
1423       // All of n's children have been processed, complete post-processing.
1424       if (cnt != 0 && !n->is_Con()) {
1425         assert(has_node(n), "no dead nodes");
1426         split_if_with_blocks_post( n, last_round );
1427       }
1428       if (nstack.is_empty()) {
1429         // Finished all nodes on stack.
1430         break;
1431       }
1432       // Get saved parent node and next use's index. Visit the rest of uses.
1433       n   = nstack.node();
1434       cnt = n->outcnt();
1435       i   = nstack.index();
1436       nstack.pop();
1437     }
1438   }
1439 }
1440 
1441 
1442 //=============================================================================
1443 //
1444 //                   C L O N E   A   L O O P   B O D Y
1445 //
1446 
1447 //------------------------------clone_iff--------------------------------------
1448 // Passed in a Phi merging (recursively) some nearly equivalent Bool/Cmps.
1449 // "Nearly" because all Nodes have been cloned from the original in the loop,
1450 // but the fall-in edges to the Cmp are different.  Clone bool/Cmp pairs
1451 // through the Phi recursively, and return a Bool.
1452 Node* PhaseIdealLoop::clone_iff(PhiNode *phi, IdealLoopTree *loop) {
1453 
1454   // Convert this Phi into a Phi merging Bools
1455   uint i;
1456   for (i = 1; i < phi->req(); i++) {
1457     Node *b = phi->in(i);
1458     if (b->is_Phi()) {
1459       _igvn.replace_input_of(phi, i, clone_iff(b->as_Phi(), loop));
1460     } else {
1461       assert(b->is_Bool() || b->Opcode() == Op_Opaque4, "");
1462     }
1463   }
1464 
1465   Node* n = phi->in(1);
1466   Node* sample_opaque = NULL;
1467   Node *sample_bool = NULL;
1468   if (n->Opcode() == Op_Opaque4) {
1469     sample_opaque = n;
1470     sample_bool = n->in(1);
1471     assert(sample_bool->is_Bool(), "wrong type");
1472   } else {
1473     sample_bool = n;
1474   }
1475   Node *sample_cmp = sample_bool->in(1);
1476 
1477   // Make Phis to merge the Cmp's inputs.
1478   PhiNode *phi1 = new PhiNode(phi->in(0), Type::TOP);
1479   PhiNode *phi2 = new PhiNode(phi->in(0), Type::TOP);
1480   for (i = 1; i < phi->req(); i++) {
1481     Node *n1 = sample_opaque == NULL ? phi->in(i)->in(1)->in(1) : phi->in(i)->in(1)->in(1)->in(1);
1482     Node *n2 = sample_opaque == NULL ? phi->in(i)->in(1)->in(2) : phi->in(i)->in(1)->in(1)->in(2);
1483     phi1->set_req(i, n1);
1484     phi2->set_req(i, n2);
1485     phi1->set_type(phi1->type()->meet_speculative(n1->bottom_type()));
1486     phi2->set_type(phi2->type()->meet_speculative(n2->bottom_type()));
1487   }
1488   // See if these Phis have been made before.
1489   // Register with optimizer
1490   Node *hit1 = _igvn.hash_find_insert(phi1);
1491   if (hit1) {                   // Hit, toss just made Phi
1492     _igvn.remove_dead_node(phi1); // Remove new phi
1493     assert(hit1->is_Phi(), "" );
1494     phi1 = (PhiNode*)hit1;      // Use existing phi
1495   } else {                      // Miss
1496     _igvn.register_new_node_with_optimizer(phi1);
1497   }
1498   Node *hit2 = _igvn.hash_find_insert(phi2);
1499   if (hit2) {                   // Hit, toss just made Phi
1500     _igvn.remove_dead_node(phi2); // Remove new phi
1501     assert(hit2->is_Phi(), "" );
1502     phi2 = (PhiNode*)hit2;      // Use existing phi
1503   } else {                      // Miss
1504     _igvn.register_new_node_with_optimizer(phi2);
1505   }
1506   // Register Phis with loop/block info
1507   set_ctrl(phi1, phi->in(0));
1508   set_ctrl(phi2, phi->in(0));
1509   // Make a new Cmp
1510   Node *cmp = sample_cmp->clone();
1511   cmp->set_req(1, phi1);
1512   cmp->set_req(2, phi2);
1513   _igvn.register_new_node_with_optimizer(cmp);
1514   set_ctrl(cmp, phi->in(0));
1515 
1516   // Make a new Bool
1517   Node *b = sample_bool->clone();
1518   b->set_req(1,cmp);
1519   _igvn.register_new_node_with_optimizer(b);
1520   set_ctrl(b, phi->in(0));
1521 
1522   if (sample_opaque != NULL) {
1523     Node* opaque = sample_opaque->clone();
1524     opaque->set_req(1, b);
1525     _igvn.register_new_node_with_optimizer(opaque);
1526     set_ctrl(opaque, phi->in(0));
1527     return opaque;
1528   }
1529 
1530   assert(b->is_Bool(), "");
1531   return b;
1532 }
1533 
1534 //------------------------------clone_bool-------------------------------------
1535 // Passed in a Phi merging (recursively) some nearly equivalent Bool/Cmps.
1536 // "Nearly" because all Nodes have been cloned from the original in the loop,
1537 // but the fall-in edges to the Cmp are different.  Clone bool/Cmp pairs
1538 // through the Phi recursively, and return a Bool.
1539 CmpNode *PhaseIdealLoop::clone_bool( PhiNode *phi, IdealLoopTree *loop ) {
1540   uint i;
1541   // Convert this Phi into a Phi merging Bools
1542   for( i = 1; i < phi->req(); i++ ) {
1543     Node *b = phi->in(i);
1544     if( b->is_Phi() ) {
1545       _igvn.replace_input_of(phi, i, clone_bool( b->as_Phi(), loop ));
1546     } else {
1547       assert( b->is_Cmp() || b->is_top(), "inputs are all Cmp or TOP" );
1548     }
1549   }
1550 
1551   Node *sample_cmp = phi->in(1);
1552 
1553   // Make Phis to merge the Cmp's inputs.
1554   PhiNode *phi1 = new PhiNode( phi->in(0), Type::TOP );
1555   PhiNode *phi2 = new PhiNode( phi->in(0), Type::TOP );
1556   for( uint j = 1; j < phi->req(); j++ ) {
1557     Node *cmp_top = phi->in(j); // Inputs are all Cmp or TOP
1558     Node *n1, *n2;
1559     if( cmp_top->is_Cmp() ) {
1560       n1 = cmp_top->in(1);
1561       n2 = cmp_top->in(2);
1562     } else {
1563       n1 = n2 = cmp_top;
1564     }
1565     phi1->set_req( j, n1 );
1566     phi2->set_req( j, n2 );
1567     phi1->set_type(phi1->type()->meet_speculative(n1->bottom_type()));
1568     phi2->set_type(phi2->type()->meet_speculative(n2->bottom_type()));
1569   }
1570 
1571   // See if these Phis have been made before.
1572   // Register with optimizer
1573   Node *hit1 = _igvn.hash_find_insert(phi1);
1574   if( hit1 ) {                  // Hit, toss just made Phi
1575     _igvn.remove_dead_node(phi1); // Remove new phi
1576     assert( hit1->is_Phi(), "" );
1577     phi1 = (PhiNode*)hit1;      // Use existing phi
1578   } else {                      // Miss
1579     _igvn.register_new_node_with_optimizer(phi1);
1580   }
1581   Node *hit2 = _igvn.hash_find_insert(phi2);
1582   if( hit2 ) {                  // Hit, toss just made Phi
1583     _igvn.remove_dead_node(phi2); // Remove new phi
1584     assert( hit2->is_Phi(), "" );
1585     phi2 = (PhiNode*)hit2;      // Use existing phi
1586   } else {                      // Miss
1587     _igvn.register_new_node_with_optimizer(phi2);
1588   }
1589   // Register Phis with loop/block info
1590   set_ctrl(phi1, phi->in(0));
1591   set_ctrl(phi2, phi->in(0));
1592   // Make a new Cmp
1593   Node *cmp = sample_cmp->clone();
1594   cmp->set_req( 1, phi1 );
1595   cmp->set_req( 2, phi2 );
1596   _igvn.register_new_node_with_optimizer(cmp);
1597   set_ctrl(cmp, phi->in(0));
1598 
1599   assert( cmp->is_Cmp(), "" );
1600   return (CmpNode*)cmp;
1601 }
1602 
1603 //------------------------------sink_use---------------------------------------
1604 // If 'use' was in the loop-exit block, it now needs to be sunk
1605 // below the post-loop merge point.
1606 void PhaseIdealLoop::sink_use( Node *use, Node *post_loop ) {
1607   if (!use->is_CFG() && get_ctrl(use) == post_loop->in(2)) {
1608     set_ctrl(use, post_loop);
1609     for (DUIterator j = use->outs(); use->has_out(j); j++)
1610       sink_use(use->out(j), post_loop);
1611   }
1612 }
1613 
1614 void PhaseIdealLoop::clone_loop_handle_data_uses(Node* old, Node_List &old_new,
1615                                                  IdealLoopTree* loop, IdealLoopTree* outer_loop,
1616                                                  Node_List*& split_if_set, Node_List*& split_bool_set,
1617                                                  Node_List*& split_cex_set, Node_List& worklist,
1618                                                  uint new_counter, CloneLoopMode mode) {
1619   Node* nnn = old_new[old->_idx];
1620   // Copy uses to a worklist, so I can munge the def-use info
1621   // with impunity.
1622   for (DUIterator_Fast jmax, j = old->fast_outs(jmax); j < jmax; j++)
1623     worklist.push(old->fast_out(j));
1624 
1625   while( worklist.size() ) {
1626     Node *use = worklist.pop();
1627     if (!has_node(use))  continue; // Ignore dead nodes
1628     if (use->in(0) == C->top())  continue;
1629     IdealLoopTree *use_loop = get_loop( has_ctrl(use) ? get_ctrl(use) : use );
1630     // Check for data-use outside of loop - at least one of OLD or USE
1631     // must not be a CFG node.
1632 #ifdef ASSERT
1633     if (loop->_head->as_Loop()->is_strip_mined() && outer_loop->is_member(use_loop) && !loop->is_member(use_loop) && old_new[use->_idx] == NULL) {
1634       Node* sfpt = loop->_head->as_CountedLoop()->outer_safepoint();
1635       assert(mode == ControlAroundStripMined && use == sfpt, "missed a node");
1636     }
1637 #endif
1638     if (!loop->is_member(use_loop) && !outer_loop->is_member(use_loop) && (!old->is_CFG() || !use->is_CFG())) {
1639 
1640       // If the Data use is an IF, that means we have an IF outside of the
1641       // loop that is switching on a condition that is set inside of the
1642       // loop.  Happens if people set a loop-exit flag; then test the flag
1643       // in the loop to break the loop, then test is again outside of the
1644       // loop to determine which way the loop exited.
1645       // Loop predicate If node connects to Bool node through Opaque1 node.
1646       if (use->is_If() || use->is_CMove() || C->is_predicate_opaq(use) || use->Opcode() == Op_Opaque4) {
1647         // Since this code is highly unlikely, we lazily build the worklist
1648         // of such Nodes to go split.
1649         if (!split_if_set) {
1650           ResourceArea *area = Thread::current()->resource_area();
1651           split_if_set = new Node_List(area);
1652         }
1653         split_if_set->push(use);
1654       }
1655       if (use->is_Bool()) {
1656         if (!split_bool_set) {
1657           ResourceArea *area = Thread::current()->resource_area();
1658           split_bool_set = new Node_List(area);
1659         }
1660         split_bool_set->push(use);
1661       }
1662       if (use->Opcode() == Op_CreateEx) {
1663         if (!split_cex_set) {
1664           ResourceArea *area = Thread::current()->resource_area();
1665           split_cex_set = new Node_List(area);
1666         }
1667         split_cex_set->push(use);
1668       }
1669 
1670 
1671       // Get "block" use is in
1672       uint idx = 0;
1673       while( use->in(idx) != old ) idx++;
1674       Node *prev = use->is_CFG() ? use : get_ctrl(use);
1675       assert(!loop->is_member(get_loop(prev)) && !outer_loop->is_member(get_loop(prev)), "" );
1676       Node *cfg = prev->_idx >= new_counter
1677         ? prev->in(2)
1678         : idom(prev);
1679       if( use->is_Phi() )     // Phi use is in prior block
1680         cfg = prev->in(idx);  // NOT in block of Phi itself
1681       if (cfg->is_top()) {    // Use is dead?
1682         _igvn.replace_input_of(use, idx, C->top());
1683         continue;
1684       }
1685 
1686       // If use is referenced through control edge... (idx == 0)
1687       if (mode == IgnoreStripMined && idx == 0) {
1688         LoopNode *head = loop->_head->as_Loop();
1689         if (head->is_strip_mined() && is_dominator(head->outer_loop_exit(), prev)) {
1690           // That node is outside the inner loop, leave it outside the
1691           // outer loop as well to not confuse verification code.
1692           assert(!loop->_parent->is_member(use_loop), "should be out of the outer loop");
1693           _igvn.replace_input_of(use, 0, head->outer_loop_exit());
1694           continue;
1695         }
1696       }
1697 
1698       while(!outer_loop->is_member(get_loop(cfg))) {
1699         prev = cfg;
1700         cfg = cfg->_idx >= new_counter ? cfg->in(2) : idom(cfg);
1701       }
1702       // If the use occurs after merging several exits from the loop, then
1703       // old value must have dominated all those exits.  Since the same old
1704       // value was used on all those exits we did not need a Phi at this
1705       // merge point.  NOW we do need a Phi here.  Each loop exit value
1706       // is now merged with the peeled body exit; each exit gets its own
1707       // private Phi and those Phis need to be merged here.
1708       Node *phi;
1709       if( prev->is_Region() ) {
1710         if( idx == 0 ) {      // Updating control edge?
1711           phi = prev;         // Just use existing control
1712         } else {              // Else need a new Phi
1713           phi = PhiNode::make( prev, old );
1714           // Now recursively fix up the new uses of old!
1715           for( uint i = 1; i < prev->req(); i++ ) {
1716             worklist.push(phi); // Onto worklist once for each 'old' input
1717           }
1718         }
1719       } else {
1720         // Get new RegionNode merging old and new loop exits
1721         prev = old_new[prev->_idx];
1722         assert( prev, "just made this in step 7" );
1723         if( idx == 0) {      // Updating control edge?
1724           phi = prev;         // Just use existing control
1725         } else {              // Else need a new Phi
1726           // Make a new Phi merging data values properly
1727           phi = PhiNode::make( prev, old );
1728           phi->set_req( 1, nnn );
1729         }
1730       }
1731       // If inserting a new Phi, check for prior hits
1732       if( idx != 0 ) {
1733         Node *hit = _igvn.hash_find_insert(phi);
1734         if( hit == NULL ) {
1735           _igvn.register_new_node_with_optimizer(phi); // Register new phi
1736         } else {                                      // or
1737           // Remove the new phi from the graph and use the hit
1738           _igvn.remove_dead_node(phi);
1739           phi = hit;                                  // Use existing phi
1740         }
1741         set_ctrl(phi, prev);
1742       }
1743       // Make 'use' use the Phi instead of the old loop body exit value
1744       _igvn.replace_input_of(use, idx, phi);
1745       if( use->_idx >= new_counter ) { // If updating new phis
1746         // Not needed for correctness, but prevents a weak assert
1747         // in AddPNode from tripping (when we end up with different
1748         // base & derived Phis that will become the same after
1749         // IGVN does CSE).
1750         Node *hit = _igvn.hash_find_insert(use);
1751         if( hit )             // Go ahead and re-hash for hits.
1752           _igvn.replace_node( use, hit );
1753       }
1754 
1755       // If 'use' was in the loop-exit block, it now needs to be sunk
1756       // below the post-loop merge point.
1757       sink_use( use, prev );
1758     }
1759   }
1760 }
1761 
1762 static void clone_outer_loop_helper(Node* n, const IdealLoopTree *loop, const IdealLoopTree* outer_loop,
1763                                     const Node_List &old_new, Unique_Node_List& wq, PhaseIdealLoop* phase,
1764                                     bool check_old_new) {
1765   for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
1766     Node* u = n->fast_out(j);
1767     assert(check_old_new || old_new[u->_idx] == NULL, "shouldn't have been cloned");
1768     if (!u->is_CFG() && (!check_old_new || old_new[u->_idx] == NULL)) {
1769       Node* c = phase->get_ctrl(u);
1770       IdealLoopTree* u_loop = phase->get_loop(c);
1771       assert(!loop->is_member(u_loop), "can be in outer loop or out of both loops only");
1772       if (outer_loop->is_member(u_loop)) {
1773         wq.push(u);
1774       }
1775     }
1776   }
1777 }
1778 
1779 void PhaseIdealLoop::clone_outer_loop(LoopNode* head, CloneLoopMode mode, IdealLoopTree *loop,
1780                                       IdealLoopTree* outer_loop, int dd, Node_List &old_new,
1781                                       Node_List& extra_data_nodes) {
1782   if (head->is_strip_mined() && mode != IgnoreStripMined) {
1783     CountedLoopNode* cl = head->as_CountedLoop();
1784     Node* l = cl->outer_loop();
1785     Node* tail = cl->outer_loop_tail();
1786     IfNode* le = cl->outer_loop_end();
1787     Node* sfpt = cl->outer_safepoint();
1788     CountedLoopEndNode* cle = cl->loopexit();
1789     CountedLoopNode* new_cl = old_new[cl->_idx]->as_CountedLoop();
1790     CountedLoopEndNode* new_cle = new_cl->as_CountedLoop()->loopexit_or_null();
1791     Node* cle_out = cle->proj_out(false);
1792 
1793     Node* new_sfpt = NULL;
1794     Node* new_cle_out = cle_out->clone();
1795     old_new.map(cle_out->_idx, new_cle_out);
1796     if (mode == CloneIncludesStripMined) {
1797       // clone outer loop body
1798       Node* new_l = l->clone();
1799       Node* new_tail = tail->clone();
1800       IfNode* new_le = le->clone()->as_If();
1801       new_sfpt = sfpt->clone();
1802 
1803       set_loop(new_l, outer_loop->_parent);
1804       set_idom(new_l, new_l->in(LoopNode::EntryControl), dd);
1805       set_loop(new_cle_out, outer_loop->_parent);
1806       set_idom(new_cle_out, new_cle, dd);
1807       set_loop(new_sfpt, outer_loop->_parent);
1808       set_idom(new_sfpt, new_cle_out, dd);
1809       set_loop(new_le, outer_loop->_parent);
1810       set_idom(new_le, new_sfpt, dd);
1811       set_loop(new_tail, outer_loop->_parent);
1812       set_idom(new_tail, new_le, dd);
1813       set_idom(new_cl, new_l, dd);
1814 
1815       old_new.map(l->_idx, new_l);
1816       old_new.map(tail->_idx, new_tail);
1817       old_new.map(le->_idx, new_le);
1818       old_new.map(sfpt->_idx, new_sfpt);
1819 
1820       new_l->set_req(LoopNode::LoopBackControl, new_tail);
1821       new_l->set_req(0, new_l);
1822       new_tail->set_req(0, new_le);
1823       new_le->set_req(0, new_sfpt);
1824       new_sfpt->set_req(0, new_cle_out);
1825       new_cle_out->set_req(0, new_cle);
1826       new_cl->set_req(LoopNode::EntryControl, new_l);
1827 
1828       _igvn.register_new_node_with_optimizer(new_l);
1829       _igvn.register_new_node_with_optimizer(new_tail);
1830       _igvn.register_new_node_with_optimizer(new_le);
1831     } else {
1832       Node *newhead = old_new[loop->_head->_idx];
1833       newhead->as_Loop()->clear_strip_mined();
1834       _igvn.replace_input_of(newhead, LoopNode::EntryControl, newhead->in(LoopNode::EntryControl)->in(LoopNode::EntryControl));
1835       set_idom(newhead, newhead->in(LoopNode::EntryControl), dd);
1836     }
1837     // Look at data node that were assigned a control in the outer
1838     // loop: they are kept in the outer loop by the safepoint so start
1839     // from the safepoint node's inputs.
1840     IdealLoopTree* outer_loop = get_loop(l);
1841     Node_Stack stack(2);
1842     stack.push(sfpt, 1);
1843     uint new_counter = C->unique();
1844     while (stack.size() > 0) {
1845       Node* n = stack.node();
1846       uint i = stack.index();
1847       while (i < n->req() &&
1848              (n->in(i) == NULL ||
1849               !has_ctrl(n->in(i)) ||
1850               get_loop(get_ctrl(n->in(i))) != outer_loop ||
1851               (old_new[n->in(i)->_idx] != NULL && old_new[n->in(i)->_idx]->_idx >= new_counter))) {
1852         i++;
1853       }
1854       if (i < n->req()) {
1855         stack.set_index(i+1);
1856         stack.push(n->in(i), 0);
1857       } else {
1858         assert(old_new[n->_idx] == NULL || n == sfpt || old_new[n->_idx]->_idx < new_counter, "no clone yet");
1859         Node* m = n == sfpt ? new_sfpt : n->clone();
1860         if (m != NULL) {
1861           for (uint i = 0; i < n->req(); i++) {
1862             if (m->in(i) != NULL && old_new[m->in(i)->_idx] != NULL) {
1863               m->set_req(i, old_new[m->in(i)->_idx]);
1864             }
1865           }
1866         } else {
1867           assert(n == sfpt && mode != CloneIncludesStripMined, "where's the safepoint clone?");
1868         }
1869         if (n != sfpt) {
1870           extra_data_nodes.push(n);
1871           _igvn.register_new_node_with_optimizer(m);
1872           assert(get_ctrl(n) == cle_out, "what other control?");
1873           set_ctrl(m, new_cle_out);
1874           old_new.map(n->_idx, m);
1875         }
1876         stack.pop();
1877       }
1878     }
1879     if (mode == CloneIncludesStripMined) {
1880       _igvn.register_new_node_with_optimizer(new_sfpt);
1881       _igvn.register_new_node_with_optimizer(new_cle_out);
1882     }
1883     // Some other transformation may have pessimistically assign some
1884     // data nodes to the outer loop. Set their control so they are out
1885     // of the outer loop.
1886     ResourceMark rm;
1887     Unique_Node_List wq;
1888     for (uint i = 0; i < extra_data_nodes.size(); i++) {
1889       Node* old = extra_data_nodes.at(i);
1890       clone_outer_loop_helper(old, loop, outer_loop, old_new, wq, this, true);
1891     }
1892     Node* new_ctrl = cl->outer_loop_exit();
1893     assert(get_loop(new_ctrl) != outer_loop, "must be out of the loop nest");
1894     for (uint i = 0; i < wq.size(); i++) {
1895       Node* n = wq.at(i);
1896       set_ctrl(n, new_ctrl);
1897       clone_outer_loop_helper(n, loop, outer_loop, old_new, wq, this, false);
1898     }
1899   } else {
1900     Node *newhead = old_new[loop->_head->_idx];
1901     set_idom(newhead, newhead->in(LoopNode::EntryControl), dd);
1902   }
1903 }
1904 
1905 //------------------------------clone_loop-------------------------------------
1906 //
1907 //                   C L O N E   A   L O O P   B O D Y
1908 //
1909 // This is the basic building block of the loop optimizations.  It clones an
1910 // entire loop body.  It makes an old_new loop body mapping; with this mapping
1911 // you can find the new-loop equivalent to an old-loop node.  All new-loop
1912 // nodes are exactly equal to their old-loop counterparts, all edges are the
1913 // same.  All exits from the old-loop now have a RegionNode that merges the
1914 // equivalent new-loop path.  This is true even for the normal "loop-exit"
1915 // condition.  All uses of loop-invariant old-loop values now come from (one
1916 // or more) Phis that merge their new-loop equivalents.
1917 //
1918 // This operation leaves the graph in an illegal state: there are two valid
1919 // control edges coming from the loop pre-header to both loop bodies.  I'll
1920 // definitely have to hack the graph after running this transform.
1921 //
1922 // From this building block I will further edit edges to perform loop peeling
1923 // or loop unrolling or iteration splitting (Range-Check-Elimination), etc.
1924 //
1925 // Parameter side_by_size_idom:
1926 //   When side_by_size_idom is NULL, the dominator tree is constructed for
1927 //      the clone loop to dominate the original.  Used in construction of
1928 //      pre-main-post loop sequence.
1929 //   When nonnull, the clone and original are side-by-side, both are
1930 //      dominated by the side_by_side_idom node.  Used in construction of
1931 //      unswitched loops.
1932 void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd,
1933                                 CloneLoopMode mode, Node* side_by_side_idom) {
1934 
1935   LoopNode* head = loop->_head->as_Loop();
1936   head->verify_strip_mined(1);
1937 
1938   if (C->do_vector_loop() && PrintOpto) {
1939     const char* mname = C->method()->name()->as_quoted_ascii();
1940     if (mname != NULL) {
1941       tty->print("PhaseIdealLoop::clone_loop: for vectorize method %s\n", mname);
1942     }
1943   }
1944 
1945   CloneMap& cm = C->clone_map();
1946   Dict* dict = cm.dict();
1947   if (C->do_vector_loop()) {
1948     cm.set_clone_idx(cm.max_gen()+1);
1949 #ifndef PRODUCT
1950     if (PrintOpto) {
1951       tty->print_cr("PhaseIdealLoop::clone_loop: _clone_idx %d", cm.clone_idx());
1952       loop->dump_head();
1953     }
1954 #endif
1955   }
1956 
1957   // Step 1: Clone the loop body.  Make the old->new mapping.
1958   uint i;
1959   for( i = 0; i < loop->_body.size(); i++ ) {
1960     Node *old = loop->_body.at(i);
1961     Node *nnn = old->clone();
1962     old_new.map( old->_idx, nnn );
1963     if (C->do_vector_loop()) {
1964       cm.verify_insert_and_clone(old, nnn, cm.clone_idx());
1965     }
1966     _igvn.register_new_node_with_optimizer(nnn);
1967   }
1968 
1969   IdealLoopTree* outer_loop = (head->is_strip_mined() && mode != IgnoreStripMined) ? get_loop(head->as_CountedLoop()->outer_loop()) : loop;
1970 
1971   // Step 2: Fix the edges in the new body.  If the old input is outside the
1972   // loop use it.  If the old input is INside the loop, use the corresponding
1973   // new node instead.
1974   for( i = 0; i < loop->_body.size(); i++ ) {
1975     Node *old = loop->_body.at(i);
1976     Node *nnn = old_new[old->_idx];
1977     // Fix CFG/Loop controlling the new node
1978     if (has_ctrl(old)) {
1979       set_ctrl(nnn, old_new[get_ctrl(old)->_idx]);
1980     } else {
1981       set_loop(nnn, outer_loop->_parent);
1982       if (old->outcnt() > 0) {
1983         set_idom( nnn, old_new[idom(old)->_idx], dd );
1984       }
1985     }
1986     // Correct edges to the new node
1987     for( uint j = 0; j < nnn->req(); j++ ) {
1988         Node *n = nnn->in(j);
1989         if( n ) {
1990           IdealLoopTree *old_in_loop = get_loop( has_ctrl(n) ? get_ctrl(n) : n );
1991           if( loop->is_member( old_in_loop ) )
1992             nnn->set_req(j, old_new[n->_idx]);
1993         }
1994     }
1995     _igvn.hash_find_insert(nnn);
1996   }
1997 
1998   ResourceArea *area = Thread::current()->resource_area();
1999   Node_List extra_data_nodes(area); // data nodes in the outer strip mined loop
2000   clone_outer_loop(head, mode, loop, outer_loop, dd, old_new, extra_data_nodes);
2001 
2002   // Step 3: Now fix control uses.  Loop varying control uses have already
2003   // been fixed up (as part of all input edges in Step 2).  Loop invariant
2004   // control uses must be either an IfFalse or an IfTrue.  Make a merge
2005   // point to merge the old and new IfFalse/IfTrue nodes; make the use
2006   // refer to this.
2007   Node_List worklist(area);
2008   uint new_counter = C->unique();
2009   for( i = 0; i < loop->_body.size(); i++ ) {
2010     Node* old = loop->_body.at(i);
2011     if( !old->is_CFG() ) continue;
2012 
2013     // Copy uses to a worklist, so I can munge the def-use info
2014     // with impunity.
2015     for (DUIterator_Fast jmax, j = old->fast_outs(jmax); j < jmax; j++)
2016       worklist.push(old->fast_out(j));
2017 
2018     while( worklist.size() ) {  // Visit all uses
2019       Node *use = worklist.pop();
2020       if (!has_node(use))  continue; // Ignore dead nodes
2021       IdealLoopTree *use_loop = get_loop( has_ctrl(use) ? get_ctrl(use) : use );
2022       if( !loop->is_member( use_loop ) && use->is_CFG() ) {
2023         // Both OLD and USE are CFG nodes here.
2024         assert( use->is_Proj(), "" );
2025         Node* nnn = old_new[old->_idx];
2026 
2027         Node* newuse = NULL;
2028         if (head->is_strip_mined() && mode != IgnoreStripMined) {
2029           CountedLoopNode* cl = head->as_CountedLoop();
2030           CountedLoopEndNode* cle = cl->loopexit();
2031           Node* cle_out = cle->proj_out_or_null(false);
2032           if (use == cle_out) {
2033             IfNode* le = cl->outer_loop_end();
2034             use = le->proj_out(false);
2035             use_loop = get_loop(use);
2036             if (mode == CloneIncludesStripMined) {
2037               nnn = old_new[le->_idx];
2038             } else {
2039               newuse = old_new[cle_out->_idx];
2040             }
2041           }
2042         }
2043         if (newuse == NULL) {
2044           newuse = use->clone();
2045         }
2046 
2047         // Clone the loop exit control projection
2048         if (C->do_vector_loop()) {
2049           cm.verify_insert_and_clone(use, newuse, cm.clone_idx());
2050         }
2051         newuse->set_req(0,nnn);
2052         _igvn.register_new_node_with_optimizer(newuse);
2053         set_loop(newuse, use_loop);
2054         set_idom(newuse, nnn, dom_depth(nnn) + 1 );
2055 
2056         // We need a Region to merge the exit from the peeled body and the
2057         // exit from the old loop body.
2058         RegionNode *r = new RegionNode(3);
2059         // Map the old use to the new merge point
2060         old_new.map( use->_idx, r );
2061         uint dd_r = MIN2(dom_depth(newuse),dom_depth(use));
2062         assert( dd_r >= dom_depth(dom_lca(newuse,use)), "" );
2063 
2064         // The original user of 'use' uses 'r' instead.
2065         for (DUIterator_Last lmin, l = use->last_outs(lmin); l >= lmin;) {
2066           Node* useuse = use->last_out(l);
2067           _igvn.rehash_node_delayed(useuse);
2068           uint uses_found = 0;
2069           if( useuse->in(0) == use ) {
2070             useuse->set_req(0, r);
2071             uses_found++;
2072             if( useuse->is_CFG() ) {
2073               assert( dom_depth(useuse) > dd_r, "" );
2074               set_idom(useuse, r, dom_depth(useuse));
2075             }
2076           }
2077           for( uint k = 1; k < useuse->req(); k++ ) {
2078             if( useuse->in(k) == use ) {
2079               useuse->set_req(k, r);
2080               uses_found++;
2081               if (useuse->is_Loop() && k == LoopNode::EntryControl) {
2082                 assert(dom_depth(useuse) > dd_r , "");
2083                 set_idom(useuse, r, dom_depth(useuse));
2084               }
2085             }
2086           }
2087           l -= uses_found;    // we deleted 1 or more copies of this edge
2088         }
2089 
2090         // Now finish up 'r'
2091         r->set_req( 1, newuse );
2092         r->set_req( 2,    use );
2093         _igvn.register_new_node_with_optimizer(r);
2094         set_loop(r, use_loop);
2095         set_idom(r, !side_by_side_idom ? newuse->in(0) : side_by_side_idom, dd_r);
2096       } // End of if a loop-exit test
2097     }
2098   }
2099 
2100   // Step 4: If loop-invariant use is not control, it must be dominated by a
2101   // loop exit IfFalse/IfTrue.  Find "proper" loop exit.  Make a Region
2102   // there if needed.  Make a Phi there merging old and new used values.
2103   Node_List *split_if_set = NULL;
2104   Node_List *split_bool_set = NULL;
2105   Node_List *split_cex_set = NULL;
2106   for( i = 0; i < loop->_body.size(); i++ ) {
2107     Node* old = loop->_body.at(i);
2108     clone_loop_handle_data_uses(old, old_new, loop, outer_loop, split_if_set,
2109                                 split_bool_set, split_cex_set, worklist, new_counter,
2110                                 mode);
2111   }
2112 
2113   for (i = 0; i < extra_data_nodes.size(); i++) {
2114     Node* old = extra_data_nodes.at(i);
2115     clone_loop_handle_data_uses(old, old_new, loop, outer_loop, split_if_set,
2116                                 split_bool_set, split_cex_set, worklist, new_counter,
2117                                 mode);
2118   }
2119 
2120   // Check for IFs that need splitting/cloning.  Happens if an IF outside of
2121   // the loop uses a condition set in the loop.  The original IF probably
2122   // takes control from one or more OLD Regions (which in turn get from NEW
2123   // Regions).  In any case, there will be a set of Phis for each merge point
2124   // from the IF up to where the original BOOL def exists the loop.
2125   if (split_if_set) {
2126     while (split_if_set->size()) {
2127       Node *iff = split_if_set->pop();
2128       if (iff->in(1)->is_Phi()) {
2129         Node *b = clone_iff(iff->in(1)->as_Phi(), loop);
2130         _igvn.replace_input_of(iff, 1, b);
2131       }
2132     }
2133   }
2134   if (split_bool_set) {
2135     while (split_bool_set->size()) {
2136       Node *b = split_bool_set->pop();
2137       Node *phi = b->in(1);
2138       assert(phi->is_Phi(), "");
2139       CmpNode *cmp = clone_bool((PhiNode*)phi, loop);
2140       _igvn.replace_input_of(b, 1, cmp);
2141     }
2142   }
2143   if (split_cex_set) {
2144     while (split_cex_set->size()) {
2145       Node *b = split_cex_set->pop();
2146       assert(b->in(0)->is_Region(), "");
2147       assert(b->in(1)->is_Phi(), "");
2148       assert(b->in(0)->in(0) == b->in(1)->in(0), "");
2149       split_up(b, b->in(0), NULL);
2150     }
2151   }
2152 
2153 }
2154 
2155 
2156 //---------------------- stride_of_possible_iv -------------------------------------
2157 // Looks for an iff/bool/comp with one operand of the compare
2158 // being a cycle involving an add and a phi,
2159 // with an optional truncation (left-shift followed by a right-shift)
2160 // of the add. Returns zero if not an iv.
2161 int PhaseIdealLoop::stride_of_possible_iv(Node* iff) {
2162   Node* trunc1 = NULL;
2163   Node* trunc2 = NULL;
2164   const TypeInt* ttype = NULL;
2165   if (!iff->is_If() || iff->in(1) == NULL || !iff->in(1)->is_Bool()) {
2166     return 0;
2167   }
2168   BoolNode* bl = iff->in(1)->as_Bool();
2169   Node* cmp = bl->in(1);
2170   if (!cmp || (cmp->Opcode() != Op_CmpI && cmp->Opcode() != Op_CmpU)) {
2171     return 0;
2172   }
2173   // Must have an invariant operand
2174   if (is_member(get_loop(iff), get_ctrl(cmp->in(2)))) {
2175     return 0;
2176   }
2177   Node* add2 = NULL;
2178   Node* cmp1 = cmp->in(1);
2179   if (cmp1->is_Phi()) {
2180     // (If (Bool (CmpX phi:(Phi ...(Optional-trunc(AddI phi add2))) )))
2181     Node* phi = cmp1;
2182     for (uint i = 1; i < phi->req(); i++) {
2183       Node* in = phi->in(i);
2184       Node* add = CountedLoopNode::match_incr_with_optional_truncation(in,
2185                                 &trunc1, &trunc2, &ttype);
2186       if (add && add->in(1) == phi) {
2187         add2 = add->in(2);
2188         break;
2189       }
2190     }
2191   } else {
2192     // (If (Bool (CmpX addtrunc:(Optional-trunc((AddI (Phi ...addtrunc...) add2)) )))
2193     Node* addtrunc = cmp1;
2194     Node* add = CountedLoopNode::match_incr_with_optional_truncation(addtrunc,
2195                                 &trunc1, &trunc2, &ttype);
2196     if (add && add->in(1)->is_Phi()) {
2197       Node* phi = add->in(1);
2198       for (uint i = 1; i < phi->req(); i++) {
2199         if (phi->in(i) == addtrunc) {
2200           add2 = add->in(2);
2201           break;
2202         }
2203       }
2204     }
2205   }
2206   if (add2 != NULL) {
2207     const TypeInt* add2t = _igvn.type(add2)->is_int();
2208     if (add2t->is_con()) {
2209       return add2t->get_con();
2210     }
2211   }
2212   return 0;
2213 }
2214 
2215 
2216 //---------------------- stay_in_loop -------------------------------------
2217 // Return the (unique) control output node that's in the loop (if it exists.)
2218 Node* PhaseIdealLoop::stay_in_loop( Node* n, IdealLoopTree *loop) {
2219   Node* unique = NULL;
2220   if (!n) return NULL;
2221   for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
2222     Node* use = n->fast_out(i);
2223     if (!has_ctrl(use) && loop->is_member(get_loop(use))) {
2224       if (unique != NULL) {
2225         return NULL;
2226       }
2227       unique = use;
2228     }
2229   }
2230   return unique;
2231 }
2232 
2233 //------------------------------ register_node -------------------------------------
2234 // Utility to register node "n" with PhaseIdealLoop
2235 void PhaseIdealLoop::register_node(Node* n, IdealLoopTree *loop, Node* pred, int ddepth) {
2236   _igvn.register_new_node_with_optimizer(n);
2237   loop->_body.push(n);
2238   if (n->is_CFG()) {
2239     set_loop(n, loop);
2240     set_idom(n, pred, ddepth);
2241   } else {
2242     set_ctrl(n, pred);
2243   }
2244 }
2245 
2246 //------------------------------ proj_clone -------------------------------------
2247 // Utility to create an if-projection
2248 ProjNode* PhaseIdealLoop::proj_clone(ProjNode* p, IfNode* iff) {
2249   ProjNode* c = p->clone()->as_Proj();
2250   c->set_req(0, iff);
2251   return c;
2252 }
2253 
2254 //------------------------------ short_circuit_if -------------------------------------
2255 // Force the iff control output to be the live_proj
2256 Node* PhaseIdealLoop::short_circuit_if(IfNode* iff, ProjNode* live_proj) {
2257   guarantee(live_proj != NULL, "null projection");
2258   int proj_con = live_proj->_con;
2259   assert(proj_con == 0 || proj_con == 1, "false or true projection");
2260   Node *con = _igvn.intcon(proj_con);
2261   set_ctrl(con, C->root());
2262   if (iff) {
2263     iff->set_req(1, con);
2264   }
2265   return con;
2266 }
2267 
2268 //------------------------------ insert_if_before_proj -------------------------------------
2269 // Insert a new if before an if projection (* - new node)
2270 //
2271 // before
2272 //           if(test)
2273 //           /     \
2274 //          v       v
2275 //    other-proj   proj (arg)
2276 //
2277 // after
2278 //           if(test)
2279 //           /     \
2280 //          /       v
2281 //         |      * proj-clone
2282 //         v          |
2283 //    other-proj      v
2284 //                * new_if(relop(cmp[IU](left,right)))
2285 //                  /  \
2286 //                 v    v
2287 //         * new-proj  proj
2288 //         (returned)
2289 //
2290 ProjNode* PhaseIdealLoop::insert_if_before_proj(Node* left, bool Signed, BoolTest::mask relop, Node* right, ProjNode* proj) {
2291   IfNode* iff = proj->in(0)->as_If();
2292   IdealLoopTree *loop = get_loop(proj);
2293   ProjNode *other_proj = iff->proj_out(!proj->is_IfTrue())->as_Proj();
2294   int ddepth = dom_depth(proj);
2295 
2296   _igvn.rehash_node_delayed(iff);
2297   _igvn.rehash_node_delayed(proj);
2298 
2299   proj->set_req(0, NULL);  // temporary disconnect
2300   ProjNode* proj2 = proj_clone(proj, iff);
2301   register_node(proj2, loop, iff, ddepth);
2302 
2303   Node* cmp = Signed ? (Node*) new CmpINode(left, right) : (Node*) new CmpUNode(left, right);
2304   register_node(cmp, loop, proj2, ddepth);
2305 
2306   BoolNode* bol = new BoolNode(cmp, relop);
2307   register_node(bol, loop, proj2, ddepth);
2308 
2309   int opcode = iff->Opcode();
2310   assert(opcode == Op_If || opcode == Op_RangeCheck, "unexpected opcode");
2311   IfNode* new_if = (opcode == Op_If) ? new IfNode(proj2, bol, iff->_prob, iff->_fcnt):
2312     new RangeCheckNode(proj2, bol, iff->_prob, iff->_fcnt);
2313   register_node(new_if, loop, proj2, ddepth);
2314 
2315   proj->set_req(0, new_if); // reattach
2316   set_idom(proj, new_if, ddepth);
2317 
2318   ProjNode* new_exit = proj_clone(other_proj, new_if)->as_Proj();
2319   guarantee(new_exit != NULL, "null exit node");
2320   register_node(new_exit, get_loop(other_proj), new_if, ddepth);
2321 
2322   return new_exit;
2323 }
2324 
2325 //------------------------------ insert_region_before_proj -------------------------------------
2326 // Insert a region before an if projection (* - new node)
2327 //
2328 // before
2329 //           if(test)
2330 //          /      |
2331 //         v       |
2332 //       proj      v
2333 //               other-proj
2334 //
2335 // after
2336 //           if(test)
2337 //          /      |
2338 //         v       |
2339 // * proj-clone    v
2340 //         |     other-proj
2341 //         v
2342 // * new-region
2343 //         |
2344 //         v
2345 // *      dum_if
2346 //       /     \
2347 //      v       \
2348 // * dum-proj    v
2349 //              proj
2350 //
2351 RegionNode* PhaseIdealLoop::insert_region_before_proj(ProjNode* proj) {
2352   IfNode* iff = proj->in(0)->as_If();
2353   IdealLoopTree *loop = get_loop(proj);
2354   ProjNode *other_proj = iff->proj_out(!proj->is_IfTrue())->as_Proj();
2355   int ddepth = dom_depth(proj);
2356 
2357   _igvn.rehash_node_delayed(iff);
2358   _igvn.rehash_node_delayed(proj);
2359 
2360   proj->set_req(0, NULL);  // temporary disconnect
2361   ProjNode* proj2 = proj_clone(proj, iff);
2362   register_node(proj2, loop, iff, ddepth);
2363 
2364   RegionNode* reg = new RegionNode(2);
2365   reg->set_req(1, proj2);
2366   register_node(reg, loop, iff, ddepth);
2367 
2368   IfNode* dum_if = new IfNode(reg, short_circuit_if(NULL, proj), iff->_prob, iff->_fcnt);
2369   register_node(dum_if, loop, reg, ddepth);
2370 
2371   proj->set_req(0, dum_if); // reattach
2372   set_idom(proj, dum_if, ddepth);
2373 
2374   ProjNode* dum_proj = proj_clone(other_proj, dum_if);
2375   register_node(dum_proj, loop, dum_if, ddepth);
2376 
2377   return reg;
2378 }
2379 
2380 //------------------------------ insert_cmpi_loop_exit -------------------------------------
2381 // Clone a signed compare loop exit from an unsigned compare and
2382 // insert it before the unsigned cmp on the stay-in-loop path.
2383 // All new nodes inserted in the dominator tree between the original
2384 // if and it's projections.  The original if test is replaced with
2385 // a constant to force the stay-in-loop path.
2386 //
2387 // This is done to make sure that the original if and it's projections
2388 // still dominate the same set of control nodes, that the ctrl() relation
2389 // from data nodes to them is preserved, and that their loop nesting is
2390 // preserved.
2391 //
2392 // before
2393 //          if(i <u limit)    unsigned compare loop exit
2394 //         /       |
2395 //        v        v
2396 //   exit-proj   stay-in-loop-proj
2397 //
2398 // after
2399 //          if(stay-in-loop-const)  original if
2400 //         /       |
2401 //        /        v
2402 //       /  if(i <  limit)    new signed test
2403 //      /  /       |
2404 //     /  /        v
2405 //    /  /  if(i <u limit)    new cloned unsigned test
2406 //   /  /   /      |
2407 //   v  v  v       |
2408 //    region       |
2409 //        |        |
2410 //      dum-if     |
2411 //     /  |        |
2412 // ether  |        |
2413 //        v        v
2414 //   exit-proj   stay-in-loop-proj
2415 //
2416 IfNode* PhaseIdealLoop::insert_cmpi_loop_exit(IfNode* if_cmpu, IdealLoopTree *loop) {
2417   const bool Signed   = true;
2418   const bool Unsigned = false;
2419 
2420   BoolNode* bol = if_cmpu->in(1)->as_Bool();
2421   if (bol->_test._test != BoolTest::lt) return NULL;
2422   CmpNode* cmpu = bol->in(1)->as_Cmp();
2423   if (cmpu->Opcode() != Op_CmpU) return NULL;
2424   int stride = stride_of_possible_iv(if_cmpu);
2425   if (stride == 0) return NULL;
2426 
2427   Node* lp_proj = stay_in_loop(if_cmpu, loop);
2428   guarantee(lp_proj != NULL, "null loop node");
2429 
2430   ProjNode* lp_continue = lp_proj->as_Proj();
2431   ProjNode* lp_exit     = if_cmpu->proj_out(!lp_continue->is_IfTrue())->as_Proj();
2432 
2433   Node* limit = NULL;
2434   if (stride > 0) {
2435     limit = cmpu->in(2);
2436   } else {
2437     limit = _igvn.makecon(TypeInt::ZERO);
2438     set_ctrl(limit, C->root());
2439   }
2440   // Create a new region on the exit path
2441   RegionNode* reg = insert_region_before_proj(lp_exit);
2442   guarantee(reg != NULL, "null region node");
2443 
2444   // Clone the if-cmpu-true-false using a signed compare
2445   BoolTest::mask rel_i = stride > 0 ? bol->_test._test : BoolTest::ge;
2446   ProjNode* cmpi_exit = insert_if_before_proj(cmpu->in(1), Signed, rel_i, limit, lp_continue);
2447   reg->add_req(cmpi_exit);
2448 
2449   // Clone the if-cmpu-true-false
2450   BoolTest::mask rel_u = bol->_test._test;
2451   ProjNode* cmpu_exit = insert_if_before_proj(cmpu->in(1), Unsigned, rel_u, cmpu->in(2), lp_continue);
2452   reg->add_req(cmpu_exit);
2453 
2454   // Force original if to stay in loop.
2455   short_circuit_if(if_cmpu, lp_continue);
2456 
2457   return cmpi_exit->in(0)->as_If();
2458 }
2459 
2460 //------------------------------ remove_cmpi_loop_exit -------------------------------------
2461 // Remove a previously inserted signed compare loop exit.
2462 void PhaseIdealLoop::remove_cmpi_loop_exit(IfNode* if_cmp, IdealLoopTree *loop) {
2463   Node* lp_proj = stay_in_loop(if_cmp, loop);
2464   assert(if_cmp->in(1)->in(1)->Opcode() == Op_CmpI &&
2465          stay_in_loop(lp_proj, loop)->is_If() &&
2466          stay_in_loop(lp_proj, loop)->in(1)->in(1)->Opcode() == Op_CmpU, "inserted cmpi before cmpu");
2467   Node *con = _igvn.makecon(lp_proj->is_IfTrue() ? TypeInt::ONE : TypeInt::ZERO);
2468   set_ctrl(con, C->root());
2469   if_cmp->set_req(1, con);
2470 }
2471 
2472 //------------------------------ scheduled_nodelist -------------------------------------
2473 // Create a post order schedule of nodes that are in the
2474 // "member" set.  The list is returned in "sched".
2475 // The first node in "sched" is the loop head, followed by
2476 // nodes which have no inputs in the "member" set, and then
2477 // followed by the nodes that have an immediate input dependence
2478 // on a node in "sched".
2479 void PhaseIdealLoop::scheduled_nodelist( IdealLoopTree *loop, VectorSet& member, Node_List &sched ) {
2480 
2481   assert(member.test(loop->_head->_idx), "loop head must be in member set");
2482   Arena *a = Thread::current()->resource_area();
2483   VectorSet visited(a);
2484   Node_Stack nstack(a, loop->_body.size());
2485 
2486   Node* n  = loop->_head;  // top of stack is cached in "n"
2487   uint idx = 0;
2488   visited.set(n->_idx);
2489 
2490   // Initially push all with no inputs from within member set
2491   for(uint i = 0; i < loop->_body.size(); i++ ) {
2492     Node *elt = loop->_body.at(i);
2493     if (member.test(elt->_idx)) {
2494       bool found = false;
2495       for (uint j = 0; j < elt->req(); j++) {
2496         Node* def = elt->in(j);
2497         if (def && member.test(def->_idx) && def != elt) {
2498           found = true;
2499           break;
2500         }
2501       }
2502       if (!found && elt != loop->_head) {
2503         nstack.push(n, idx);
2504         n = elt;
2505         assert(!visited.test(n->_idx), "not seen yet");
2506         visited.set(n->_idx);
2507       }
2508     }
2509   }
2510 
2511   // traverse out's that are in the member set
2512   while (true) {
2513     if (idx < n->outcnt()) {
2514       Node* use = n->raw_out(idx);
2515       idx++;
2516       if (!visited.test_set(use->_idx)) {
2517         if (member.test(use->_idx)) {
2518           nstack.push(n, idx);
2519           n = use;
2520           idx = 0;
2521         }
2522       }
2523     } else {
2524       // All outputs processed
2525       sched.push(n);
2526       if (nstack.is_empty()) break;
2527       n   = nstack.node();
2528       idx = nstack.index();
2529       nstack.pop();
2530     }
2531   }
2532 }
2533 
2534 
2535 //------------------------------ has_use_in_set -------------------------------------
2536 // Has a use in the vector set
2537 bool PhaseIdealLoop::has_use_in_set( Node* n, VectorSet& vset ) {
2538   for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
2539     Node* use = n->fast_out(j);
2540     if (vset.test(use->_idx)) {
2541       return true;
2542     }
2543   }
2544   return false;
2545 }
2546 
2547 
2548 //------------------------------ has_use_internal_to_set -------------------------------------
2549 // Has use internal to the vector set (ie. not in a phi at the loop head)
2550 bool PhaseIdealLoop::has_use_internal_to_set( Node* n, VectorSet& vset, IdealLoopTree *loop ) {
2551   Node* head  = loop->_head;
2552   for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
2553     Node* use = n->fast_out(j);
2554     if (vset.test(use->_idx) && !(use->is_Phi() && use->in(0) == head)) {
2555       return true;
2556     }
2557   }
2558   return false;
2559 }
2560 
2561 
2562 //------------------------------ clone_for_use_outside_loop -------------------------------------
2563 // clone "n" for uses that are outside of loop
2564 int PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, Node_List& worklist ) {
2565   int cloned = 0;
2566   assert(worklist.size() == 0, "should be empty");
2567   for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
2568     Node* use = n->fast_out(j);
2569     if( !loop->is_member(get_loop(has_ctrl(use) ? get_ctrl(use) : use)) ) {
2570       worklist.push(use);
2571     }
2572   }
2573   while( worklist.size() ) {
2574     Node *use = worklist.pop();
2575     if (!has_node(use) || use->in(0) == C->top()) continue;
2576     uint j;
2577     for (j = 0; j < use->req(); j++) {
2578       if (use->in(j) == n) break;
2579     }
2580     assert(j < use->req(), "must be there");
2581 
2582     // clone "n" and insert it between the inputs of "n" and the use outside the loop
2583     Node* n_clone = n->clone();
2584     _igvn.replace_input_of(use, j, n_clone);
2585     cloned++;
2586     Node* use_c;
2587     if (!use->is_Phi()) {
2588       use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0);
2589     } else {
2590       // Use in a phi is considered a use in the associated predecessor block
2591       use_c = use->in(0)->in(j);
2592     }
2593     set_ctrl(n_clone, use_c);
2594     assert(!loop->is_member(get_loop(use_c)), "should be outside loop");
2595     get_loop(use_c)->_body.push(n_clone);
2596     _igvn.register_new_node_with_optimizer(n_clone);
2597 #if !defined(PRODUCT)
2598     if (TracePartialPeeling) {
2599       tty->print_cr("loop exit cloning old: %d new: %d newbb: %d", n->_idx, n_clone->_idx, get_ctrl(n_clone)->_idx);
2600     }
2601 #endif
2602   }
2603   return cloned;
2604 }
2605 
2606 
2607 //------------------------------ clone_for_special_use_inside_loop -------------------------------------
2608 // clone "n" for special uses that are in the not_peeled region.
2609 // If these def-uses occur in separate blocks, the code generator
2610 // marks the method as not compilable.  For example, if a "BoolNode"
2611 // is in a different basic block than the "IfNode" that uses it, then
2612 // the compilation is aborted in the code generator.
2613 void PhaseIdealLoop::clone_for_special_use_inside_loop( IdealLoopTree *loop, Node* n,
2614                                                         VectorSet& not_peel, Node_List& sink_list, Node_List& worklist ) {
2615   if (n->is_Phi() || n->is_Load()) {
2616     return;
2617   }
2618   assert(worklist.size() == 0, "should be empty");
2619   for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
2620     Node* use = n->fast_out(j);
2621     if ( not_peel.test(use->_idx) &&
2622          (use->is_If() || use->is_CMove() || use->is_Bool()) &&
2623          use->in(1) == n)  {
2624       worklist.push(use);
2625     }
2626   }
2627   if (worklist.size() > 0) {
2628     // clone "n" and insert it between inputs of "n" and the use
2629     Node* n_clone = n->clone();
2630     loop->_body.push(n_clone);
2631     _igvn.register_new_node_with_optimizer(n_clone);
2632     set_ctrl(n_clone, get_ctrl(n));
2633     sink_list.push(n_clone);
2634     not_peel <<= n_clone->_idx;  // add n_clone to not_peel set.
2635 #if !defined(PRODUCT)
2636     if (TracePartialPeeling) {
2637       tty->print_cr("special not_peeled cloning old: %d new: %d", n->_idx, n_clone->_idx);
2638     }
2639 #endif
2640     while( worklist.size() ) {
2641       Node *use = worklist.pop();
2642       _igvn.rehash_node_delayed(use);
2643       for (uint j = 1; j < use->req(); j++) {
2644         if (use->in(j) == n) {
2645           use->set_req(j, n_clone);
2646         }
2647       }
2648     }
2649   }
2650 }
2651 
2652 
2653 //------------------------------ insert_phi_for_loop -------------------------------------
2654 // Insert phi(lp_entry_val, back_edge_val) at use->in(idx) for loop lp if phi does not already exist
2655 void PhaseIdealLoop::insert_phi_for_loop( Node* use, uint idx, Node* lp_entry_val, Node* back_edge_val, LoopNode* lp ) {
2656   Node *phi = PhiNode::make(lp, back_edge_val);
2657   phi->set_req(LoopNode::EntryControl, lp_entry_val);
2658   // Use existing phi if it already exists
2659   Node *hit = _igvn.hash_find_insert(phi);
2660   if( hit == NULL ) {
2661     _igvn.register_new_node_with_optimizer(phi);
2662     set_ctrl(phi, lp);
2663   } else {
2664     // Remove the new phi from the graph and use the hit
2665     _igvn.remove_dead_node(phi);
2666     phi = hit;
2667   }
2668   _igvn.replace_input_of(use, idx, phi);
2669 }
2670 
2671 #ifdef ASSERT
2672 //------------------------------ is_valid_loop_partition -------------------------------------
2673 // Validate the loop partition sets: peel and not_peel
2674 bool PhaseIdealLoop::is_valid_loop_partition( IdealLoopTree *loop, VectorSet& peel, Node_List& peel_list,
2675                                               VectorSet& not_peel ) {
2676   uint i;
2677   // Check that peel_list entries are in the peel set
2678   for (i = 0; i < peel_list.size(); i++) {
2679     if (!peel.test(peel_list.at(i)->_idx)) {
2680       return false;
2681     }
2682   }
2683   // Check at loop members are in one of peel set or not_peel set
2684   for (i = 0; i < loop->_body.size(); i++ ) {
2685     Node *def  = loop->_body.at(i);
2686     uint di = def->_idx;
2687     // Check that peel set elements are in peel_list
2688     if (peel.test(di)) {
2689       if (not_peel.test(di)) {
2690         return false;
2691       }
2692       // Must be in peel_list also
2693       bool found = false;
2694       for (uint j = 0; j < peel_list.size(); j++) {
2695         if (peel_list.at(j)->_idx == di) {
2696           found = true;
2697           break;
2698         }
2699       }
2700       if (!found) {
2701         return false;
2702       }
2703     } else if (not_peel.test(di)) {
2704       if (peel.test(di)) {
2705         return false;
2706       }
2707     } else {
2708       return false;
2709     }
2710   }
2711   return true;
2712 }
2713 
2714 //------------------------------ is_valid_clone_loop_exit_use -------------------------------------
2715 // Ensure a use outside of loop is of the right form
2716 bool PhaseIdealLoop::is_valid_clone_loop_exit_use( IdealLoopTree *loop, Node* use, uint exit_idx) {
2717   Node *use_c = has_ctrl(use) ? get_ctrl(use) : use;
2718   return (use->is_Phi() &&
2719           use_c->is_Region() && use_c->req() == 3 &&
2720           (use_c->in(exit_idx)->Opcode() == Op_IfTrue ||
2721            use_c->in(exit_idx)->Opcode() == Op_IfFalse ||
2722            use_c->in(exit_idx)->Opcode() == Op_JumpProj) &&
2723           loop->is_member( get_loop( use_c->in(exit_idx)->in(0) ) ) );
2724 }
2725 
2726 //------------------------------ is_valid_clone_loop_form -------------------------------------
2727 // Ensure that all uses outside of loop are of the right form
2728 bool PhaseIdealLoop::is_valid_clone_loop_form( IdealLoopTree *loop, Node_List& peel_list,
2729                                                uint orig_exit_idx, uint clone_exit_idx) {
2730   uint len = peel_list.size();
2731   for (uint i = 0; i < len; i++) {
2732     Node *def = peel_list.at(i);
2733 
2734     for (DUIterator_Fast jmax, j = def->fast_outs(jmax); j < jmax; j++) {
2735       Node *use = def->fast_out(j);
2736       Node *use_c = has_ctrl(use) ? get_ctrl(use) : use;
2737       if (!loop->is_member(get_loop(use_c))) {
2738         // use is not in the loop, check for correct structure
2739         if (use->in(0) == def) {
2740           // Okay
2741         } else if (!is_valid_clone_loop_exit_use(loop, use, orig_exit_idx)) {
2742           return false;
2743         }
2744       }
2745     }
2746   }
2747   return true;
2748 }
2749 #endif
2750 
2751 //------------------------------ partial_peel -------------------------------------
2752 // Partially peel (aka loop rotation) the top portion of a loop (called
2753 // the peel section below) by cloning it and placing one copy just before
2754 // the new loop head and the other copy at the bottom of the new loop.
2755 //
2756 //    before                       after                where it came from
2757 //
2758 //    stmt1                        stmt1
2759 //  loop:                          stmt2                     clone
2760 //    stmt2                        if condA goto exitA       clone
2761 //    if condA goto exitA        new_loop:                   new
2762 //    stmt3                        stmt3                     clone
2763 //    if !condB goto loop          if condB goto exitB       clone
2764 //  exitB:                         stmt2                     orig
2765 //    stmt4                        if !condA goto new_loop   orig
2766 //  exitA:                         goto exitA
2767 //                               exitB:
2768 //                                 stmt4
2769 //                               exitA:
2770 //
2771 // Step 1: find the cut point: an exit test on probable
2772 //         induction variable.
2773 // Step 2: schedule (with cloning) operations in the peel
2774 //         section that can be executed after the cut into
2775 //         the section that is not peeled.  This may need
2776 //         to clone operations into exit blocks.  For
2777 //         instance, a reference to A[i] in the not-peel
2778 //         section and a reference to B[i] in an exit block
2779 //         may cause a left-shift of i by 2 to be placed
2780 //         in the peel block.  This step will clone the left
2781 //         shift into the exit block and sink the left shift
2782 //         from the peel to the not-peel section.
2783 // Step 3: clone the loop, retarget the control, and insert
2784 //         phis for values that are live across the new loop
2785 //         head.  This is very dependent on the graph structure
2786 //         from clone_loop.  It creates region nodes for
2787 //         exit control and associated phi nodes for values
2788 //         flow out of the loop through that exit.  The region
2789 //         node is dominated by the clone's control projection.
2790 //         So the clone's peel section is placed before the
2791 //         new loop head, and the clone's not-peel section is
2792 //         forms the top part of the new loop.  The original
2793 //         peel section forms the tail of the new loop.
2794 // Step 4: update the dominator tree and recompute the
2795 //         dominator depth.
2796 //
2797 //                   orig
2798 //
2799 //                   stmt1
2800 //                     |
2801 //                     v
2802 //               loop predicate
2803 //                     |
2804 //                     v
2805 //                   loop<----+
2806 //                     |      |
2807 //                   stmt2    |
2808 //                     |      |
2809 //                     v      |
2810 //                    ifA     |
2811 //                   / |      |
2812 //                  v  v      |
2813 //               false true   ^  <-- last_peel
2814 //               /     |      |
2815 //              /   ===|==cut |
2816 //             /     stmt3    |  <-- first_not_peel
2817 //            /        |      |
2818 //            |        v      |
2819 //            v       ifB     |
2820 //          exitA:   / \      |
2821 //                  /   \     |
2822 //                 v     v    |
2823 //               false true   |
2824 //               /       \    |
2825 //              /         ----+
2826 //             |
2827 //             v
2828 //           exitB:
2829 //           stmt4
2830 //
2831 //
2832 //            after clone loop
2833 //
2834 //                   stmt1
2835 //                     |
2836 //                     v
2837 //               loop predicate
2838 //                 /       \
2839 //        clone   /         \   orig
2840 //               /           \
2841 //              /             \
2842 //             v               v
2843 //   +---->loop                loop<----+
2844 //   |      |                    |      |
2845 //   |    stmt2                stmt2    |
2846 //   |      |                    |      |
2847 //   |      v                    v      |
2848 //   |      ifA                 ifA     |
2849 //   |      | \                / |      |
2850 //   |      v  v              v  v      |
2851 //   ^    true  false      false true   ^  <-- last_peel
2852 //   |      |   ^   \       /    |      |
2853 //   | cut==|==  \   \     /  ===|==cut |
2854 //   |    stmt3   \   \   /    stmt3    |  <-- first_not_peel
2855 //   |      |    dom   | |       |      |
2856 //   |      v      \  1v v2      v      |
2857 //   |      ifB     regionA     ifB     |
2858 //   |      / \        |       / \      |
2859 //   |     /   \       v      /   \     |
2860 //   |    v     v    exitA:  v     v    |
2861 //   |    true  false      false true   |
2862 //   |    /     ^   \      /       \    |
2863 //   +----       \   \    /         ----+
2864 //               dom  \  /
2865 //                 \  1v v2
2866 //                  regionB
2867 //                     |
2868 //                     v
2869 //                   exitB:
2870 //                   stmt4
2871 //
2872 //
2873 //           after partial peel
2874 //
2875 //                  stmt1
2876 //                     |
2877 //                     v
2878 //               loop predicate
2879 //                 /
2880 //        clone   /             orig
2881 //               /          TOP
2882 //              /             \
2883 //             v               v
2884 //    TOP->loop                loop----+
2885 //          |                    |      |
2886 //        stmt2                stmt2    |
2887 //          |                    |      |
2888 //          v                    v      |
2889 //          ifA                 ifA     |
2890 //          | \                / |      |
2891 //          v  v              v  v      |
2892 //        true  false      false true   |     <-- last_peel
2893 //          |   ^   \       /    +------|---+
2894 //  +->newloop   \   \     /  === ==cut |   |
2895 //  |     stmt3   \   \   /     TOP     |   |
2896 //  |       |    dom   | |      stmt3   |   | <-- first_not_peel
2897 //  |       v      \  1v v2      v      |   |
2898 //  |       ifB     regionA     ifB     ^   v
2899 //  |       / \        |       / \      |   |
2900 //  |      /   \       v      /   \     |   |
2901 //  |     v     v    exitA:  v     v    |   |
2902 //  |     true  false      false true   |   |
2903 //  |     /     ^   \      /       \    |   |
2904 //  |    |       \   \    /         v   |   |
2905 //  |    |       dom  \  /         TOP  |   |
2906 //  |    |         \  1v v2             |   |
2907 //  ^    v          regionB             |   |
2908 //  |    |             |                |   |
2909 //  |    |             v                ^   v
2910 //  |    |           exitB:             |   |
2911 //  |    |           stmt4              |   |
2912 //  |    +------------>-----------------+   |
2913 //  |                                       |
2914 //  +-----------------<---------------------+
2915 //
2916 //
2917 //              final graph
2918 //
2919 //                  stmt1
2920 //                    |
2921 //                    v
2922 //               loop predicate
2923 //                    |
2924 //                    v
2925 //                  stmt2 clone
2926 //                    |
2927 //                    v
2928 //         ........> ifA clone
2929 //         :        / |
2930 //        dom      /  |
2931 //         :      v   v
2932 //         :  false   true
2933 //         :  |       |
2934 //         :  |       v
2935 //         :  |    newloop<-----+
2936 //         :  |        |        |
2937 //         :  |     stmt3 clone |
2938 //         :  |        |        |
2939 //         :  |        v        |
2940 //         :  |       ifB       |
2941 //         :  |      / \        |
2942 //         :  |     v   v       |
2943 //         :  |  false true     |
2944 //         :  |   |     |       |
2945 //         :  |   v    stmt2    |
2946 //         :  | exitB:  |       |
2947 //         :  | stmt4   v       |
2948 //         :  |       ifA orig  |
2949 //         :  |      /  \       |
2950 //         :  |     /    \      |
2951 //         :  |    v     v      |
2952 //         :  |  false  true    |
2953 //         :  |  /        \     |
2954 //         :  v  v         -----+
2955 //          RegionA
2956 //             |
2957 //             v
2958 //           exitA
2959 //
2960 bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
2961 
2962   assert(!loop->_head->is_CountedLoop(), "Non-counted loop only");
2963   if (!loop->_head->is_Loop()) {
2964     return false;  }
2965 
2966   LoopNode *head  = loop->_head->as_Loop();
2967 
2968   if (head->is_partial_peel_loop() || head->partial_peel_has_failed()) {
2969     return false;
2970   }
2971 
2972   // Check for complex exit control
2973   for(uint ii = 0; ii < loop->_body.size(); ii++ ) {
2974     Node *n = loop->_body.at(ii);
2975     int opc = n->Opcode();
2976     if (n->is_Call()        ||
2977         opc == Op_Catch     ||
2978         opc == Op_CatchProj ||
2979         opc == Op_Jump      ||
2980         opc == Op_JumpProj) {
2981 #if !defined(PRODUCT)
2982       if (TracePartialPeeling) {
2983         tty->print_cr("\nExit control too complex: lp: %d", head->_idx);
2984       }
2985 #endif
2986       return false;
2987     }
2988   }
2989 
2990   int dd = dom_depth(head);
2991 
2992   // Step 1: find cut point
2993 
2994   // Walk up dominators to loop head looking for first loop exit
2995   // which is executed on every path thru loop.
2996   IfNode *peel_if = NULL;
2997   IfNode *peel_if_cmpu = NULL;
2998 
2999   Node *iff = loop->tail();
3000   while( iff != head ) {
3001     if( iff->is_If() ) {
3002       Node *ctrl = get_ctrl(iff->in(1));
3003       if (ctrl->is_top()) return false; // Dead test on live IF.
3004       // If loop-varying exit-test, check for induction variable
3005       if( loop->is_member(get_loop(ctrl)) &&
3006           loop->is_loop_exit(iff) &&
3007           is_possible_iv_test(iff)) {
3008         Node* cmp = iff->in(1)->in(1);
3009         if (cmp->Opcode() == Op_CmpI) {
3010           peel_if = iff->as_If();
3011         } else {
3012           assert(cmp->Opcode() == Op_CmpU, "must be CmpI or CmpU");
3013           peel_if_cmpu = iff->as_If();
3014         }
3015       }
3016     }
3017     iff = idom(iff);
3018   }
3019   // Prefer signed compare over unsigned compare.
3020   IfNode* new_peel_if = NULL;
3021   if (peel_if == NULL) {
3022     if (!PartialPeelAtUnsignedTests || peel_if_cmpu == NULL) {
3023       return false;   // No peel point found
3024     }
3025     new_peel_if = insert_cmpi_loop_exit(peel_if_cmpu, loop);
3026     if (new_peel_if == NULL) {
3027       return false;   // No peel point found
3028     }
3029     peel_if = new_peel_if;
3030   }
3031   Node* last_peel        = stay_in_loop(peel_if, loop);
3032   Node* first_not_peeled = stay_in_loop(last_peel, loop);
3033   if (first_not_peeled == NULL || first_not_peeled == head) {
3034     return false;
3035   }
3036 
3037 #if !defined(PRODUCT)
3038   if (TraceLoopOpts) {
3039     tty->print("PartialPeel  ");
3040     loop->dump_head();
3041   }
3042 
3043   if (TracePartialPeeling) {
3044     tty->print_cr("before partial peel one iteration");
3045     Node_List wl;
3046     Node* t = head->in(2);
3047     while (true) {
3048       wl.push(t);
3049       if (t == head) break;
3050       t = idom(t);
3051     }
3052     while (wl.size() > 0) {
3053       Node* tt = wl.pop();
3054       tt->dump();
3055       if (tt == last_peel) tty->print_cr("-- cut --");
3056     }
3057   }
3058 #endif
3059   ResourceArea *area = Thread::current()->resource_area();
3060   VectorSet peel(area);
3061   VectorSet not_peel(area);
3062   Node_List peel_list(area);
3063   Node_List worklist(area);
3064   Node_List sink_list(area);
3065 
3066   // Set of cfg nodes to peel are those that are executable from
3067   // the head through last_peel.
3068   assert(worklist.size() == 0, "should be empty");
3069   worklist.push(head);
3070   peel.set(head->_idx);
3071   while (worklist.size() > 0) {
3072     Node *n = worklist.pop();
3073     if (n != last_peel) {
3074       for (DUIterator_Fast jmax, j = n->fast_outs(jmax); j < jmax; j++) {
3075         Node* use = n->fast_out(j);
3076         if (use->is_CFG() &&
3077             loop->is_member(get_loop(use)) &&
3078             !peel.test_set(use->_idx)) {
3079           worklist.push(use);
3080         }
3081       }
3082     }
3083   }
3084 
3085   // Set of non-cfg nodes to peel are those that are control
3086   // dependent on the cfg nodes.
3087   uint i;
3088   for(i = 0; i < loop->_body.size(); i++ ) {
3089     Node *n = loop->_body.at(i);
3090     Node *n_c = has_ctrl(n) ? get_ctrl(n) : n;
3091     if (peel.test(n_c->_idx)) {
3092       peel.set(n->_idx);
3093     } else {
3094       not_peel.set(n->_idx);
3095     }
3096   }
3097 
3098   // Step 2: move operations from the peeled section down into the
3099   //         not-peeled section
3100 
3101   // Get a post order schedule of nodes in the peel region
3102   // Result in right-most operand.
3103   scheduled_nodelist(loop, peel, peel_list );
3104 
3105   assert(is_valid_loop_partition(loop, peel, peel_list, not_peel), "bad partition");
3106 
3107   // For future check for too many new phis
3108   uint old_phi_cnt = 0;
3109   for (DUIterator_Fast jmax, j = head->fast_outs(jmax); j < jmax; j++) {
3110     Node* use = head->fast_out(j);
3111     if (use->is_Phi()) old_phi_cnt++;
3112   }
3113 
3114 #if !defined(PRODUCT)
3115   if (TracePartialPeeling) {
3116     tty->print_cr("\npeeled list");
3117   }
3118 #endif
3119 
3120   // Evacuate nodes in peel region into the not_peeled region if possible
3121   uint new_phi_cnt = 0;
3122   uint cloned_for_outside_use = 0;
3123   for (i = 0; i < peel_list.size();) {
3124     Node* n = peel_list.at(i);
3125 #if !defined(PRODUCT)
3126   if (TracePartialPeeling) n->dump();
3127 #endif
3128     bool incr = true;
3129     if ( !n->is_CFG() ) {
3130 
3131       if ( has_use_in_set(n, not_peel) ) {
3132 
3133         // If not used internal to the peeled region,
3134         // move "n" from peeled to not_peeled region.
3135 
3136         if ( !has_use_internal_to_set(n, peel, loop) ) {
3137 
3138           // if not pinned and not a load (which maybe anti-dependent on a store)
3139           // and not a CMove (Matcher expects only bool->cmove).
3140           if ( n->in(0) == NULL && !n->is_Load() && !n->is_CMove() ) {
3141             cloned_for_outside_use += clone_for_use_outside_loop( loop, n, worklist );
3142             sink_list.push(n);
3143             peel     >>= n->_idx; // delete n from peel set.
3144             not_peel <<= n->_idx; // add n to not_peel set.
3145             peel_list.remove(i);
3146             incr = false;
3147 #if !defined(PRODUCT)
3148             if (TracePartialPeeling) {
3149               tty->print_cr("sink to not_peeled region: %d newbb: %d",
3150                             n->_idx, get_ctrl(n)->_idx);
3151             }
3152 #endif
3153           }
3154         } else {
3155           // Otherwise check for special def-use cases that span
3156           // the peel/not_peel boundary such as bool->if
3157           clone_for_special_use_inside_loop( loop, n, not_peel, sink_list, worklist );
3158           new_phi_cnt++;
3159         }
3160       }
3161     }
3162     if (incr) i++;
3163   }
3164 
3165   if (new_phi_cnt > old_phi_cnt + PartialPeelNewPhiDelta) {
3166 #if !defined(PRODUCT)
3167     if (TracePartialPeeling) {
3168       tty->print_cr("\nToo many new phis: %d  old %d new cmpi: %c",
3169                     new_phi_cnt, old_phi_cnt, new_peel_if != NULL?'T':'F');
3170     }
3171 #endif
3172     if (new_peel_if != NULL) {
3173       remove_cmpi_loop_exit(new_peel_if, loop);
3174     }
3175     // Inhibit more partial peeling on this loop
3176     assert(!head->is_partial_peel_loop(), "not partial peeled");
3177     head->mark_partial_peel_failed();
3178     if (cloned_for_outside_use > 0) {
3179       // Terminate this round of loop opts because
3180       // the graph outside this loop was changed.
3181       C->set_major_progress();
3182       return true;
3183     }
3184     return false;
3185   }
3186 
3187   // Step 3: clone loop, retarget control, and insert new phis
3188 
3189   // Create new loop head for new phis and to hang
3190   // the nodes being moved (sinked) from the peel region.
3191   LoopNode* new_head = new LoopNode(last_peel, last_peel);
3192   new_head->set_unswitch_count(head->unswitch_count()); // Preserve
3193   _igvn.register_new_node_with_optimizer(new_head);
3194   assert(first_not_peeled->in(0) == last_peel, "last_peel <- first_not_peeled");
3195   _igvn.replace_input_of(first_not_peeled, 0, new_head);
3196   set_loop(new_head, loop);
3197   loop->_body.push(new_head);
3198   not_peel.set(new_head->_idx);
3199   set_idom(new_head, last_peel, dom_depth(first_not_peeled));
3200   set_idom(first_not_peeled, new_head, dom_depth(first_not_peeled));
3201 
3202   while (sink_list.size() > 0) {
3203     Node* n = sink_list.pop();
3204     set_ctrl(n, new_head);
3205   }
3206 
3207   assert(is_valid_loop_partition(loop, peel, peel_list, not_peel), "bad partition");
3208 
3209   clone_loop(loop, old_new, dd, IgnoreStripMined);
3210 
3211   const uint clone_exit_idx = 1;
3212   const uint orig_exit_idx  = 2;
3213   assert(is_valid_clone_loop_form( loop, peel_list, orig_exit_idx, clone_exit_idx ), "bad clone loop");
3214 
3215   Node* head_clone             = old_new[head->_idx];
3216   LoopNode* new_head_clone     = old_new[new_head->_idx]->as_Loop();
3217   Node* orig_tail_clone        = head_clone->in(2);
3218 
3219   // Add phi if "def" node is in peel set and "use" is not
3220 
3221   for(i = 0; i < peel_list.size(); i++ ) {
3222     Node *def  = peel_list.at(i);
3223     if (!def->is_CFG()) {
3224       for (DUIterator_Fast jmax, j = def->fast_outs(jmax); j < jmax; j++) {
3225         Node *use = def->fast_out(j);
3226         if (has_node(use) && use->in(0) != C->top() &&
3227             (!peel.test(use->_idx) ||
3228              (use->is_Phi() && use->in(0) == head)) ) {
3229           worklist.push(use);
3230         }
3231       }
3232       while( worklist.size() ) {
3233         Node *use = worklist.pop();
3234         for (uint j = 1; j < use->req(); j++) {
3235           Node* n = use->in(j);
3236           if (n == def) {
3237 
3238             // "def" is in peel set, "use" is not in peel set
3239             // or "use" is in the entry boundary (a phi) of the peel set
3240 
3241             Node* use_c = has_ctrl(use) ? get_ctrl(use) : use;
3242 
3243             if ( loop->is_member(get_loop( use_c )) ) {
3244               // use is in loop
3245               if (old_new[use->_idx] != NULL) { // null for dead code
3246                 Node* use_clone = old_new[use->_idx];
3247                 _igvn.replace_input_of(use, j, C->top());
3248                 insert_phi_for_loop( use_clone, j, old_new[def->_idx], def, new_head_clone );
3249               }
3250             } else {
3251               assert(is_valid_clone_loop_exit_use(loop, use, orig_exit_idx), "clone loop format");
3252               // use is not in the loop, check if the live range includes the cut
3253               Node* lp_if = use_c->in(orig_exit_idx)->in(0);
3254               if (not_peel.test(lp_if->_idx)) {
3255                 assert(j == orig_exit_idx, "use from original loop");
3256                 insert_phi_for_loop( use, clone_exit_idx, old_new[def->_idx], def, new_head_clone );
3257               }
3258             }
3259           }
3260         }
3261       }
3262     }
3263   }
3264 
3265   // Step 3b: retarget control
3266 
3267   // Redirect control to the new loop head if a cloned node in
3268   // the not_peeled region has control that points into the peeled region.
3269   // This necessary because the cloned peeled region will be outside
3270   // the loop.
3271   //                            from    to
3272   //          cloned-peeled    <---+
3273   //    new_head_clone:            |    <--+
3274   //          cloned-not_peeled  in(0)    in(0)
3275   //          orig-peeled
3276 
3277   for(i = 0; i < loop->_body.size(); i++ ) {
3278     Node *n = loop->_body.at(i);
3279     if (!n->is_CFG()           && n->in(0) != NULL        &&
3280         not_peel.test(n->_idx) && peel.test(n->in(0)->_idx)) {
3281       Node* n_clone = old_new[n->_idx];
3282       _igvn.replace_input_of(n_clone, 0, new_head_clone);
3283     }
3284   }
3285 
3286   // Backedge of the surviving new_head (the clone) is original last_peel
3287   _igvn.replace_input_of(new_head_clone, LoopNode::LoopBackControl, last_peel);
3288 
3289   // Cut first node in original not_peel set
3290   _igvn.rehash_node_delayed(new_head);                     // Multiple edge updates:
3291   new_head->set_req(LoopNode::EntryControl,    C->top());  //   use rehash_node_delayed / set_req instead of
3292   new_head->set_req(LoopNode::LoopBackControl, C->top());  //   multiple replace_input_of calls
3293 
3294   // Copy head_clone back-branch info to original head
3295   // and remove original head's loop entry and
3296   // clone head's back-branch
3297   _igvn.rehash_node_delayed(head); // Multiple edge updates
3298   head->set_req(LoopNode::EntryControl,    head_clone->in(LoopNode::LoopBackControl));
3299   head->set_req(LoopNode::LoopBackControl, C->top());
3300   _igvn.replace_input_of(head_clone, LoopNode::LoopBackControl, C->top());
3301 
3302   // Similarly modify the phis
3303   for (DUIterator_Fast kmax, k = head->fast_outs(kmax); k < kmax; k++) {
3304     Node* use = head->fast_out(k);
3305     if (use->is_Phi() && use->outcnt() > 0) {
3306       Node* use_clone = old_new[use->_idx];
3307       _igvn.rehash_node_delayed(use); // Multiple edge updates
3308       use->set_req(LoopNode::EntryControl,    use_clone->in(LoopNode::LoopBackControl));
3309       use->set_req(LoopNode::LoopBackControl, C->top());
3310       _igvn.replace_input_of(use_clone, LoopNode::LoopBackControl, C->top());
3311     }
3312   }
3313 
3314   // Step 4: update dominator tree and dominator depth
3315 
3316   set_idom(head, orig_tail_clone, dd);
3317   recompute_dom_depth();
3318 
3319   // Inhibit more partial peeling on this loop
3320   new_head_clone->set_partial_peel_loop();
3321   C->set_major_progress();
3322   loop->record_for_igvn();
3323 
3324 #if !defined(PRODUCT)
3325   if (TracePartialPeeling) {
3326     tty->print_cr("\nafter partial peel one iteration");
3327     Node_List wl(area);
3328     Node* t = last_peel;
3329     while (true) {
3330       wl.push(t);
3331       if (t == head_clone) break;
3332       t = idom(t);
3333     }
3334     while (wl.size() > 0) {
3335       Node* tt = wl.pop();
3336       if (tt == head) tty->print_cr("orig head");
3337       else if (tt == new_head_clone) tty->print_cr("new head");
3338       else if (tt == head_clone) tty->print_cr("clone head");
3339       tt->dump();
3340     }
3341   }
3342 #endif
3343   return true;
3344 }
3345 
3346 //------------------------------reorg_offsets----------------------------------
3347 // Reorganize offset computations to lower register pressure.  Mostly
3348 // prevent loop-fallout uses of the pre-incremented trip counter (which are
3349 // then alive with the post-incremented trip counter forcing an extra
3350 // register move)
3351 void PhaseIdealLoop::reorg_offsets(IdealLoopTree *loop) {
3352   // Perform it only for canonical counted loops.
3353   // Loop's shape could be messed up by iteration_split_impl.
3354   if (!loop->_head->is_CountedLoop())
3355     return;
3356   if (!loop->_head->as_Loop()->is_valid_counted_loop())
3357     return;
3358 
3359   CountedLoopNode *cl = loop->_head->as_CountedLoop();
3360   CountedLoopEndNode *cle = cl->loopexit();
3361   Node *exit = cle->proj_out(false);
3362   Node *phi = cl->phi();
3363 
3364   // Check for the special case of folks using the pre-incremented
3365   // trip-counter on the fall-out path (forces the pre-incremented
3366   // and post-incremented trip counter to be live at the same time).
3367   // Fix this by adjusting to use the post-increment trip counter.
3368 
3369   bool progress = true;
3370   while (progress) {
3371     progress = false;
3372     for (DUIterator_Fast imax, i = phi->fast_outs(imax); i < imax; i++) {
3373       Node* use = phi->fast_out(i);   // User of trip-counter
3374       if (!has_ctrl(use))  continue;
3375       Node *u_ctrl = get_ctrl(use);
3376       if (use->is_Phi()) {
3377         u_ctrl = NULL;
3378         for (uint j = 1; j < use->req(); j++)
3379           if (use->in(j) == phi)
3380             u_ctrl = dom_lca(u_ctrl, use->in(0)->in(j));
3381       }
3382       IdealLoopTree *u_loop = get_loop(u_ctrl);
3383       // Look for loop-invariant use
3384       if (u_loop == loop) continue;
3385       if (loop->is_member(u_loop)) continue;
3386       // Check that use is live out the bottom.  Assuming the trip-counter
3387       // update is right at the bottom, uses of of the loop middle are ok.
3388       if (dom_lca(exit, u_ctrl) != exit) continue;
3389       // Hit!  Refactor use to use the post-incremented tripcounter.
3390       // Compute a post-increment tripcounter.
3391       Node* c = exit;
3392       if (cl->is_strip_mined()) {
3393         IdealLoopTree* outer_loop = get_loop(cl->outer_loop());
3394         if (!outer_loop->is_member(u_loop)) {
3395           c = cl->outer_loop_exit();
3396         }
3397       }
3398       Node *opaq = new Opaque2Node(C, cle->incr());
3399       register_new_node(opaq, c);
3400       Node *neg_stride = _igvn.intcon(-cle->stride_con());
3401       set_ctrl(neg_stride, C->root());
3402       Node *post = new AddINode(opaq, neg_stride);
3403       register_new_node(post, c);
3404       _igvn.rehash_node_delayed(use);
3405       for (uint j = 1; j < use->req(); j++) {
3406         if (use->in(j) == phi)
3407           use->set_req(j, post);
3408       }
3409       // Since DU info changed, rerun loop
3410       progress = true;
3411       break;
3412     }
3413   }
3414 
3415 }