src/share/vm/opto/loopTransform.cpp
author kvn
Mon Jun 20 16:45:35 2011 -0700 (2 years ago)
changeset 2551 782e2bb60c41
parent 2490789d04408ca3
permissions -rw-r--r--
7052494: Eclipse test fails on JDK 7 b142
Summary: Keep 'ne' test in Counted loop when we can't guarantee during compilation that init < limit.
Reviewed-by: never
        1 /*
        2  * Copyright (c) 2000, 2011, 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 "compiler/compileLog.hpp"
       27 #include "memory/allocation.inline.hpp"
       28 #include "opto/addnode.hpp"
       29 #include "opto/callnode.hpp"
       30 #include "opto/connode.hpp"
       31 #include "opto/divnode.hpp"
       32 #include "opto/loopnode.hpp"
       33 #include "opto/mulnode.hpp"
       34 #include "opto/rootnode.hpp"
       35 #include "opto/runtime.hpp"
       36 #include "opto/subnode.hpp"
       37 
       38 //------------------------------is_loop_exit-----------------------------------
       39 // Given an IfNode, return the loop-exiting projection or NULL if both
       40 // arms remain in the loop.
       41 Node *IdealLoopTree::is_loop_exit(Node *iff) const {
       42   if( iff->outcnt() != 2 ) return NULL; // Ignore partially dead tests
       43   PhaseIdealLoop *phase = _phase;
       44   // Test is an IfNode, has 2 projections.  If BOTH are in the loop
       45   // we need loop unswitching instead of peeling.
       46   if( !is_member(phase->get_loop( iff->raw_out(0) )) )
       47     return iff->raw_out(0);
       48   if( !is_member(phase->get_loop( iff->raw_out(1) )) )
       49     return iff->raw_out(1);
       50   return NULL;
       51 }
       52 
       53 
       54 //=============================================================================
       55 
       56 
       57 //------------------------------record_for_igvn----------------------------
       58 // Put loop body on igvn work list
       59 void IdealLoopTree::record_for_igvn() {
       60   for( uint i = 0; i < _body.size(); i++ ) {
       61     Node *n = _body.at(i);
       62     _phase->_igvn._worklist.push(n);
       63   }
       64 }
       65 
       66 //------------------------------compute_exact_trip_count-----------------------
       67 // Compute loop exact trip count if possible. Do not recalculate trip count for
       68 // split loops (pre-main-post) which have their limits and inits behind Opaque node.
       69 void IdealLoopTree::compute_exact_trip_count( PhaseIdealLoop *phase ) {
       70   if (!_head->as_Loop()->is_valid_counted_loop()) {
       71     return;
       72   }
       73   CountedLoopNode* cl = _head->as_CountedLoop();
       74   // Trip count may become nonexact for iteration split loops since
       75   // RCE modifies limits. Note, _trip_count value is not reset since
       76   // it is used to limit unrolling of main loop.
       77   cl->set_nonexact_trip_count();
       78 
       79   // Loop's test should be part of loop.
       80   if (!phase->is_member(this, phase->get_ctrl(cl->loopexit()->in(CountedLoopEndNode::TestValue))))
       81     return; // Infinite loop
       82 
       83 #ifdef ASSERT
       84   BoolTest::mask bt = cl->loopexit()->test_trip();
       85   assert(bt == BoolTest::lt || bt == BoolTest::gt ||
       86          bt == BoolTest::ne, "canonical test is expected");
       87 #endif
       88 
       89   Node* init_n = cl->init_trip();
       90   Node* limit_n = cl->limit();
       91   if (init_n  != NULL &&  init_n->is_Con() &&
       92       limit_n != NULL && limit_n->is_Con()) {
       93     // Use longs to avoid integer overflow.
       94     int stride_con  = cl->stride_con();
       95     long init_con   = cl->init_trip()->get_int();
       96     long limit_con  = cl->limit()->get_int();
       97     int stride_m    = stride_con - (stride_con > 0 ? 1 : -1);
       98     long trip_count = (limit_con - init_con + stride_m)/stride_con;
       99     if (trip_count > 0 && (julong)trip_count < (julong)max_juint) {
      100       // Set exact trip count.
      101       cl->set_exact_trip_count((uint)trip_count);
      102     }
      103   }
      104 }
      105 
      106 //------------------------------compute_profile_trip_cnt----------------------------
      107 // Compute loop trip count from profile data as
      108 //    (backedge_count + loop_exit_count) / loop_exit_count
      109 void IdealLoopTree::compute_profile_trip_cnt( PhaseIdealLoop *phase ) {
      110   if (!_head->is_CountedLoop()) {
      111     return;
      112   }
      113   CountedLoopNode* head = _head->as_CountedLoop();
      114   if (head->profile_trip_cnt() != COUNT_UNKNOWN) {
      115     return; // Already computed
      116   }
      117   float trip_cnt = (float)max_jint; // default is big
      118 
      119   Node* back = head->in(LoopNode::LoopBackControl);
      120   while (back != head) {
      121     if ((back->Opcode() == Op_IfTrue || back->Opcode() == Op_IfFalse) &&
      122         back->in(0) &&
      123         back->in(0)->is_If() &&
      124         back->in(0)->as_If()->_fcnt != COUNT_UNKNOWN &&
      125         back->in(0)->as_If()->_prob != PROB_UNKNOWN) {
      126       break;
      127     }
      128     back = phase->idom(back);
      129   }
      130   if (back != head) {
      131     assert((back->Opcode() == Op_IfTrue || back->Opcode() == Op_IfFalse) &&
      132            back->in(0), "if-projection exists");
      133     IfNode* back_if = back->in(0)->as_If();
      134     float loop_back_cnt = back_if->_fcnt * back_if->_prob;
      135 
      136     // Now compute a loop exit count
      137     float loop_exit_cnt = 0.0f;
      138     for( uint i = 0; i < _body.size(); i++ ) {
      139       Node *n = _body[i];
      140       if( n->is_If() ) {
      141         IfNode *iff = n->as_If();
      142         if( iff->_fcnt != COUNT_UNKNOWN && iff->_prob != PROB_UNKNOWN ) {
      143           Node *exit = is_loop_exit(iff);
      144           if( exit ) {
      145             float exit_prob = iff->_prob;
      146             if (exit->Opcode() == Op_IfFalse) exit_prob = 1.0 - exit_prob;
      147             if (exit_prob > PROB_MIN) {
      148               float exit_cnt = iff->_fcnt * exit_prob;
      149               loop_exit_cnt += exit_cnt;
      150             }
      151           }
      152         }
      153       }
      154     }
      155     if (loop_exit_cnt > 0.0f) {
      156       trip_cnt = (loop_back_cnt + loop_exit_cnt) / loop_exit_cnt;
      157     } else {
      158       // No exit count so use
      159       trip_cnt = loop_back_cnt;
      160     }
      161   }
      162 #ifndef PRODUCT
      163   if (TraceProfileTripCount) {
      164     tty->print_cr("compute_profile_trip_cnt  lp: %d cnt: %f\n", head->_idx, trip_cnt);
      165   }
      166 #endif
      167   head->set_profile_trip_cnt(trip_cnt);
      168 }
      169 
      170 //---------------------is_invariant_addition-----------------------------
      171 // Return nonzero index of invariant operand for an Add or Sub
      172 // of (nonconstant) invariant and variant values. Helper for reassociate_invariants.
      173 int IdealLoopTree::is_invariant_addition(Node* n, PhaseIdealLoop *phase) {
      174   int op = n->Opcode();
      175   if (op == Op_AddI || op == Op_SubI) {
      176     bool in1_invar = this->is_invariant(n->in(1));
      177     bool in2_invar = this->is_invariant(n->in(2));
      178     if (in1_invar && !in2_invar) return 1;
      179     if (!in1_invar && in2_invar) return 2;
      180   }
      181   return 0;
      182 }
      183 
      184 //---------------------reassociate_add_sub-----------------------------
      185 // Reassociate invariant add and subtract expressions:
      186 //
      187 // inv1 + (x + inv2)  =>  ( inv1 + inv2) + x
      188 // (x + inv2) + inv1  =>  ( inv1 + inv2) + x
      189 // inv1 + (x - inv2)  =>  ( inv1 - inv2) + x
      190 // inv1 - (inv2 - x)  =>  ( inv1 - inv2) + x
      191 // (x + inv2) - inv1  =>  (-inv1 + inv2) + x
      192 // (x - inv2) + inv1  =>  ( inv1 - inv2) + x
      193 // (x - inv2) - inv1  =>  (-inv1 - inv2) + x
      194 // inv1 + (inv2 - x)  =>  ( inv1 + inv2) - x
      195 // inv1 - (x - inv2)  =>  ( inv1 + inv2) - x
      196 // (inv2 - x) + inv1  =>  ( inv1 + inv2) - x
      197 // (inv2 - x) - inv1  =>  (-inv1 + inv2) - x
      198 // inv1 - (x + inv2)  =>  ( inv1 - inv2) - x
      199 //
      200 Node* IdealLoopTree::reassociate_add_sub(Node* n1, PhaseIdealLoop *phase) {
      201   if (!n1->is_Add() && !n1->is_Sub() || n1->outcnt() == 0) return NULL;
      202   if (is_invariant(n1)) return NULL;
      203   int inv1_idx = is_invariant_addition(n1, phase);
      204   if (!inv1_idx) return NULL;
      205   // Don't mess with add of constant (igvn moves them to expression tree root.)
      206   if (n1->is_Add() && n1->in(2)->is_Con()) return NULL;
      207   Node* inv1 = n1->in(inv1_idx);
      208   Node* n2 = n1->in(3 - inv1_idx);
      209   int inv2_idx = is_invariant_addition(n2, phase);
      210   if (!inv2_idx) return NULL;
      211   Node* x    = n2->in(3 - inv2_idx);
      212   Node* inv2 = n2->in(inv2_idx);
      213 
      214   bool neg_x    = n2->is_Sub() && inv2_idx == 1;
      215   bool neg_inv2 = n2->is_Sub() && inv2_idx == 2;
      216   bool neg_inv1 = n1->is_Sub() && inv1_idx == 2;
      217   if (n1->is_Sub() && inv1_idx == 1) {
      218     neg_x    = !neg_x;
      219     neg_inv2 = !neg_inv2;
      220   }
      221   Node* inv1_c = phase->get_ctrl(inv1);
      222   Node* inv2_c = phase->get_ctrl(inv2);
      223   Node* n_inv1;
      224   if (neg_inv1) {
      225     Node *zero = phase->_igvn.intcon(0);
      226     phase->set_ctrl(zero, phase->C->root());
      227     n_inv1 = new (phase->C, 3) SubINode(zero, inv1);
      228     phase->register_new_node(n_inv1, inv1_c);
      229   } else {
      230     n_inv1 = inv1;
      231   }
      232   Node* inv;
      233   if (neg_inv2) {
      234     inv = new (phase->C, 3) SubINode(n_inv1, inv2);
      235   } else {
      236     inv = new (phase->C, 3) AddINode(n_inv1, inv2);
      237   }
      238   phase->register_new_node(inv, phase->get_early_ctrl(inv));
      239 
      240   Node* addx;
      241   if (neg_x) {
      242     addx = new (phase->C, 3) SubINode(inv, x);
      243   } else {
      244     addx = new (phase->C, 3) AddINode(x, inv);
      245   }
      246   phase->register_new_node(addx, phase->get_ctrl(x));
      247   phase->_igvn.replace_node(n1, addx);
      248   assert(phase->get_loop(phase->get_ctrl(n1)) == this, "");
      249   _body.yank(n1);
      250   return addx;
      251 }
      252 
      253 //---------------------reassociate_invariants-----------------------------
      254 // Reassociate invariant expressions:
      255 void IdealLoopTree::reassociate_invariants(PhaseIdealLoop *phase) {
      256   for (int i = _body.size() - 1; i >= 0; i--) {
      257     Node *n = _body.at(i);
      258     for (int j = 0; j < 5; j++) {
      259       Node* nn = reassociate_add_sub(n, phase);
      260       if (nn == NULL) break;
      261       n = nn; // again
      262     };
      263   }
      264 }
      265 
      266 //------------------------------policy_peeling---------------------------------
      267 // Return TRUE or FALSE if the loop should be peeled or not.  Peel if we can
      268 // make some loop-invariant test (usually a null-check) happen before the loop.
      269 bool IdealLoopTree::policy_peeling( PhaseIdealLoop *phase ) const {
      270   Node *test = ((IdealLoopTree*)this)->tail();
      271   int  body_size = ((IdealLoopTree*)this)->_body.size();
      272   int  uniq      = phase->C->unique();
      273   // Peeling does loop cloning which can result in O(N^2) node construction
      274   if( body_size > 255 /* Prevent overflow for large body_size */
      275       || (body_size * body_size + uniq > MaxNodeLimit) ) {
      276     return false;           // too large to safely clone
      277   }
      278   while( test != _head ) {      // Scan till run off top of loop
      279     if( test->is_If() ) {       // Test?
      280       Node *ctrl = phase->get_ctrl(test->in(1));
      281       if (ctrl->is_top())
      282         return false;           // Found dead test on live IF?  No peeling!
      283       // Standard IF only has one input value to check for loop invariance
      284       assert( test->Opcode() == Op_If || test->Opcode() == Op_CountedLoopEnd, "Check this code when new subtype is added");
      285       // Condition is not a member of this loop?
      286       if( !is_member(phase->get_loop(ctrl)) &&
      287           is_loop_exit(test) )
      288         return true;            // Found reason to peel!
      289     }
      290     // Walk up dominators to loop _head looking for test which is
      291     // executed on every path thru loop.
      292     test = phase->idom(test);
      293   }
      294   return false;
      295 }
      296 
      297 //------------------------------peeled_dom_test_elim---------------------------
      298 // If we got the effect of peeling, either by actually peeling or by making
      299 // a pre-loop which must execute at least once, we can remove all
      300 // loop-invariant dominated tests in the main body.
      301 void PhaseIdealLoop::peeled_dom_test_elim( IdealLoopTree *loop, Node_List &old_new ) {
      302   bool progress = true;
      303   while( progress ) {
      304     progress = false;           // Reset for next iteration
      305     Node *prev = loop->_head->in(LoopNode::LoopBackControl);//loop->tail();
      306     Node *test = prev->in(0);
      307     while( test != loop->_head ) { // Scan till run off top of loop
      308 
      309       int p_op = prev->Opcode();
      310       if( (p_op == Op_IfFalse || p_op == Op_IfTrue) &&
      311           test->is_If() &&      // Test?
      312           !test->in(1)->is_Con() && // And not already obvious?
      313           // Condition is not a member of this loop?
      314           !loop->is_member(get_loop(get_ctrl(test->in(1))))){
      315         // Walk loop body looking for instances of this test
      316         for( uint i = 0; i < loop->_body.size(); i++ ) {
      317           Node *n = loop->_body.at(i);
      318           if( n->is_If() && n->in(1) == test->in(1) /*&& n != loop->tail()->in(0)*/ ) {
      319             // IfNode was dominated by version in peeled loop body
      320             progress = true;
      321             dominated_by( old_new[prev->_idx], n );
      322           }
      323         }
      324       }
      325       prev = test;
      326       test = idom(test);
      327     } // End of scan tests in loop
      328 
      329   } // End of while( progress )
      330 }
      331 
      332 //------------------------------do_peeling-------------------------------------
      333 // Peel the first iteration of the given loop.
      334 // Step 1: Clone the loop body.  The clone becomes the peeled iteration.
      335 //         The pre-loop illegally has 2 control users (old & new loops).
      336 // Step 2: Make the old-loop fall-in edges point to the peeled iteration.
      337 //         Do this by making the old-loop fall-in edges act as if they came
      338 //         around the loopback from the prior iteration (follow the old-loop
      339 //         backedges) and then map to the new peeled iteration.  This leaves
      340 //         the pre-loop with only 1 user (the new peeled iteration), but the
      341 //         peeled-loop backedge has 2 users.
      342 // Step 3: Cut the backedge on the clone (so its not a loop) and remove the
      343 //         extra backedge user.
      344 //
      345 //                   orig
      346 //
      347 //                  stmt1
      348 //                    |
      349 //                    v
      350 //              loop predicate
      351 //                    |
      352 //                    v
      353 //                   loop<----+
      354 //                     |      |
      355 //                   stmt2    |
      356 //                     |      |
      357 //                     v      |
      358 //                    if      ^
      359 //                   / \      |
      360 //                  /   \     |
      361 //                 v     v    |
      362 //               false true   |
      363 //               /       \    |
      364 //              /         ----+
      365 //             |
      366 //             v
      367 //           exit
      368 //
      369 //
      370 //            after clone loop
      371 //
      372 //                   stmt1
      373 //                     |
      374 //                     v
      375 //               loop predicate
      376 //                 /       \
      377 //        clone   /         \   orig
      378 //               /           \
      379 //              /             \
      380 //             v               v
      381 //   +---->loop clone          loop<----+
      382 //   |      |                    |      |
      383 //   |    stmt2 clone          stmt2    |
      384 //   |      |                    |      |
      385 //   |      v                    v      |
      386 //   ^      if clone            If      ^
      387 //   |      / \                / \      |
      388 //   |     /   \              /   \     |
      389 //   |    v     v            v     v    |
      390 //   |    true  false      false true   |
      391 //   |    /         \      /       \    |
      392 //   +----           \    /         ----+
      393 //                    \  /
      394 //                    1v v2
      395 //                  region
      396 //                     |
      397 //                     v
      398 //                   exit
      399 //
      400 //
      401 //         after peel and predicate move
      402 //
      403 //                   stmt1
      404 //                    /
      405 //                   /
      406 //        clone     /            orig
      407 //                 /
      408 //                /              +----------+
      409 //               /               |          |
      410 //              /          loop predicate   |
      411 //             /                 |          |
      412 //            v                  v          |
      413 //   TOP-->loop clone          loop<----+   |
      414 //          |                    |      |   |
      415 //        stmt2 clone          stmt2    |   |
      416 //          |                    |      |   ^
      417 //          v                    v      |   |
      418 //          if clone            If      ^   |
      419 //          / \                / \      |   |
      420 //         /   \              /   \     |   |
      421 //        v     v            v     v    |   |
      422 //      true   false      false  true   |   |
      423 //        |         \      /       \    |   |
      424 //        |          \    /         ----+   ^
      425 //        |           \  /                  |
      426 //        |           1v v2                 |
      427 //        v         region                  |
      428 //        |            |                    |
      429 //        |            v                    |
      430 //        |          exit                   |
      431 //        |                                 |
      432 //        +--------------->-----------------+
      433 //
      434 //
      435 //              final graph
      436 //
      437 //                  stmt1
      438 //                    |
      439 //                    v
      440 //                  stmt2 clone
      441 //                    |
      442 //                    v
      443 //                   if clone
      444 //                  / |
      445 //                 /  |
      446 //                v   v
      447 //            false  true
      448 //             |      |
      449 //             |      v
      450 //             | loop predicate
      451 //             |      |
      452 //             |      v
      453 //             |     loop<----+
      454 //             |      |       |
      455 //             |    stmt2     |
      456 //             |      |       |
      457 //             |      v       |
      458 //             v      if      ^
      459 //             |     /  \     |
      460 //             |    /    \    |
      461 //             |   v     v    |
      462 //             | false  true  |
      463 //             |  |        \  |
      464 //             v  v         --+
      465 //            region
      466 //              |
      467 //              v
      468 //             exit
      469 //
      470 void PhaseIdealLoop::do_peeling( IdealLoopTree *loop, Node_List &old_new ) {
      471 
      472   C->set_major_progress();
      473   // Peeling a 'main' loop in a pre/main/post situation obfuscates the
      474   // 'pre' loop from the main and the 'pre' can no longer have it's
      475   // iterations adjusted.  Therefore, we need to declare this loop as
      476   // no longer a 'main' loop; it will need new pre and post loops before
      477   // we can do further RCE.
      478 #ifndef PRODUCT
      479   if (TraceLoopOpts) {
      480     tty->print("Peel         ");
      481     loop->dump_head();
      482   }
      483 #endif
      484   Node* head = loop->_head;
      485   bool counted_loop = head->is_CountedLoop();
      486   if (counted_loop) {
      487     CountedLoopNode *cl = head->as_CountedLoop();
      488     assert(cl->trip_count() > 0, "peeling a fully unrolled loop");
      489     cl->set_trip_count(cl->trip_count() - 1);
      490     if (cl->is_main_loop()) {
      491       cl->set_normal_loop();
      492 #ifndef PRODUCT
      493       if (PrintOpto && VerifyLoopOptimizations) {
      494         tty->print("Peeling a 'main' loop; resetting to 'normal' ");
      495         loop->dump_head();
      496       }
      497 #endif
      498     }
      499   }
      500   Node* entry = head->in(LoopNode::EntryControl);
      501 
      502   // Step 1: Clone the loop body.  The clone becomes the peeled iteration.
      503   //         The pre-loop illegally has 2 control users (old & new loops).
      504   clone_loop( loop, old_new, dom_depth(head) );
      505 
      506   // Step 2: Make the old-loop fall-in edges point to the peeled iteration.
      507   //         Do this by making the old-loop fall-in edges act as if they came
      508   //         around the loopback from the prior iteration (follow the old-loop
      509   //         backedges) and then map to the new peeled iteration.  This leaves
      510   //         the pre-loop with only 1 user (the new peeled iteration), but the
      511   //         peeled-loop backedge has 2 users.
      512   Node* new_exit_value = old_new[head->in(LoopNode::LoopBackControl)->_idx];
      513   new_exit_value = move_loop_predicates(entry, new_exit_value, !counted_loop);
      514   _igvn.hash_delete(head);
      515   head->set_req(LoopNode::EntryControl, new_exit_value);
      516   for (DUIterator_Fast jmax, j = head->fast_outs(jmax); j < jmax; j++) {
      517     Node* old = head->fast_out(j);
      518     if (old->in(0) == loop->_head && old->req() == 3 && old->is_Phi()) {
      519       new_exit_value = old_new[old->in(LoopNode::LoopBackControl)->_idx];
      520       if (!new_exit_value )     // Backedge value is ALSO loop invariant?
      521         // Then loop body backedge value remains the same.
      522         new_exit_value = old->in(LoopNode::LoopBackControl);
      523       _igvn.hash_delete(old);
      524       old->set_req(LoopNode::EntryControl, new_exit_value);
      525     }
      526   }
      527 
      528 
      529   // Step 3: Cut the backedge on the clone (so its not a loop) and remove the
      530   //         extra backedge user.
      531   Node* new_head = old_new[head->_idx];
      532   _igvn.hash_delete(new_head);
      533   new_head->set_req(LoopNode::LoopBackControl, C->top());
      534   for (DUIterator_Fast j2max, j2 = new_head->fast_outs(j2max); j2 < j2max; j2++) {
      535     Node* use = new_head->fast_out(j2);
      536     if (use->in(0) == new_head && use->req() == 3 && use->is_Phi()) {
      537       _igvn.hash_delete(use);
      538       use->set_req(LoopNode::LoopBackControl, C->top());
      539     }
      540   }
      541 
      542 
      543   // Step 4: Correct dom-depth info.  Set to loop-head depth.
      544   int dd = dom_depth(head);
      545   set_idom(head, head->in(1), dd);
      546   for (uint j3 = 0; j3 < loop->_body.size(); j3++) {
      547     Node *old = loop->_body.at(j3);
      548     Node *nnn = old_new[old->_idx];
      549     if (!has_ctrl(nnn))
      550       set_idom(nnn, idom(nnn), dd-1);
      551     // While we're at it, remove any SafePoints from the peeled code
      552     if (old->Opcode() == Op_SafePoint) {
      553       Node *nnn = old_new[old->_idx];
      554       lazy_replace(nnn,nnn->in(TypeFunc::Control));
      555     }
      556   }
      557 
      558   // Now force out all loop-invariant dominating tests.  The optimizer
      559   // finds some, but we _know_ they are all useless.
      560   peeled_dom_test_elim(loop,old_new);
      561 
      562   loop->record_for_igvn();
      563 }
      564 
      565 #define EMPTY_LOOP_SIZE 7 // number of nodes in an empty loop
      566 
      567 //------------------------------policy_maximally_unroll------------------------
      568 // Calculate exact loop trip count and return true if loop can be maximally
      569 // unrolled.
      570 bool IdealLoopTree::policy_maximally_unroll( PhaseIdealLoop *phase ) const {
      571   CountedLoopNode *cl = _head->as_CountedLoop();
      572   assert(cl->is_normal_loop(), "");
      573   if (!cl->is_valid_counted_loop())
      574     return false; // Malformed counted loop
      575 
      576   if (!cl->has_exact_trip_count()) {
      577     // Trip count is not exact.
      578     return false;
      579   }
      580 
      581   uint trip_count = cl->trip_count();
      582   // Note, max_juint is used to indicate unknown trip count.
      583   assert(trip_count > 1, "one iteration loop should be optimized out already");
      584   assert(trip_count < max_juint, "exact trip_count should be less than max_uint.");
      585 
      586   // Real policy: if we maximally unroll, does it get too big?
      587   // Allow the unrolled mess to get larger than standard loop
      588   // size.  After all, it will no longer be a loop.
      589   uint body_size    = _body.size();
      590   uint unroll_limit = (uint)LoopUnrollLimit * 4;
      591   assert( (intx)unroll_limit == LoopUnrollLimit * 4, "LoopUnrollLimit must fit in 32bits");
      592   if (trip_count > unroll_limit || body_size > unroll_limit) {
      593     return false;
      594   }
      595 
      596   // Fully unroll a loop with few iterations regardless next
      597   // conditions since following loop optimizations will split
      598   // such loop anyway (pre-main-post).
      599   if (trip_count <= 3)
      600     return true;
      601 
      602   // Take into account that after unroll conjoined heads and tails will fold,
      603   // otherwise policy_unroll() may allow more unrolling than max unrolling.
      604   uint new_body_size = EMPTY_LOOP_SIZE + (body_size - EMPTY_LOOP_SIZE) * trip_count;
      605   uint tst_body_size = (new_body_size - EMPTY_LOOP_SIZE) / trip_count + EMPTY_LOOP_SIZE;
      606   if (body_size != tst_body_size) // Check for int overflow
      607     return false;
      608   if (new_body_size > unroll_limit ||
      609       // Unrolling can result in a large amount of node construction
      610       new_body_size >= MaxNodeLimit - phase->C->unique()) {
      611     return false;
      612   }
      613 
      614   // Do not unroll a loop with String intrinsics code.
      615   // String intrinsics are large and have loops.
      616   for (uint k = 0; k < _body.size(); k++) {
      617     Node* n = _body.at(k);
      618     switch (n->Opcode()) {
      619       case Op_StrComp:
      620       case Op_StrEquals:
      621       case Op_StrIndexOf:
      622       case Op_AryEq: {
      623         return false;
      624       }
      625     } // switch
      626   }
      627 
      628   return true; // Do maximally unroll
      629 }
      630 
      631 
      632 #define MAX_UNROLL 16 // maximum number of unrolls for main loop
      633 
      634 //------------------------------policy_unroll----------------------------------
      635 // Return TRUE or FALSE if the loop should be unrolled or not.  Unroll if
      636 // the loop is a CountedLoop and the body is small enough.
      637 bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const {
      638 
      639   CountedLoopNode *cl = _head->as_CountedLoop();
      640   assert(cl->is_normal_loop() || cl->is_main_loop(), "");
      641 
      642   if (!cl->is_valid_counted_loop())
      643     return false; // Malformed counted loop
      644 
      645   // Protect against over-unrolling.
      646   // After split at least one iteration will be executed in pre-loop.
      647   if (cl->trip_count() <= (uint)(cl->is_normal_loop() ? 2 : 1)) return false;
      648 
      649   int future_unroll_ct = cl->unrolled_count() * 2;
      650   if (future_unroll_ct > MAX_UNROLL) return false;
      651 
      652   // Check for initial stride being a small enough constant
      653   if (abs(cl->stride_con()) > (1<<2)*future_unroll_ct) return false;
      654 
      655   // Don't unroll if the next round of unrolling would push us
      656   // over the expected trip count of the loop.  One is subtracted
      657   // from the expected trip count because the pre-loop normally
      658   // executes 1 iteration.
      659   if (UnrollLimitForProfileCheck > 0 &&
      660       cl->profile_trip_cnt() != COUNT_UNKNOWN &&
      661       future_unroll_ct        > UnrollLimitForProfileCheck &&
      662       (float)future_unroll_ct > cl->profile_trip_cnt() - 1.0) {
      663     return false;
      664   }
      665 
      666   // When unroll count is greater than LoopUnrollMin, don't unroll if:
      667   //   the residual iterations are more than 10% of the trip count
      668   //   and rounds of "unroll,optimize" are not making significant progress
      669   //   Progress defined as current size less than 20% larger than previous size.
      670   if (UseSuperWord && cl->node_count_before_unroll() > 0 &&
      671       future_unroll_ct > LoopUnrollMin &&
      672       (future_unroll_ct - 1) * 10.0 > cl->profile_trip_cnt() &&
      673       1.2 * cl->node_count_before_unroll() < (double)_body.size()) {
      674     return false;
      675   }
      676 
      677   Node *init_n = cl->init_trip();
      678   Node *limit_n = cl->limit();
      679   int stride_con = cl->stride_con();
      680   // Non-constant bounds.
      681   // Protect against over-unrolling when init or/and limit are not constant
      682   // (so that trip_count's init value is maxint) but iv range is known.
      683   if (init_n   == NULL || !init_n->is_Con()  ||
      684       limit_n  == NULL || !limit_n->is_Con()) {
      685     Node* phi = cl->phi();
      686     if (phi != NULL) {
      687       assert(phi->is_Phi() && phi->in(0) == _head, "Counted loop should have iv phi.");
      688       const TypeInt* iv_type = phase->_igvn.type(phi)->is_int();
      689       int next_stride = stride_con * 2; // stride after this unroll
      690       if (next_stride > 0) {
      691         if (iv_type->_lo + next_stride <= iv_type->_lo || // overflow
      692             iv_type->_lo + next_stride >  iv_type->_hi) {
      693           return false;  // over-unrolling
      694         }
      695       } else if (next_stride < 0) {
      696         if (iv_type->_hi + next_stride >= iv_type->_hi || // overflow
      697             iv_type->_hi + next_stride <  iv_type->_lo) {
      698           return false;  // over-unrolling
      699         }
      700       }
      701     }
      702   }
      703 
      704   // After unroll limit will be adjusted: new_limit = limit-stride.
      705   // Bailout if adjustment overflow.
      706   const TypeInt* limit_type = phase->_igvn.type(limit_n)->is_int();
      707   if (stride_con > 0 && ((limit_type->_hi - stride_con) >= limit_type->_hi) ||
      708       stride_con < 0 && ((limit_type->_lo - stride_con) <= limit_type->_lo))
      709     return false;  // overflow
      710 
      711   // Adjust body_size to determine if we unroll or not
      712   uint body_size = _body.size();
      713   // Also count ModL, DivL and MulL which expand mightly
      714   for (uint k = 0; k < _body.size(); k++) {
      715     Node* n = _body.at(k);
      716     switch (n->Opcode()) {
      717       case Op_ModL: body_size += 30; break;
      718       case Op_DivL: body_size += 30; break;
      719       case Op_MulL: body_size += 10; break;
      720       case Op_StrComp:
      721       case Op_StrEquals:
      722       case Op_StrIndexOf:
      723       case Op_AryEq: {
      724         // Do not unroll a loop with String intrinsics code.
      725         // String intrinsics are large and have loops.
      726         return false;
      727       }
      728     } // switch
      729   }
      730 
      731   // Check for being too big
      732   if (body_size > (uint)LoopUnrollLimit) {
      733      // Normal case: loop too big
      734     return false;
      735   }
      736 
      737   // Unroll once!  (Each trip will soon do double iterations)
      738   return true;
      739 }
      740 
      741 //------------------------------policy_align-----------------------------------
      742 // Return TRUE or FALSE if the loop should be cache-line aligned.  Gather the
      743 // expression that does the alignment.  Note that only one array base can be
      744 // aligned in a loop (unless the VM guarantees mutual alignment).  Note that
      745 // if we vectorize short memory ops into longer memory ops, we may want to
      746 // increase alignment.
      747 bool IdealLoopTree::policy_align( PhaseIdealLoop *phase ) const {
      748   return false;
      749 }
      750 
      751 //------------------------------policy_range_check-----------------------------
      752 // Return TRUE or FALSE if the loop should be range-check-eliminated.
      753 // Actually we do iteration-splitting, a more powerful form of RCE.
      754 bool IdealLoopTree::policy_range_check( PhaseIdealLoop *phase ) const {
      755   if (!RangeCheckElimination) return false;
      756 
      757   CountedLoopNode *cl = _head->as_CountedLoop();
      758   // If we unrolled with no intention of doing RCE and we later
      759   // changed our minds, we got no pre-loop.  Either we need to
      760   // make a new pre-loop, or we gotta disallow RCE.
      761   if (cl->is_main_no_pre_loop()) return false; // Disallowed for now.
      762   Node *trip_counter = cl->phi();
      763 
      764   // Check loop body for tests of trip-counter plus loop-invariant vs
      765   // loop-invariant.
      766   for (uint i = 0; i < _body.size(); i++) {
      767     Node *iff = _body[i];
      768     if (iff->Opcode() == Op_If) { // Test?
      769 
      770       // Comparing trip+off vs limit
      771       Node *bol = iff->in(1);
      772       if (bol->req() != 2) continue; // dead constant test
      773       if (!bol->is_Bool()) {
      774         assert(UseLoopPredicate && bol->Opcode() == Op_Conv2B, "predicate check only");
      775         continue;
      776       }
      777       if (bol->as_Bool()->_test._test == BoolTest::ne)
      778         continue; // not RC
      779 
      780       Node *cmp = bol->in(1);
      781 
      782       Node *rc_exp = cmp->in(1);
      783       Node *limit = cmp->in(2);
      784 
      785       Node *limit_c = phase->get_ctrl(limit);
      786       if( limit_c == phase->C->top() )
      787         return false;           // Found dead test on live IF?  No RCE!
      788       if( is_member(phase->get_loop(limit_c) ) ) {
      789         // Compare might have operands swapped; commute them
      790         rc_exp = cmp->in(2);
      791         limit  = cmp->in(1);
      792         limit_c = phase->get_ctrl(limit);
      793         if( is_member(phase->get_loop(limit_c) ) )
      794           continue;             // Both inputs are loop varying; cannot RCE
      795       }
      796 
      797       if (!phase->is_scaled_iv_plus_offset(rc_exp, trip_counter, NULL, NULL)) {
      798         continue;
      799       }
      800       // Yeah!  Found a test like 'trip+off vs limit'
      801       // Test is an IfNode, has 2 projections.  If BOTH are in the loop
      802       // we need loop unswitching instead of iteration splitting.
      803       if( is_loop_exit(iff) )
      804         return true;            // Found reason to split iterations
      805     } // End of is IF
      806   }
      807 
      808   return false;
      809 }
      810 
      811 //------------------------------policy_peel_only-------------------------------
      812 // Return TRUE or FALSE if the loop should NEVER be RCE'd or aligned.  Useful
      813 // for unrolling loops with NO array accesses.
      814 bool IdealLoopTree::policy_peel_only( PhaseIdealLoop *phase ) const {
      815 
      816   for( uint i = 0; i < _body.size(); i++ )
      817     if( _body[i]->is_Mem() )
      818       return false;
      819 
      820   // No memory accesses at all!
      821   return true;
      822 }
      823 
      824 //------------------------------clone_up_backedge_goo--------------------------
      825 // If Node n lives in the back_ctrl block and cannot float, we clone a private
      826 // version of n in preheader_ctrl block and return that, otherwise return n.
      827 Node *PhaseIdealLoop::clone_up_backedge_goo( Node *back_ctrl, Node *preheader_ctrl, Node *n ) {
      828   if( get_ctrl(n) != back_ctrl ) return n;
      829 
      830   Node *x = NULL;               // If required, a clone of 'n'
      831   // Check for 'n' being pinned in the backedge.
      832   if( n->in(0) && n->in(0) == back_ctrl ) {
      833     x = n->clone();             // Clone a copy of 'n' to preheader
      834     x->set_req( 0, preheader_ctrl ); // Fix x's control input to preheader
      835   }
      836 
      837   // Recursive fixup any other input edges into x.
      838   // If there are no changes we can just return 'n', otherwise
      839   // we need to clone a private copy and change it.
      840   for( uint i = 1; i < n->req(); i++ ) {
      841     Node *g = clone_up_backedge_goo( back_ctrl, preheader_ctrl, n->in(i) );
      842     if( g != n->in(i) ) {
      843       if( !x )
      844         x = n->clone();
      845       x->set_req(i, g);
      846     }
      847   }
      848   if( x ) {                     // x can legally float to pre-header location
      849     register_new_node( x, preheader_ctrl );
      850     return x;
      851   } else {                      // raise n to cover LCA of uses
      852     set_ctrl( n, find_non_split_ctrl(back_ctrl->in(0)) );
      853   }
      854   return n;
      855 }
      856 
      857 //------------------------------insert_pre_post_loops--------------------------
      858 // Insert pre and post loops.  If peel_only is set, the pre-loop can not have
      859 // more iterations added.  It acts as a 'peel' only, no lower-bound RCE, no
      860 // alignment.  Useful to unroll loops that do no array accesses.
      861 void PhaseIdealLoop::insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_new, bool peel_only ) {
      862 
      863 #ifndef PRODUCT
      864   if (TraceLoopOpts) {
      865     if (peel_only)
      866       tty->print("PeelMainPost ");
      867     else
      868       tty->print("PreMainPost  ");
      869     loop->dump_head();
      870   }
      871 #endif
      872   C->set_major_progress();
      873 
      874   // Find common pieces of the loop being guarded with pre & post loops
      875   CountedLoopNode *main_head = loop->_head->as_CountedLoop();
      876   assert( main_head->is_normal_loop(), "" );
      877   CountedLoopEndNode *main_end = main_head->loopexit();
      878   assert( main_end->outcnt() == 2, "1 true, 1 false path only" );
      879   uint dd_main_head = dom_depth(main_head);
      880   uint max = main_head->outcnt();
      881 
      882   Node *pre_header= main_head->in(LoopNode::EntryControl);
      883   Node *init      = main_head->init_trip();
      884   Node *incr      = main_end ->incr();
      885   Node *limit     = main_end ->limit();
      886   Node *stride    = main_end ->stride();
      887   Node *cmp       = main_end ->cmp_node();
      888   BoolTest::mask b_test = main_end->test_trip();
      889 
      890   // Need only 1 user of 'bol' because I will be hacking the loop bounds.
      891   Node *bol = main_end->in(CountedLoopEndNode::TestValue);
      892   if( bol->outcnt() != 1 ) {
      893     bol = bol->clone();
      894     register_new_node(bol,main_end->in(CountedLoopEndNode::TestControl));
      895     _igvn.hash_delete(main_end);
      896     main_end->set_req(CountedLoopEndNode::TestValue, bol);
      897   }
      898   // Need only 1 user of 'cmp' because I will be hacking the loop bounds.
      899   if( cmp->outcnt() != 1 ) {
      900     cmp = cmp->clone();
      901     register_new_node(cmp,main_end->in(CountedLoopEndNode::TestControl));
      902     _igvn.hash_delete(bol);
      903     bol->set_req(1, cmp);
      904   }
      905 
      906   //------------------------------
      907   // Step A: Create Post-Loop.
      908   Node* main_exit = main_end->proj_out(false);
      909   assert( main_exit->Opcode() == Op_IfFalse, "" );
      910   int dd_main_exit = dom_depth(main_exit);
      911 
      912   // Step A1: Clone the loop body.  The clone becomes the post-loop.  The main
      913   // loop pre-header illegally has 2 control users (old & new loops).
      914   clone_loop( loop, old_new, dd_main_exit );
      915   assert( old_new[main_end ->_idx]->Opcode() == Op_CountedLoopEnd, "" );
      916   CountedLoopNode *post_head = old_new[main_head->_idx]->as_CountedLoop();
      917   post_head->set_post_loop(main_head);
      918 
      919   // Reduce the post-loop trip count.
      920   CountedLoopEndNode* post_end = old_new[main_end ->_idx]->as_CountedLoopEnd();
      921   post_end->_prob = PROB_FAIR;
      922 
      923   // Build the main-loop normal exit.
      924   IfFalseNode *new_main_exit = new (C, 1) IfFalseNode(main_end);
      925   _igvn.register_new_node_with_optimizer( new_main_exit );
      926   set_idom(new_main_exit, main_end, dd_main_exit );
      927   set_loop(new_main_exit, loop->_parent);
      928 
      929   // Step A2: Build a zero-trip guard for the post-loop.  After leaving the
      930   // main-loop, the post-loop may not execute at all.  We 'opaque' the incr
      931   // (the main-loop trip-counter exit value) because we will be changing
      932   // the exit value (via unrolling) so we cannot constant-fold away the zero
      933   // trip guard until all unrolling is done.
      934   Node *zer_opaq = new (C, 2) Opaque1Node(C, incr);
      935   Node *zer_cmp  = new (C, 3) CmpINode( zer_opaq, limit );
      936   Node *zer_bol  = new (C, 2) BoolNode( zer_cmp, b_test );
      937   register_new_node( zer_opaq, new_main_exit );
      938   register_new_node( zer_cmp , new_main_exit );
      939   register_new_node( zer_bol , new_main_exit );
      940 
      941   // Build the IfNode
      942   IfNode *zer_iff = new (C, 2) IfNode( new_main_exit, zer_bol, PROB_FAIR, COUNT_UNKNOWN );
      943   _igvn.register_new_node_with_optimizer( zer_iff );
      944   set_idom(zer_iff, new_main_exit, dd_main_exit);
      945   set_loop(zer_iff, loop->_parent);
      946 
      947   // Plug in the false-path, taken if we need to skip post-loop
      948   _igvn.hash_delete( main_exit );
      949   main_exit->set_req(0, zer_iff);
      950   _igvn._worklist.push(main_exit);
      951   set_idom(main_exit, zer_iff, dd_main_exit);
      952   set_idom(main_exit->unique_out(), zer_iff, dd_main_exit);
      953   // Make the true-path, must enter the post loop
      954   Node *zer_taken = new (C, 1) IfTrueNode( zer_iff );
      955   _igvn.register_new_node_with_optimizer( zer_taken );
      956   set_idom(zer_taken, zer_iff, dd_main_exit);
      957   set_loop(zer_taken, loop->_parent);
      958   // Plug in the true path
      959   _igvn.hash_delete( post_head );
      960   post_head->set_req(LoopNode::EntryControl, zer_taken);
      961   set_idom(post_head, zer_taken, dd_main_exit);
      962 
      963   // Step A3: Make the fall-in values to the post-loop come from the
      964   // fall-out values of the main-loop.
      965   for (DUIterator_Fast imax, i = main_head->fast_outs(imax); i < imax; i++) {
      966     Node* main_phi = main_head->fast_out(i);
      967     if( main_phi->is_Phi() && main_phi->in(0) == main_head && main_phi->outcnt() >0 ) {
      968       Node *post_phi = old_new[main_phi->_idx];
      969       Node *fallmain  = clone_up_backedge_goo(main_head->back_control(),
      970                                               post_head->init_control(),
      971                                               main_phi->in(LoopNode::LoopBackControl));
      972       _igvn.hash_delete(post_phi);
      973       post_phi->set_req( LoopNode::EntryControl, fallmain );
      974     }
      975   }
      976 
      977   // Update local caches for next stanza
      978   main_exit = new_main_exit;
      979 
      980 
      981   //------------------------------
      982   // Step B: Create Pre-Loop.
      983 
      984   // Step B1: Clone the loop body.  The clone becomes the pre-loop.  The main
      985   // loop pre-header illegally has 2 control users (old & new loops).
      986   clone_loop( loop, old_new, dd_main_head );
      987   CountedLoopNode*    pre_head = old_new[main_head->_idx]->as_CountedLoop();
      988   CountedLoopEndNode* pre_end  = old_new[main_end ->_idx]->as_CountedLoopEnd();
      989   pre_head->set_pre_loop(main_head);
      990   Node *pre_incr = old_new[incr->_idx];
      991 
      992   // Reduce the pre-loop trip count.
      993   pre_end->_prob = PROB_FAIR;
      994 
      995   // Find the pre-loop normal exit.
      996   Node* pre_exit = pre_end->proj_out(false);
      997   assert( pre_exit->Opcode() == Op_IfFalse, "" );
      998   IfFalseNode *new_pre_exit = new (C, 1) IfFalseNode(pre_end);
      999   _igvn.register_new_node_with_optimizer( new_pre_exit );
     1000   set_idom(new_pre_exit, pre_end, dd_main_head);
     1001   set_loop(new_pre_exit, loop->_parent);
     1002 
     1003   // Step B2: Build a zero-trip guard for the main-loop.  After leaving the
     1004   // pre-loop, the main-loop may not execute at all.  Later in life this
     1005   // zero-trip guard will become the minimum-trip guard when we unroll
     1006   // the main-loop.
     1007   Node *min_opaq = new (C, 2) Opaque1Node(C, limit);
     1008   Node *min_cmp  = new (C, 3) CmpINode( pre_incr, min_opaq );
     1009   Node *min_bol  = new (C, 2) BoolNode( min_cmp, b_test );
     1010   register_new_node( min_opaq, new_pre_exit );
     1011   register_new_node( min_cmp , new_pre_exit );
     1012   register_new_node( min_bol , new_pre_exit );
     1013 
     1014   // Build the IfNode (assume the main-loop is executed always).
     1015   IfNode *min_iff = new (C, 2) IfNode( new_pre_exit, min_bol, PROB_ALWAYS, COUNT_UNKNOWN );
     1016   _igvn.register_new_node_with_optimizer( min_iff );
     1017   set_idom(min_iff, new_pre_exit, dd_main_head);
     1018   set_loop(min_iff, loop->_parent);
     1019 
     1020   // Plug in the false-path, taken if we need to skip main-loop
     1021   _igvn.hash_delete( pre_exit );
     1022   pre_exit->set_req(0, min_iff);
     1023   set_idom(pre_exit, min_iff, dd_main_head);
     1024   set_idom(pre_exit->unique_out(), min_iff, dd_main_head);
     1025   // Make the true-path, must enter the main loop
     1026   Node *min_taken = new (C, 1) IfTrueNode( min_iff );
     1027   _igvn.register_new_node_with_optimizer( min_taken );
     1028   set_idom(min_taken, min_iff, dd_main_head);
     1029   set_loop(min_taken, loop->_parent);
     1030   // Plug in the true path
     1031   _igvn.hash_delete( main_head );
     1032   main_head->set_req(LoopNode::EntryControl, min_taken);
     1033   set_idom(main_head, min_taken, dd_main_head);
     1034 
     1035   // Step B3: Make the fall-in values to the main-loop come from the
     1036   // fall-out values of the pre-loop.
     1037   for (DUIterator_Fast i2max, i2 = main_head->fast_outs(i2max); i2 < i2max; i2++) {
     1038     Node* main_phi = main_head->fast_out(i2);
     1039     if( main_phi->is_Phi() && main_phi->in(0) == main_head && main_phi->outcnt() > 0 ) {
     1040       Node *pre_phi = old_new[main_phi->_idx];
     1041       Node *fallpre  = clone_up_backedge_goo(pre_head->back_control(),
     1042                                              main_head->init_control(),
     1043                                              pre_phi->in(LoopNode::LoopBackControl));
     1044       _igvn.hash_delete(main_phi);
     1045       main_phi->set_req( LoopNode::EntryControl, fallpre );
     1046     }
     1047   }
     1048 
     1049   // Step B4: Shorten the pre-loop to run only 1 iteration (for now).
     1050   // RCE and alignment may change this later.
     1051   Node *cmp_end = pre_end->cmp_node();
     1052   assert( cmp_end->in(2) == limit, "" );
     1053   Node *pre_limit = new (C, 3) AddINode( init, stride );
     1054 
     1055   // Save the original loop limit in this Opaque1 node for
     1056   // use by range check elimination.
     1057   Node *pre_opaq  = new (C, 3) Opaque1Node(C, pre_limit, limit);
     1058 
     1059   register_new_node( pre_limit, pre_head->in(0) );
     1060   register_new_node( pre_opaq , pre_head->in(0) );
     1061 
     1062   // Since no other users of pre-loop compare, I can hack limit directly
     1063   assert( cmp_end->outcnt() == 1, "no other users" );
     1064   _igvn.hash_delete(cmp_end);
     1065   cmp_end->set_req(2, peel_only ? pre_limit : pre_opaq);
     1066 
     1067   // Special case for not-equal loop bounds:
     1068   // Change pre loop test, main loop test, and the
     1069   // main loop guard test to use lt or gt depending on stride
     1070   // direction:
     1071   // positive stride use <
     1072   // negative stride use >
     1073   //
     1074   // not-equal test is kept for post loop to handle case
     1075   // when init > limit when stride > 0 (and reverse).
     1076 
     1077   if (pre_end->in(CountedLoopEndNode::TestValue)->as_Bool()->_test._test == BoolTest::ne) {
     1078 
     1079     BoolTest::mask new_test = (main_end->stride_con() > 0) ? BoolTest::lt : BoolTest::gt;
     1080     // Modify pre loop end condition
     1081     Node* pre_bol = pre_end->in(CountedLoopEndNode::TestValue)->as_Bool();
     1082     BoolNode* new_bol0 = new (C, 2) BoolNode(pre_bol->in(1), new_test);
     1083     register_new_node( new_bol0, pre_head->in(0) );
     1084     _igvn.hash_delete(pre_end);
     1085     pre_end->set_req(CountedLoopEndNode::TestValue, new_bol0);
     1086     // Modify main loop guard condition
     1087     assert(min_iff->in(CountedLoopEndNode::TestValue) == min_bol, "guard okay");
     1088     BoolNode* new_bol1 = new (C, 2) BoolNode(min_bol->in(1), new_test);
     1089     register_new_node( new_bol1, new_pre_exit );
     1090     _igvn.hash_delete(min_iff);
     1091     min_iff->set_req(CountedLoopEndNode::TestValue, new_bol1);
     1092     // Modify main loop end condition
     1093     BoolNode* main_bol = main_end->in(CountedLoopEndNode::TestValue)->as_Bool();
     1094     BoolNode* new_bol2 = new (C, 2) BoolNode(main_bol->in(1), new_test);
     1095     register_new_node( new_bol2, main_end->in(CountedLoopEndNode::TestControl) );
     1096     _igvn.hash_delete(main_end);
     1097     main_end->set_req(CountedLoopEndNode::TestValue, new_bol2);
     1098   }
     1099 
     1100   // Flag main loop
     1101   main_head->set_main_loop();
     1102   if( peel_only ) main_head->set_main_no_pre_loop();
     1103 
     1104   // Subtract a trip count for the pre-loop.
     1105   main_head->set_trip_count(main_head->trip_count() - 1);
     1106 
     1107   // It's difficult to be precise about the trip-counts
     1108   // for the pre/post loops.  They are usually very short,
     1109   // so guess that 4 trips is a reasonable value.
     1110   post_head->set_profile_trip_cnt(4.0);
     1111   pre_head->set_profile_trip_cnt(4.0);
     1112 
     1113   // Now force out all loop-invariant dominating tests.  The optimizer
     1114   // finds some, but we _know_ they are all useless.
     1115   peeled_dom_test_elim(loop,old_new);
     1116 }
     1117 
     1118 //------------------------------is_invariant-----------------------------
     1119 // Return true if n is invariant
     1120 bool IdealLoopTree::is_invariant(Node* n) const {
     1121   Node *n_c = _phase->has_ctrl(n) ? _phase->get_ctrl(n) : n;
     1122   if (n_c->is_top()) return false;
     1123   return !is_member(_phase->get_loop(n_c));
     1124 }
     1125 
     1126 
     1127 //------------------------------do_unroll--------------------------------------
     1128 // Unroll the loop body one step - make each trip do 2 iterations.
     1129 void PhaseIdealLoop::do_unroll( IdealLoopTree *loop, Node_List &old_new, bool adjust_min_trip ) {
     1130   assert(LoopUnrollLimit, "");
     1131   CountedLoopNode *loop_head = loop->_head->as_CountedLoop();
     1132   CountedLoopEndNode *loop_end = loop_head->loopexit();
     1133   assert(loop_end, "");
     1134 #ifndef PRODUCT
     1135   if (PrintOpto && VerifyLoopOptimizations) {
     1136     tty->print("Unrolling ");
     1137     loop->dump_head();
     1138   } else if (TraceLoopOpts) {
     1139     if (loop_head->trip_count() < (uint)LoopUnrollLimit) {
     1140       tty->print("Unroll %d(%2d) ", loop_head->unrolled_count()*2, loop_head->trip_count());
     1141     } else {
     1142       tty->print("Unroll %d     ", loop_head->unrolled_count()*2);
     1143     }
     1144     loop->dump_head();
     1145   }
     1146 #endif
     1147 
     1148   // Remember loop node count before unrolling to detect
     1149   // if rounds of unroll,optimize are making progress
     1150   loop_head->set_node_count_before_unroll(loop->_body.size());
     1151 
     1152   Node *ctrl  = loop_head->in(LoopNode::EntryControl);
     1153   Node *limit = loop_head->limit();
     1154   Node *init  = loop_head->init_trip();
     1155   Node *stride = loop_head->stride();
     1156 
     1157   Node *opaq = NULL;
     1158   if (adjust_min_trip) {       // If not maximally unrolling, need adjustment
     1159     // Search for zero-trip guard.
     1160     assert( loop_head->is_main_loop(), "" );
     1161     assert( ctrl->Opcode() == Op_IfTrue || ctrl->Opcode() == Op_IfFalse, "" );
     1162     Node *iff = ctrl->in(0);
     1163     assert( iff->Opcode() == Op_If, "" );
     1164     Node *bol = iff->in(1);
     1165     assert( bol->Opcode() == Op_Bool, "" );
     1166     Node *cmp = bol->in(1);
     1167     assert( cmp->Opcode() == Op_CmpI, "" );
     1168     opaq = cmp->in(2);
     1169     // Occasionally it's possible for a zero-trip guard Opaque1 node to be
     1170     // optimized away and then another round of loop opts attempted.
     1171     // We can not optimize this particular loop in that case.
     1172     if (opaq->Opcode() != Op_Opaque1)
     1173       return; // Cannot find zero-trip guard!  Bail out!
     1174     // Zero-trip test uses an 'opaque' node which is not shared.
     1175     assert(opaq->outcnt() == 1 && opaq->in(1) == limit, "");
     1176   }
     1177 
     1178   C->set_major_progress();
     1179 
     1180   Node* new_limit = NULL;
     1181   if (UnrollLimitCheck) {
     1182     int stride_con = stride->get_int();
     1183     int stride_p = (stride_con > 0) ? stride_con : -stride_con;
     1184     uint old_trip_count = loop_head->trip_count();
     1185     // Verify that unroll policy result is still valid.
     1186     assert(old_trip_count > 1 &&
     1187            (!adjust_min_trip || stride_p <= (1<<3)*loop_head->unrolled_count()), "sanity");
     1188 
     1189     // Adjust loop limit to keep valid iterations number after unroll.
     1190     // Use (limit - stride) instead of (((limit - init)/stride) & (-2))*stride
     1191     // which may overflow.
     1192     if (!adjust_min_trip) {
     1193       assert(old_trip_count > 1 && (old_trip_count & 1) == 0,
     1194              "odd trip count for maximally unroll");
     1195       // Don't need to adjust limit for maximally unroll since trip count is even.
     1196     } else if (loop_head->has_exact_trip_count() && init->is_Con()) {
     1197       // Loop's limit is constant. Loop's init could be constant when pre-loop
     1198       // become peeled iteration.
     1199       long init_con = init->get_int();
     1200       // We can keep old loop limit if iterations count stays the same:
     1201       //   old_trip_count == new_trip_count * 2
     1202       // Note: since old_trip_count >= 2 then new_trip_count >= 1
     1203       // so we also don't need to adjust zero trip test.
     1204       long limit_con  = limit->get_int();
     1205       // (stride_con*2) not overflow since stride_con <= 8.
     1206       int new_stride_con = stride_con * 2;
     1207       int stride_m    = new_stride_con - (stride_con > 0 ? 1 : -1);
     1208       long trip_count = (limit_con - init_con + stride_m)/new_stride_con;
     1209       // New trip count should satisfy next conditions.
     1210       assert(trip_count > 0 && (julong)trip_count < (julong)max_juint/2, "sanity");
     1211       uint new_trip_count = (uint)trip_count;
     1212       adjust_min_trip = (old_trip_count != new_trip_count*2);
     1213     }
     1214 
     1215     if (adjust_min_trip) {
     1216       // Step 2: Adjust the trip limit if it is called for.
     1217       // The adjustment amount is -stride. Need to make sure if the
     1218       // adjustment underflows or overflows, then the main loop is skipped.
     1219       Node* cmp = loop_end->cmp_node();
     1220       assert(cmp->in(2) == limit, "sanity");
     1221       assert(opaq != NULL && opaq->in(1) == limit, "sanity");
     1222 
     1223       // Verify that policy_unroll result is still valid.
     1224       const TypeInt* limit_type = _igvn.type(limit)->is_int();
     1225       assert(stride_con > 0 && ((limit_type->_hi - stride_con) < limit_type->_hi) ||
     1226              stride_con < 0 && ((limit_type->_lo - stride_con) > limit_type->_lo), "sanity");
     1227 
     1228       if (limit->is_Con()) {
     1229         // The check in policy_unroll and the assert above guarantee
     1230         // no underflow if limit is constant.
     1231         new_limit = _igvn.intcon(limit->get_int() - stride_con);
     1232         set_ctrl(new_limit, C->root());
     1233       } else {
     1234         // Limit is not constant.
     1235         if (loop_head->unrolled_count() == 1) { // only for first unroll
     1236           // Separate limit by Opaque node in case it is an incremented
     1237           // variable from previous loop to avoid using pre-incremented
     1238           // value which could increase register pressure.
     1239           // Otherwise reorg_offsets() optimization will create a separate
     1240           // Opaque node for each use of trip-counter and as result
     1241           // zero trip guard limit will be different from loop limit.
     1242           assert(has_ctrl(opaq), "should have it");
     1243           Node* opaq_ctrl = get_ctrl(opaq);
     1244           limit = new (C, 2) Opaque2Node( C, limit );
     1245           register_new_node( limit, opaq_ctrl );
     1246         }
     1247         if (stride_con > 0 && ((limit_type->_lo - stride_con) < limit_type->_lo) ||
     1248                    stride_con < 0 && ((limit_type->_hi - stride_con) > limit_type->_hi)) {
     1249           // No underflow.
     1250           new_limit = new (C, 3) SubINode(limit, stride);
     1251         } else {
     1252           // (limit - stride) may underflow.
     1253           // Clamp the adjustment value with MININT or MAXINT:
     1254           //
     1255           //   new_limit = limit-stride
     1256           //   if (stride > 0)
     1257           //     new_limit = (limit < new_limit) ? MININT : new_limit;
     1258           //   else
     1259           //     new_limit = (limit > new_limit) ? MAXINT : new_limit;
     1260           //
     1261           BoolTest::mask bt = loop_end->test_trip();
     1262           assert(bt == BoolTest::lt || bt == BoolTest::gt, "canonical test is expected");
     1263           Node* adj_max = _igvn.intcon((stride_con > 0) ? min_jint : max_jint);
     1264           set_ctrl(adj_max, C->root());
     1265           Node* old_limit = NULL;
     1266           Node* adj_limit = NULL;
     1267           Node* bol = limit->is_CMove() ? limit->in(CMoveNode::Condition) : NULL;
     1268           if (loop_head->unrolled_count() > 1 &&
     1269               limit->is_CMove() && limit->Opcode() == Op_CMoveI &&
     1270               limit->in(CMoveNode::IfTrue) == adj_max &&
     1271               bol->as_Bool()->_test._test == bt &&
     1272               bol->in(1)->Opcode() == Op_CmpI &&
     1273               bol->in(1)->in(2) == limit->in(CMoveNode::IfFalse)) {
     1274             // Loop was unrolled before.
     1275             // Optimize the limit to avoid nested CMove:
     1276             // use original limit as old limit.
     1277             old_limit = bol->in(1)->in(1);
     1278             // Adjust previous adjusted limit.
     1279             adj_limit = limit->in(CMoveNode::IfFalse);
     1280             adj_limit = new (C, 3) SubINode(adj_limit, stride);
     1281           } else {
     1282             old_limit = limit;
     1283             adj_limit = new (C, 3) SubINode(limit, stride);
     1284           }
     1285           assert(old_limit != NULL && adj_limit != NULL, "");
     1286           register_new_node( adj_limit, ctrl ); // adjust amount
     1287           Node* adj_cmp = new (C, 3) CmpINode(old_limit, adj_limit);
     1288           register_new_node( adj_cmp, ctrl );
     1289           Node* adj_bool = new (C, 2) BoolNode(adj_cmp, bt);
     1290           register_new_node( adj_bool, ctrl );
     1291           new_limit = new (C, 4) CMoveINode(adj_bool, adj_limit, adj_max, TypeInt::INT);
     1292         }
     1293         register_new_node(new_limit, ctrl);
     1294       }
     1295       assert(new_limit != NULL, "");
     1296       // Replace in loop test.
     1297       assert(loop_end->in(1)->in(1) == cmp, "sanity");
     1298       if (cmp->outcnt() == 1 && loop_end->in(1)->outcnt() == 1) {
     1299         // Don't need to create new test since only one user.
     1300         _igvn.hash_delete(cmp);
     1301         cmp->set_req(2, new_limit);
     1302       } else {
     1303         // Create new test since it is shared.
     1304         Node* ctrl2 = loop_end->in(0);
     1305         Node* cmp2  = cmp->clone();
     1306         cmp2->set_req(2, new_limit);
     1307         register_new_node(cmp2, ctrl2);
     1308         Node* bol2 = loop_end->in(1)->clone();
     1309         bol2->set_req(1, cmp2);
     1310         register_new_node(bol2, ctrl2);
     1311         _igvn.hash_delete(loop_end);
     1312         loop_end->set_req(1, bol2);
     1313       }
     1314       // Step 3: Find the min-trip test guaranteed before a 'main' loop.
     1315       // Make it a 1-trip test (means at least 2 trips).
     1316 
     1317       // Guard test uses an 'opaque' node which is not shared.  Hence I
     1318       // can edit it's inputs directly.  Hammer in the new limit for the
     1319       // minimum-trip guard.
     1320       assert(opaq->outcnt() == 1, "");
     1321       _igvn.hash_delete(opaq);
     1322       opaq->set_req(1, new_limit);
     1323     }
     1324 
     1325     // Adjust max trip count. The trip count is intentionally rounded
     1326     // down here (e.g. 15-> 7-> 3-> 1) because if we unwittingly over-unroll,
     1327     // the main, unrolled, part of the loop will never execute as it is protected
     1328     // by the min-trip test.  See bug 4834191 for a case where we over-unrolled
     1329     // and later determined that part of the unrolled loop was dead.
     1330     loop_head->set_trip_count(old_trip_count / 2);
     1331 
     1332     // Double the count of original iterations in the unrolled loop body.
     1333     loop_head->double_unrolled_count();
     1334 
     1335   } else { // LoopLimitCheck
     1336 
     1337     // Adjust max trip count. The trip count is intentionally rounded
     1338     // down here (e.g. 15-> 7-> 3-> 1) because if we unwittingly over-unroll,
     1339     // the main, unrolled, part of the loop will never execute as it is protected
     1340     // by the min-trip test.  See bug 4834191 for a case where we over-unrolled
     1341     // and later determined that part of the unrolled loop was dead.
     1342     loop_head->set_trip_count(loop_head->trip_count() / 2);
     1343 
     1344     // Double the count of original iterations in the unrolled loop body.
     1345     loop_head->double_unrolled_count();
     1346 
     1347     // -----------
     1348     // Step 2: Cut back the trip counter for an unroll amount of 2.
     1349     // Loop will normally trip (limit - init)/stride_con.  Since it's a
     1350     // CountedLoop this is exact (stride divides limit-init exactly).
     1351     // We are going to double the loop body, so we want to knock off any
     1352     // odd iteration: (trip_cnt & ~1).  Then back compute a new limit.
     1353     Node *span = new (C, 3) SubINode( limit, init );
     1354     register_new_node( span, ctrl );
     1355     Node *trip = new (C, 3) DivINode( 0, span, stride );
     1356     register_new_node( trip, ctrl );
     1357     Node *mtwo = _igvn.intcon(-2);
     1358     set_ctrl(mtwo, C->root());
     1359     Node *rond = new (C, 3) AndINode( trip, mtwo );
     1360     register_new_node( rond, ctrl );
     1361     Node *spn2 = new (C, 3) MulINode( rond, stride );
     1362     register_new_node( spn2, ctrl );
     1363     new_limit = new (C, 3) AddINode( spn2, init );
     1364     register_new_node( new_limit, ctrl );
     1365 
     1366     // Hammer in the new limit
     1367     Node *ctrl2 = loop_end->in(0);
     1368     Node *cmp2 = new (C, 3) CmpINode( loop_head->incr(), new_limit );
     1369     register_new_node( cmp2, ctrl2 );
     1370     Node *bol2 = new (C, 2) BoolNode( cmp2, loop_end->test_trip() );
     1371     register_new_node( bol2, ctrl2 );
     1372     _igvn.hash_delete(loop_end);
     1373     loop_end->set_req(CountedLoopEndNode::TestValue, bol2);
     1374 
     1375     // Step 3: Find the min-trip test guaranteed before a 'main' loop.
     1376     // Make it a 1-trip test (means at least 2 trips).
     1377     if( adjust_min_trip ) {
     1378       assert( new_limit != NULL, "" );
     1379       // Guard test uses an 'opaque' node which is not shared.  Hence I
     1380       // can edit it's inputs directly.  Hammer in the new limit for the
     1381       // minimum-trip guard.
     1382       assert( opaq->outcnt() == 1, "" );
     1383       _igvn.hash_delete(opaq);
     1384       opaq->set_req(1, new_limit);
     1385     }
     1386   } // LoopLimitCheck
     1387 
     1388   // ---------
     1389   // Step 4: Clone the loop body.  Move it inside the loop.  This loop body
     1390   // represents the odd iterations; since the loop trips an even number of
     1391   // times its backedge is never taken.  Kill the backedge.
     1392   uint dd = dom_depth(loop_head);
     1393   clone_loop( loop, old_new, dd );
     1394 
     1395   // Make backedges of the clone equal to backedges of the original.
     1396   // Make the fall-in from the original come from the fall-out of the clone.
     1397   for (DUIterator_Fast jmax, j = loop_head->fast_outs(jmax); j < jmax; j++) {
     1398     Node* phi = loop_head->fast_out(j);
     1399     if( phi->is_Phi() && phi->in(0) == loop_head && phi->outcnt() > 0 ) {
     1400       Node *newphi = old_new[phi->_idx];
     1401       _igvn.hash_delete( phi );
     1402       _igvn.hash_delete( newphi );
     1403 
     1404       phi   ->set_req(LoopNode::   EntryControl, newphi->in(LoopNode::LoopBackControl));
     1405       newphi->set_req(LoopNode::LoopBackControl, phi   ->in(LoopNode::LoopBackControl));
     1406       phi   ->set_req(LoopNode::LoopBackControl, C->top());
     1407     }
     1408   }
     1409   Node *clone_head = old_new[loop_head->_idx];
     1410   _igvn.hash_delete( clone_head );
     1411   loop_head ->set_req(LoopNode::   EntryControl, clone_head->in(LoopNode::LoopBackControl));
     1412   clone_head->set_req(LoopNode::LoopBackControl, loop_head ->in(LoopNode::LoopBackControl));
     1413   loop_head ->set_req(LoopNode::LoopBackControl, C->top());
     1414   loop->_head = clone_head;     // New loop header
     1415 
     1416   set_idom(loop_head,  loop_head ->in(LoopNode::EntryControl), dd);
     1417   set_idom(clone_head, clone_head->in(LoopNode::EntryControl), dd);
     1418 
     1419   // Kill the clone's backedge
     1420   Node *newcle = old_new[loop_end->_idx];
     1421   _igvn.hash_delete( newcle );
     1422   Node *one = _igvn.intcon(1);
     1423   set_ctrl(one, C->root());
     1424   newcle->set_req(1, one);
     1425   // Force clone into same loop body
     1426   uint max = loop->_body.size();
     1427   for( uint k = 0; k < max; k++ ) {
     1428     Node *old = loop->_body.at(k);
     1429     Node *nnn = old_new[old->_idx];
     1430     loop->_body.push(nnn);
     1431     if (!has_ctrl(old))
     1432       set_loop(nnn, loop);
     1433   }
     1434 
     1435   loop->record_for_igvn();
     1436 }
     1437 
     1438 //------------------------------do_maximally_unroll----------------------------
     1439 
     1440 void PhaseIdealLoop::do_maximally_unroll( IdealLoopTree *loop, Node_List &old_new ) {
     1441   CountedLoopNode *cl = loop->_head->as_CountedLoop();
     1442   assert(cl->has_exact_trip_count(), "trip count is not exact");
     1443   assert(cl->trip_count() > 0, "");
     1444 #ifndef PRODUCT
     1445   if (TraceLoopOpts) {
     1446     tty->print("MaxUnroll  %d ", cl->trip_count());
     1447     loop->dump_head();
     1448   }
     1449 #endif
     1450 
     1451   // If loop is tripping an odd number of times, peel odd iteration
     1452   if ((cl->trip_count() & 1) == 1) {
     1453     do_peeling(loop, old_new);
     1454   }
     1455 
     1456   // Now its tripping an even number of times remaining.  Double loop body.
     1457   // Do not adjust pre-guards; they are not needed and do not exist.
     1458   if (cl->trip_count() > 0) {
     1459     assert((cl->trip_count() & 1) == 0, "missed peeling");
     1460     do_unroll(loop, old_new, false);
     1461   }
     1462 }
     1463 
     1464 //------------------------------dominates_backedge---------------------------------
     1465 // Returns true if ctrl is executed on every complete iteration
     1466 bool IdealLoopTree::dominates_backedge(Node* ctrl) {
     1467   assert(ctrl->is_CFG(), "must be control");
     1468   Node* backedge = _head->as_Loop()->in(LoopNode::LoopBackControl);
     1469   return _phase->dom_lca_internal(ctrl, backedge) == ctrl;
     1470 }
     1471 
     1472 //------------------------------adjust_limit-----------------------------------
     1473 // Helper function for add_constraint().
     1474 Node* PhaseIdealLoop::adjust_limit(int stride_con, Node * scale, Node *offset, Node *rc_limit, Node *loop_limit, Node *pre_ctrl) {
     1475   // Compute "I :: (limit-offset)/scale"
     1476   Node *con = new (C, 3) SubINode(rc_limit, offset);
     1477   register_new_node(con, pre_ctrl);
     1478   Node *X = new (C, 3) DivINode(0, con, scale);
     1479   register_new_node(X, pre_ctrl);
     1480 
     1481   // Adjust loop limit
     1482   loop_limit = (stride_con > 0)
     1483                ? (Node*)(new (C, 3) MinINode(loop_limit, X))
     1484                : (Node*)(new (C, 3) MaxINode(loop_limit, X));
     1485   register_new_node(loop_limit, pre_ctrl);
     1486   return loop_limit;
     1487 }
     1488 
     1489 //------------------------------add_constraint---------------------------------
     1490 // Constrain the main loop iterations so the conditions:
     1491 //    low_limit <= scale_con * I + offset  <  upper_limit
     1492 // always holds true.  That is, either increase the number of iterations in
     1493 // the pre-loop or the post-loop until the condition holds true in the main
     1494 // loop.  Stride, scale, offset and limit are all loop invariant.  Further,
     1495 // stride and scale are constants (offset and limit often are).
     1496 void PhaseIdealLoop::add_constraint( int stride_con, int scale_con, Node *offset, Node *low_limit, Node *upper_limit, Node *pre_ctrl, Node **pre_limit, Node **main_limit ) {
     1497   // For positive stride, the pre-loop limit always uses a MAX function
     1498   // and the main loop a MIN function.  For negative stride these are
     1499   // reversed.
     1500 
     1501   // Also for positive stride*scale the affine function is increasing, so the
     1502   // pre-loop must check for underflow and the post-loop for overflow.
     1503   // Negative stride*scale reverses this; pre-loop checks for overflow and
     1504   // post-loop for underflow.
     1505 
     1506   Node *scale = _igvn.intcon(scale_con);
     1507   set_ctrl(scale, C->root());
     1508 
     1509   if ((stride_con^scale_con) >= 0) { // Use XOR to avoid overflow
     1510     // The overflow limit: scale*I+offset < upper_limit
     1511     // For main-loop compute
     1512     //   ( if (scale > 0) /* and stride > 0 */
     1513     //       I < (upper_limit-offset)/scale
     1514     //     else /* scale < 0 and stride < 0 */
     1515     //       I > (upper_limit-offset)/scale
     1516     //   )
     1517     //
     1518     // (upper_limit-offset) may overflow or underflow.
     1519     // But it is fine since main loop will either have
     1520     // less iterations or will be skipped in such case.
     1521     *main_limit = adjust_limit(stride_con, scale, offset, upper_limit, *main_limit, pre_ctrl);
     1522 
     1523     // The underflow limit: low_limit <= scale*I+offset.
     1524     // For pre-loop compute
     1525     //   NOT(scale*I+offset >= low_limit)
     1526     //   scale*I+offset < low_limit
     1527     //   ( if (scale > 0) /* and stride > 0 */
     1528     //       I < (low_limit-offset)/scale
     1529     //     else /* scale < 0 and stride < 0 */
     1530     //       I > (low_limit-offset)/scale
     1531     //   )
     1532 
     1533     if (low_limit->get_int() == -max_jint) {
     1534       if (!RangeLimitCheck) return;
     1535       // We need this guard when scale*pre_limit+offset >= limit
     1536       // due to underflow. So we need execute pre-loop until
     1537       // scale*I+offset >= min_int. But (min_int-offset) will
     1538       // underflow when offset > 0 and X will be > original_limit
     1539       // when stride > 0. To avoid it we replace positive offset with 0.
     1540       //
     1541       // Also (min_int+1 == -max_int) is used instead of min_int here
     1542       // to avoid problem with scale == -1 (min_int/(-1) == min_int).
     1543       Node* shift = _igvn.intcon(31);
     1544       set_ctrl(shift, C->root());
     1545       Node* sign = new (C, 3) RShiftINode(offset, shift);
     1546       register_new_node(sign, pre_ctrl);
     1547       offset = new (C, 3) AndINode(offset, sign);
     1548       register_new_node(offset, pre_ctrl);
     1549     } else {
     1550       assert(low_limit->get_int() == 0, "wrong low limit for range check");
     1551       // The only problem we have here when offset == min_int
     1552       // since (0-min_int) == min_int. It may be fine for stride > 0
     1553       // but for stride < 0 X will be < original_limit. To avoid it
     1554       // max(pre_limit, original_limit) is used in do_range_check().
     1555     }
     1556     // Pass (-stride) to indicate pre_loop_cond = NOT(main_loop_cond);
     1557     *pre_limit = adjust_limit((-stride_con), scale, offset, low_limit, *pre_limit, pre_ctrl);
     1558 
     1559   } else { // stride_con*scale_con < 0
     1560     // For negative stride*scale pre-loop checks for overflow and
     1561     // post-loop for underflow.
     1562     //
     1563     // The overflow limit: scale*I+offset < upper_limit
     1564     // For pre-loop compute
     1565     //   NOT(scale*I+offset < upper_limit)
     1566     //   scale*I+offset >= upper_limit
     1567     //   scale*I+offset+1 > upper_limit
     1568     //   ( if (scale < 0) /* and stride > 0 */
     1569     //       I < (upper_limit-(offset+1))/scale
     1570     //     else /* scale > 0 and stride < 0 */
     1571     //       I > (upper_limit-(offset+1))/scale
     1572     //   )
     1573     //
     1574     // (upper_limit-offset-1) may underflow or overflow.
     1575     // To avoid it min(pre_limit, original_limit) is used
     1576     // in do_range_check() for stride > 0 and max() for < 0.
     1577     Node *one  = _igvn.intcon(1);
     1578     set_ctrl(one, C->root());
     1579 
     1580     Node *plus_one = new (C, 3) AddINode(offset, one);
     1581     register_new_node( plus_one, pre_ctrl );
     1582     // Pass (-stride) to indicate pre_loop_cond = NOT(main_loop_cond);
     1583     *pre_limit = adjust_limit((-stride_con), scale, plus_one, upper_limit, *pre_limit, pre_ctrl);
     1584 
     1585     if (low_limit->get_int() == -max_jint) {
     1586       if (!RangeLimitCheck) return;
     1587       // We need this guard when scale*main_limit+offset >= limit
     1588       // due to underflow. So we need execute main-loop while
     1589       // scale*I+offset+1 > min_int. But (min_int-offset-1) will
     1590       // underflow when (offset+1) > 0 and X will be < main_limit
     1591       // when scale < 0 (and stride > 0). To avoid it we replace
     1592       // positive (offset+1) with 0.
     1593       //
     1594       // Also (min_int+1 == -max_int) is used instead of min_int here
     1595       // to avoid problem with scale == -1 (min_int/(-1) == min_int).
     1596       Node* shift = _igvn.intcon(31);
     1597       set_ctrl(shift, C->root());
     1598       Node* sign = new (C, 3) RShiftINode(plus_one, shift);
     1599       register_new_node(sign, pre_ctrl);
     1600       plus_one = new (C, 3) AndINode(plus_one, sign);
     1601       register_new_node(plus_one, pre_ctrl);
     1602     } else {
     1603       assert(low_limit->get_int() == 0, "wrong low limit for range check");
     1604       // The only problem we have here when offset == max_int
     1605       // since (max_int+1) == min_int and (0-min_int) == min_int.
     1606       // But it is fine since main loop will either have
     1607       // less iterations or will be skipped in such case.
     1608     }
     1609     // The underflow limit: low_limit <= scale*I+offset.
     1610     // For main-loop compute
     1611     //   scale*I+offset+1 > low_limit
     1612     //   ( if (scale < 0) /* and stride > 0 */
     1613     //       I < (low_limit-(offset+1))/scale
     1614     //     else /* scale > 0 and stride < 0 */
     1615     //       I > (low_limit-(offset+1))/scale
     1616     //   )
     1617 
     1618     *main_limit = adjust_limit(stride_con, scale, plus_one, low_limit, *main_limit, pre_ctrl);
     1619   }
     1620 }
     1621 
     1622 
     1623 //------------------------------is_scaled_iv---------------------------------
     1624 // Return true if exp is a constant times an induction var
     1625 bool PhaseIdealLoop::is_scaled_iv(Node* exp, Node* iv, int* p_scale) {
     1626   if (exp == iv) {
     1627     if (p_scale != NULL) {
     1628       *p_scale = 1;
     1629     }
     1630     return true;
     1631   }
     1632   int opc = exp->Opcode();
     1633   if (opc == Op_MulI) {
     1634     if (exp->in(1) == iv && exp->in(2)->is_Con()) {
     1635       if (p_scale != NULL) {
     1636         *p_scale = exp->in(2)->get_int();
     1637       }
     1638       return true;
     1639     }
     1640     if (exp->in(2) == iv && exp->in(1)->is_Con()) {
     1641       if (p_scale != NULL) {
     1642         *p_scale = exp->in(1)->get_int();
     1643       }
     1644       return true;
     1645     }
     1646   } else if (opc == Op_LShiftI) {
     1647     if (exp->in(1) == iv && exp->in(2)->is_Con()) {
     1648       if (p_scale != NULL) {
     1649         *p_scale = 1 << exp->in(2)->get_int();
     1650       }
     1651       return true;
     1652     }
     1653   }
     1654   return false;
     1655 }
     1656 
     1657 //-----------------------------is_scaled_iv_plus_offset------------------------------
     1658 // Return true if exp is a simple induction variable expression: k1*iv + (invar + k2)
     1659 bool PhaseIdealLoop::is_scaled_iv_plus_offset(Node* exp, Node* iv, int* p_scale, Node** p_offset, int depth) {
     1660   if (is_scaled_iv(exp, iv, p_scale)) {
     1661     if (p_offset != NULL) {
     1662       Node *zero = _igvn.intcon(0);
     1663       set_ctrl(zero, C->root());
     1664       *p_offset = zero;
     1665     }
     1666     return true;
     1667   }
     1668   int opc = exp->Opcode();
     1669   if (opc == Op_AddI) {
     1670     if (is_scaled_iv(exp->in(1), iv, p_scale)) {
     1671       if (p_offset != NULL) {
     1672         *p_offset = exp->in(2);
     1673       }
     1674       return true;
     1675     }
     1676     if (exp->in(2)->is_Con()) {
     1677       Node* offset2 = NULL;
     1678       if (depth < 2 &&
     1679           is_scaled_iv_plus_offset(exp->in(1), iv, p_scale,
     1680                                    p_offset != NULL ? &offset2 : NULL, depth+1)) {
     1681         if (p_offset != NULL) {
     1682           Node *ctrl_off2 = get_ctrl(offset2);
     1683           Node* offset = new (C, 3) AddINode(offset2, exp->in(2));
     1684           register_new_node(offset, ctrl_off2);
     1685           *p_offset = offset;
     1686         }
     1687         return true;
     1688       }
     1689     }
     1690   } else if (opc == Op_SubI) {
     1691     if (is_scaled_iv(exp->in(1), iv, p_scale)) {
     1692       if (p_offset != NULL) {
     1693         Node *zero = _igvn.intcon(0);
     1694         set_ctrl(zero, C->root());
     1695         Node *ctrl_off = get_ctrl(exp->in(2));
     1696         Node* offset = new (C, 3) SubINode(zero, exp->in(2));
     1697         register_new_node(offset, ctrl_off);
     1698         *p_offset = offset;
     1699       }
     1700       return true;
     1701     }
     1702     if (is_scaled_iv(exp->in(2), iv, p_scale)) {
     1703       if (p_offset != NULL) {
     1704         *p_scale *= -1;
     1705         *p_offset = exp->in(1);
     1706       }
     1707       return true;
     1708     }
     1709   }
     1710   return false;
     1711 }
     1712 
     1713 //------------------------------do_range_check---------------------------------
     1714 // Eliminate range-checks and other trip-counter vs loop-invariant tests.
     1715 void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) {
     1716 #ifndef PRODUCT
     1717   if (PrintOpto && VerifyLoopOptimizations) {
     1718     tty->print("Range Check Elimination ");
     1719     loop->dump_head();
     1720   } else if (TraceLoopOpts) {
     1721     tty->print("RangeCheck   ");
     1722     loop->dump_head();
     1723   }
     1724 #endif
     1725   assert(RangeCheckElimination, "");
     1726   CountedLoopNode *cl = loop->_head->as_CountedLoop();
     1727   assert(cl->is_main_loop(), "");
     1728 
     1729   // protect against stride not being a constant
     1730   if (!cl->stride_is_con())
     1731     return;
     1732 
     1733   // Find the trip counter; we are iteration splitting based on it
     1734   Node *trip_counter = cl->phi();
     1735   // Find the main loop limit; we will trim it's iterations
     1736   // to not ever trip end tests
     1737   Node *main_limit = cl->limit();
     1738 
     1739   // Need to find the main-loop zero-trip guard
     1740   Node *ctrl  = cl->in(LoopNode::EntryControl);
     1741   assert(ctrl->Opcode() == Op_IfTrue || ctrl->Opcode() == Op_IfFalse, "");
     1742   Node *iffm = ctrl->in(0);
     1743   assert(iffm->Opcode() == Op_If, "");
     1744   Node *bolzm = iffm->in(1);
     1745   assert(bolzm->Opcode() == Op_Bool, "");
     1746   Node *cmpzm = bolzm->in(1);
     1747   assert(cmpzm->is_Cmp(), "");
     1748   Node *opqzm = cmpzm->in(2);
     1749   // Can not optimize a loop if zero-trip Opaque1 node is optimized
     1750   // away and then another round of loop opts attempted.
     1751   if (opqzm->Opcode() != Op_Opaque1)
     1752     return;
     1753   assert(opqzm->in(1) == main_limit, "do not understand situation");
     1754 
     1755   // Find the pre-loop limit; we will expand it's iterations to
     1756   // not ever trip low tests.
     1757   Node *p_f = iffm->in(0);
     1758   assert(p_f->Opcode() == Op_IfFalse, "");
     1759   CountedLoopEndNode *pre_end = p_f->in(0)->as_CountedLoopEnd();
     1760   assert(pre_end->loopnode()->is_pre_loop(), "");
     1761   Node *pre_opaq1 = pre_end->limit();
     1762   // Occasionally it's possible for a pre-loop Opaque1 node to be
     1763   // optimized away and then another round of loop opts attempted.
     1764   // We can not optimize this particular loop in that case.
     1765   if (pre_opaq1->Opcode() != Op_Opaque1)
     1766     return;
     1767   Opaque1Node *pre_opaq = (Opaque1Node*)pre_opaq1;
     1768   Node *pre_limit = pre_opaq->in(1);
     1769 
     1770   // Where do we put new limit calculations
     1771   Node *pre_ctrl = pre_end->loopnode()->in(LoopNode::EntryControl);
     1772 
     1773   // Ensure the original loop limit is available from the
     1774   // pre-loop Opaque1 node.
     1775   Node *orig_limit = pre_opaq->original_loop_limit();
     1776   if (orig_limit == NULL || _igvn.type(orig_limit) == Type::TOP)
     1777     return;
     1778 
     1779   // Must know if its a count-up or count-down loop
     1780 
     1781   int stride_con = cl->stride_con();
     1782   Node *zero = _igvn.intcon(0);
     1783   Node *one  = _igvn.intcon(1);
     1784   // Use symmetrical int range [-max_jint,max_jint]
     1785   Node *mini = _igvn.intcon(-max_jint);
     1786   set_ctrl(zero, C->root());
     1787   set_ctrl(one,  C->root());
     1788   set_ctrl(mini, C->root());
     1789 
     1790   // Range checks that do not dominate the loop backedge (ie.
     1791   // conditionally executed) can lengthen the pre loop limit beyond
     1792   // the original loop limit. To prevent this, the pre limit is
     1793   // (for stride > 0) MINed with the original loop limit (MAXed
     1794   // stride < 0) when some range_check (rc) is conditionally
     1795   // executed.
     1796   bool conditional_rc = false;
     1797 
     1798   // Check loop body for tests of trip-counter plus loop-invariant vs
     1799   // loop-invariant.
     1800   for( uint i = 0; i < loop->_body.size(); i++ ) {
     1801     Node *iff = loop->_body[i];
     1802     if( iff->Opcode() == Op_If ) { // Test?
     1803 
     1804       // Test is an IfNode, has 2 projections.  If BOTH are in the loop
     1805       // we need loop unswitching instead of iteration splitting.
     1806       Node *exit = loop->is_loop_exit(iff);
     1807       if( !exit ) continue;
     1808       int flip = (exit->Opcode() == Op_IfTrue) ? 1 : 0;
     1809 
     1810       // Get boolean condition to test
     1811       Node *i1 = iff->in(1);
     1812       if( !i1->is_Bool() ) continue;
     1813       BoolNode *bol = i1->as_Bool();
     1814       BoolTest b_test = bol->_test;
     1815       // Flip sense of test if exit condition is flipped
     1816       if( flip )
     1817         b_test = b_test.negate();
     1818 
     1819       // Get compare
     1820       Node *cmp = bol->in(1);
     1821 
     1822       // Look for trip_counter + offset vs limit
     1823       Node *rc_exp = cmp->in(1);
     1824       Node *limit  = cmp->in(2);
     1825       jint scale_con= 1;        // Assume trip counter not scaled
     1826 
     1827       Node *limit_c = get_ctrl(limit);
     1828       if( loop->is_member(get_loop(limit_c) ) ) {
     1829         // Compare might have operands swapped; commute them
     1830         b_test = b_test.commute();
     1831         rc_exp = cmp->in(2);
     1832         limit  = cmp->in(1);
     1833         limit_c = get_ctrl(limit);
     1834         if( loop->is_member(get_loop(limit_c) ) )
     1835           continue;             // Both inputs are loop varying; cannot RCE
     1836       }
     1837       // Here we know 'limit' is loop invariant
     1838 
     1839       // 'limit' maybe pinned below the zero trip test (probably from a
     1840       // previous round of rce), in which case, it can't be used in the
     1841       // zero trip test expression which must occur before the zero test's if.
     1842       if( limit_c == ctrl ) {
     1843         continue;  // Don't rce this check but continue looking for other candidates.
     1844       }
     1845 
     1846       // Check for scaled induction variable plus an offset
     1847       Node *offset = NULL;
     1848 
     1849       if (!is_scaled_iv_plus_offset(rc_exp, trip_counter, &scale_con, &offset)) {
     1850         continue;
     1851       }
     1852 
     1853       Node *offset_c = get_ctrl(offset);
     1854       if( loop->is_member( get_loop(offset_c) ) )
     1855         continue;               // Offset is not really loop invariant
     1856       // Here we know 'offset' is loop invariant.
     1857 
     1858       // As above for the 'limit', the 'offset' maybe pinned below the
     1859       // zero trip test.
     1860       if( offset_c == ctrl ) {
     1861         continue; // Don't rce this check but continue looking for other candidates.
     1862       }
     1863 #ifdef ASSERT
     1864       if (TraceRangeLimitCheck) {
     1865         tty->print_cr("RC bool node%s", flip ? " flipped:" : ":");
     1866         bol->dump(2);
     1867       }
     1868 #endif
     1869       // At this point we have the expression as:
     1870       //   scale_con * trip_counter + offset :: limit
     1871       // where scale_con, offset and limit are loop invariant.  Trip_counter
     1872       // monotonically increases by stride_con, a constant.  Both (or either)
     1873       // stride_con and scale_con can be negative which will flip about the
     1874       // sense of the test.
     1875 
     1876       // Adjust pre and main loop limits to guard the correct iteration set
     1877       if( cmp->Opcode() == Op_CmpU ) {// Unsigned compare is really 2 tests
     1878         if( b_test._test == BoolTest::lt ) { // Range checks always use lt
     1879           // The underflow and overflow limits: 0 <= scale*I+offset < limit
     1880           add_constraint( stride_con, scale_con, offset, zero, limit, pre_ctrl, &pre_limit, &main_limit );
     1881           if (!conditional_rc) {
     1882             // (0-offset)/scale could be outside of loop iterations range.
     1883             conditional_rc = !loop->dominates_backedge(iff) || RangeLimitCheck;
     1884           }
     1885         } else {
     1886 #ifndef PRODUCT
     1887           if( PrintOpto )
     1888             tty->print_cr("missed RCE opportunity");
     1889 #endif
     1890           continue;             // In release mode, ignore it
     1891         }
     1892       } else {                  // Otherwise work on normal compares
     1893         switch( b_test._test ) {
     1894         case BoolTest::gt:
     1895           // Fall into GE case
     1896         case BoolTest::ge:
     1897           // Convert (I*scale+offset) >= Limit to (I*(-scale)+(-offset)) <= -Limit
     1898           scale_con = -scale_con;
     1899           offset = new (C, 3) SubINode( zero, offset );
     1900           register_new_node( offset, pre_ctrl );
     1901           limit  = new (C, 3) SubINode( zero, limit  );
     1902           register_new_node( limit, pre_ctrl );
     1903           // Fall into LE case
     1904         case BoolTest::le:
     1905           if (b_test._test != BoolTest::gt) {
     1906             // Convert X <= Y to X < Y+1
     1907             limit = new (C, 3) AddINode( limit, one );
     1908             register_new_node( limit, pre_ctrl );
     1909           }
     1910           // Fall into LT case
     1911         case BoolTest::lt:
     1912           // The underflow and overflow limits: MIN_INT <= scale*I+offset < limit
     1913           // Note: (MIN_INT+1 == -MAX_INT) is used instead of MIN_INT here
     1914           // to avoid problem with scale == -1: MIN_INT/(-1) == MIN_INT.
     1915           add_constraint( stride_con, scale_con, offset, mini, limit, pre_ctrl, &pre_limit, &main_limit );
     1916           if (!conditional_rc) {
     1917             // ((MIN_INT+1)-offset)/scale could be outside of loop iterations range.
     1918             // Note: negative offset is replaced with 0 but (MIN_INT+1)/scale could
     1919             // still be outside of loop range.
     1920             conditional_rc = !loop->dominates_backedge(iff) || RangeLimitCheck;
     1921           }
     1922           break;
     1923         default:
     1924 #ifndef PRODUCT
     1925           if( PrintOpto )
     1926             tty->print_cr("missed RCE opportunity");
     1927 #endif
     1928           continue;             // Unhandled case
     1929         }
     1930       }
     1931 
     1932       // Kill the eliminated test
     1933       C->set_major_progress();
     1934       Node *kill_con = _igvn.intcon( 1-flip );
     1935       set_ctrl(kill_con, C->root());
     1936       _igvn.hash_delete(iff);
     1937       iff->set_req(1, kill_con);
     1938       _igvn._worklist.push(iff);
     1939       // Find surviving projection
     1940       assert(iff->is_If(), "");
     1941       ProjNode* dp = ((IfNode*)iff)->proj_out(1-flip);
     1942       // Find loads off the surviving projection; remove their control edge
     1943       for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
     1944         Node* cd = dp->fast_out(i); // Control-dependent node
     1945         if( cd->is_Load() ) {   // Loads can now float around in the loop
     1946           _igvn.hash_delete(cd);
     1947           // Allow the load to float around in the loop, or before it
     1948           // but NOT before the pre-loop.
     1949           cd->set_req(0, ctrl);   // ctrl, not NULL
     1950           _igvn._worklist.push(cd);
     1951           --i;
     1952           --imax;
     1953         }
     1954       }
     1955 
     1956     } // End of is IF
     1957 
     1958   }
     1959 
     1960   // Update loop limits
     1961   if (conditional_rc) {
     1962     pre_limit = (stride_con > 0) ? (Node*)new (C,3) MinINode(pre_limit, orig_limit)
     1963                                  : (Node*)new (C,3) MaxINode(pre_limit, orig_limit);
     1964     register_new_node(pre_limit, pre_ctrl);
     1965   }
     1966   _igvn.hash_delete(pre_opaq);
     1967   pre_opaq->set_req(1, pre_limit);
     1968 
     1969   // Note:: we are making the main loop limit no longer precise;
     1970   // need to round up based on stride.
     1971   cl->set_nonexact_trip_count();
     1972   if (!LoopLimitCheck && stride_con != 1 && stride_con != -1) { // Cutout for common case
     1973     // "Standard" round-up logic:  ([main_limit-init+(y-1)]/y)*y+init
     1974     // Hopefully, compiler will optimize for powers of 2.
     1975     Node *ctrl = get_ctrl(main_limit);
     1976     Node *stride = cl->stride();
     1977     Node *init = cl->init_trip();
     1978     Node *span = new (C, 3) SubINode(main_limit,init);
     1979     register_new_node(span,ctrl);
     1980     Node *rndup = _igvn.intcon(stride_con + ((stride_con>0)?-1:1));
     1981     Node *add = new (C, 3) AddINode(span,rndup);
     1982     register_new_node(add,ctrl);
     1983     Node *div = new (C, 3) DivINode(0,add,stride);
     1984     register_new_node(div,ctrl);
     1985     Node *mul = new (C, 3) MulINode(div,stride);
     1986     register_new_node(mul,ctrl);
     1987     Node *newlim = new (C, 3) AddINode(mul,init);
     1988     register_new_node(newlim,ctrl);
     1989     main_limit = newlim;
     1990   }
     1991 
     1992   Node *main_cle = cl->loopexit();
     1993   Node *main_bol = main_cle->in(1);
     1994   // Hacking loop bounds; need private copies of exit test
     1995   if( main_bol->outcnt() > 1 ) {// BoolNode shared?
     1996     _igvn.hash_delete(main_cle);
     1997     main_bol = main_bol->clone();// Clone a private BoolNode
     1998     register_new_node( main_bol, main_cle->in(0) );
     1999     main_cle->set_req(1,main_bol);
     2000   }
     2001   Node *main_cmp = main_bol->in(1);
     2002   if( main_cmp->outcnt() > 1 ) { // CmpNode shared?
     2003     _igvn.hash_delete(main_bol);
     2004     main_cmp = main_cmp->clone();// Clone a private CmpNode
     2005     register_new_node( main_cmp, main_cle->in(0) );
     2006     main_bol->set_req(1,main_cmp);
     2007   }
     2008   // Hack the now-private loop bounds
     2009   _igvn.hash_delete(main_cmp);
     2010   main_cmp->set_req(2, main_limit);
     2011   _igvn._worklist.push(main_cmp);
     2012   // The OpaqueNode is unshared by design
     2013   _igvn.hash_delete(opqzm);
     2014   assert( opqzm->outcnt() == 1, "cannot hack shared node" );
     2015   opqzm->set_req(1,main_limit);
     2016   _igvn._worklist.push(opqzm);
     2017 }
     2018 
     2019 //------------------------------DCE_loop_body----------------------------------
     2020 // Remove simplistic dead code from loop body
     2021 void IdealLoopTree::DCE_loop_body() {
     2022   for( uint i = 0; i < _body.size(); i++ )
     2023     if( _body.at(i)->outcnt() == 0 )
     2024       _body.map( i--, _body.pop() );
     2025 }
     2026 
     2027 
     2028 //------------------------------adjust_loop_exit_prob--------------------------
     2029 // Look for loop-exit tests with the 50/50 (or worse) guesses from the parsing stage.
     2030 // Replace with a 1-in-10 exit guess.
     2031 void IdealLoopTree::adjust_loop_exit_prob( PhaseIdealLoop *phase ) {
     2032   Node *test = tail();
     2033   while( test != _head ) {
     2034     uint top = test->Opcode();
     2035     if( top == Op_IfTrue || top == Op_IfFalse ) {
     2036       int test_con = ((ProjNode*)test)->_con;
     2037       assert(top == (uint)(test_con? Op_IfTrue: Op_IfFalse), "sanity");
     2038       IfNode *iff = test->in(0)->as_If();
     2039       if( iff->outcnt() == 2 ) {        // Ignore dead tests
     2040         Node *bol = iff->in(1);
     2041         if( bol && bol->req() > 1 && bol->in(1) &&
     2042             ((bol->in(1)->Opcode() == Op_StorePConditional ) ||
     2043              (bol->in(1)->Opcode() == Op_StoreIConditional ) ||
     2044              (bol->in(1)->Opcode() == Op_StoreLConditional ) ||
     2045              (bol->in(1)->Opcode() == Op_CompareAndSwapI ) ||
     2046              (bol->in(1)->Opcode() == Op_CompareAndSwapL ) ||
     2047              (bol->in(1)->Opcode() == Op_CompareAndSwapP ) ||
     2048              (bol->in(1)->Opcode() == Op_CompareAndSwapN )))
     2049           return;               // Allocation loops RARELY take backedge
     2050         // Find the OTHER exit path from the IF
     2051         Node* ex = iff->proj_out(1-test_con);
     2052         float p = iff->_prob;
     2053         if( !phase->is_member( this, ex ) && iff->_fcnt == COUNT_UNKNOWN ) {
     2054           if( top == Op_IfTrue ) {
     2055             if( p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
     2056               iff->_prob = PROB_STATIC_FREQUENT;
     2057             }
     2058           } else {
     2059             if( p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
     2060               iff->_prob = PROB_STATIC_INFREQUENT;
     2061             }
     2062           }
     2063         }
     2064       }
     2065     }
     2066     test = phase->idom(test);
     2067   }
     2068 }
     2069 
     2070 
     2071 //------------------------------policy_do_remove_empty_loop--------------------
     2072 // Micro-benchmark spamming.  Policy is to always remove empty loops.
     2073 // The 'DO' part is to replace the trip counter with the value it will
     2074 // have on the last iteration.  This will break the loop.
     2075 bool IdealLoopTree::policy_do_remove_empty_loop( PhaseIdealLoop *phase ) {
     2076   // Minimum size must be empty loop
     2077   if (_body.size() > EMPTY_LOOP_SIZE)
     2078     return false;
     2079 
     2080   if (!_head->is_CountedLoop())
     2081     return false;     // Dead loop
     2082   CountedLoopNode *cl = _head->as_CountedLoop();
     2083   if (!cl->loopexit())
     2084     return false; // Malformed loop
     2085   if (!phase->is_member(this, phase->get_ctrl(cl->loopexit()->in(CountedLoopEndNode::TestValue))))
     2086     return false;             // Infinite loop
     2087 
     2088 #ifdef ASSERT
     2089   // Ensure only one phi which is the iv.
     2090   Node* iv = NULL;
     2091   for (DUIterator_Fast imax, i = cl->fast_outs(imax); i < imax; i++) {
     2092     Node* n = cl->fast_out(i);
     2093     if (n->Opcode() == Op_Phi) {
     2094       assert(iv == NULL, "Too many phis" );
     2095       iv = n;
     2096     }
     2097   }
     2098   assert(iv == cl->phi(), "Wrong phi" );
     2099 #endif
     2100 
     2101   // main and post loops have explicitly created zero trip guard
     2102   bool needs_guard = !cl->is_main_loop() && !cl->is_post_loop();
     2103   if (needs_guard) {
     2104     // Skip guard if values not overlap.
     2105     const TypeInt* init_t = phase->_igvn.type(cl->init_trip())->is_int();
     2106     const TypeInt* limit_t = phase->_igvn.type(cl->limit())->is_int();
     2107     int  stride_con = cl->stride_con();
     2108     if (stride_con > 0) {
     2109       needs_guard = (init_t->_hi >= limit_t->_lo);
     2110     } else {
     2111       needs_guard = (init_t->_lo <= limit_t->_hi);
     2112     }
     2113   }
     2114   if (needs_guard) {
     2115     // Check for an obvious zero trip guard.
     2116     Node* inctrl = PhaseIdealLoop::skip_loop_predicates(cl->in(LoopNode::EntryControl));
     2117     if (inctrl->Opcode() == Op_IfTrue) {
     2118       // The test should look like just the backedge of a CountedLoop
     2119       Node* iff = inctrl->in(0);
     2120       if (iff->is_If()) {
     2121         Node* bol = iff->in(1);
     2122         if (bol->is_Bool() && bol->as_Bool()->_test._test == cl->loopexit()->test_trip()) {
     2123           Node* cmp = bol->in(1);
     2124           if (cmp->is_Cmp() && cmp->in(1) == cl->init_trip() && cmp->in(2) == cl->limit()) {
     2125             needs_guard = false;
     2126           }
     2127         }
     2128       }
     2129     }
     2130   }
     2131 
     2132 #ifndef PRODUCT
     2133   if (PrintOpto) {
     2134     tty->print("Removing empty loop with%s zero trip guard", needs_guard ? "out" : "");
     2135     this->dump_head();
     2136   } else if (TraceLoopOpts) {
     2137     tty->print("Empty with%s zero trip guard   ", needs_guard ? "out" : "");
     2138     this->dump_head();
     2139   }
     2140 #endif
     2141 
     2142   if (needs_guard) {
     2143     // Peel the loop to ensure there's a zero trip guard
     2144     Node_List old_new;
     2145     phase->do_peeling(this, old_new);
     2146   }
     2147 
     2148   // Replace the phi at loop head with the final value of the last
     2149   // iteration.  Then the CountedLoopEnd will collapse (backedge never
     2150   // taken) and all loop-invariant uses of the exit values will be correct.
     2151   Node *phi = cl->phi();
     2152   Node *exact_limit = phase->exact_limit(this);
     2153   if (exact_limit != cl->limit()) {
     2154     // We also need to replace the original limit to collapse loop exit.
     2155     Node* cmp = cl->loopexit()->cmp_node();
     2156     assert(cl->limit() == cmp->in(2), "sanity");
     2157     phase->_igvn._worklist.push(cmp->in(2)); // put limit on worklist
     2158     phase->_igvn.hash_delete(cmp);
     2159     cmp->set_req(2, exact_limit);
     2160     phase->_igvn._worklist.push(cmp);        // put cmp on worklist
     2161   }
     2162   // Note: the final value after increment should not overflow since
     2163   // counted loop has limit check predicate.
     2164   Node *final = new (phase->C, 3) SubINode( exact_limit, cl->stride() );
     2165   phase->register_new_node(final,cl->in(LoopNode::EntryControl));
     2166   phase->_igvn.replace_node(phi,final);
     2167   phase->C->set_major_progress();
     2168   return true;
     2169 }
     2170 
     2171 //------------------------------policy_do_one_iteration_loop-------------------
     2172 // Convert one iteration loop into normal code.
     2173 bool IdealLoopTree::policy_do_one_iteration_loop( PhaseIdealLoop *phase ) {
     2174   if (!_head->as_Loop()->is_valid_counted_loop())
     2175     return false; // Only for counted loop
     2176 
     2177   CountedLoopNode *cl = _head->as_CountedLoop();
     2178   if (!cl->has_exact_trip_count() || cl->trip_count() != 1) {
     2179     return false;
     2180   }
     2181 
     2182 #ifndef PRODUCT
     2183   if(TraceLoopOpts) {
     2184     tty->print("OneIteration ");
     2185     this->dump_head();
     2186   }
     2187 #endif
     2188 
     2189   Node *init_n = cl->init_trip();
     2190 #ifdef ASSERT
     2191   // Loop boundaries should be constant since trip count is exact.
     2192   assert(init_n->get_int() + cl->stride_con() >= cl->limit()->get_int(), "should be one iteration");
     2193 #endif
     2194   // Replace the phi at loop head with the value of the init_trip.
     2195   // Then the CountedLoopEnd will collapse (backedge will not be taken)
     2196   // and all loop-invariant uses of the exit values will be correct.
     2197   phase->_igvn.replace_node(cl->phi(), cl->init_trip());
     2198   phase->C->set_major_progress();
     2199   return true;
     2200 }
     2201 
     2202 //=============================================================================
     2203 //------------------------------iteration_split_impl---------------------------
     2204 bool IdealLoopTree::iteration_split_impl( PhaseIdealLoop *phase, Node_List &old_new ) {
     2205   // Compute exact loop trip count if possible.
     2206   compute_exact_trip_count(phase);
     2207 
     2208   // Convert one iteration loop into normal code.
     2209   if (policy_do_one_iteration_loop(phase))
     2210     return true;
     2211 
     2212   // Check and remove empty loops (spam micro-benchmarks)
     2213   if (policy_do_remove_empty_loop(phase))
     2214     return true;  // Here we removed an empty loop
     2215 
     2216   bool should_peel = policy_peeling(phase); // Should we peel?
     2217 
     2218   bool should_unswitch = policy_unswitching(phase);
     2219 
     2220   // Non-counted loops may be peeled; exactly 1 iteration is peeled.
     2221   // This removes loop-invariant tests (usually null checks).
     2222   if (!_head->is_CountedLoop()) { // Non-counted loop
     2223     if (PartialPeelLoop && phase->partial_peel(this, old_new)) {
     2224       // Partial peel succeeded so terminate this round of loop opts
     2225       return false;
     2226     }
     2227     if (should_peel) {            // Should we peel?
     2228 #ifndef PRODUCT
     2229       if (PrintOpto) tty->print_cr("should_peel");
     2230 #endif
     2231       phase->do_peeling(this,old_new);
     2232     } else if (should_unswitch) {
     2233       phase->do_unswitching(this, old_new);
     2234     }
     2235     return true;
     2236   }
     2237   CountedLoopNode *cl = _head->as_CountedLoop();
     2238 
     2239   if (!cl->loopexit()) return true; // Ignore various kinds of broken loops
     2240 
     2241   // Do nothing special to pre- and post- loops
     2242   if (cl->is_pre_loop() || cl->is_post_loop()) return true;
     2243 
     2244   // Compute loop trip count from profile data
     2245   compute_profile_trip_cnt(phase);
     2246 
     2247   // Before attempting fancy unrolling, RCE or alignment, see if we want
     2248   // to completely unroll this loop or do loop unswitching.
     2249   if (cl->is_normal_loop()) {
     2250     if (should_unswitch) {
     2251       phase->do_unswitching(this, old_new);
     2252       return true;
     2253     }
     2254     bool should_maximally_unroll =  policy_maximally_unroll(phase);
     2255     if (should_maximally_unroll) {
     2256       // Here we did some unrolling and peeling.  Eventually we will
     2257       // completely unroll this loop and it will no longer be a loop.
     2258       phase->do_maximally_unroll(this,old_new);
     2259       return true;
     2260     }
     2261   }
     2262 
     2263   // Skip next optimizations if running low on nodes. Note that
     2264   // policy_unswitching and policy_maximally_unroll have this check.
     2265   uint nodes_left = MaxNodeLimit - phase->C->unique();
     2266   if ((2 * _body.size()) > nodes_left) {
     2267     return true;
     2268   }
     2269 
     2270   // Counted loops may be peeled, may need some iterations run up
     2271   // front for RCE, and may want to align loop refs to a cache
     2272   // line.  Thus we clone a full loop up front whose trip count is
     2273   // at least 1 (if peeling), but may be several more.
     2274 
     2275   // The main loop will start cache-line aligned with at least 1
     2276   // iteration of the unrolled body (zero-trip test required) and
     2277   // will have some range checks removed.
     2278 
     2279   // A post-loop will finish any odd iterations (leftover after
     2280   // unrolling), plus any needed for RCE purposes.
     2281 
     2282   bool should_unroll = policy_unroll(phase);
     2283 
     2284   bool should_rce = policy_range_check(phase);
     2285 
     2286   bool should_align = policy_align(phase);
     2287 
     2288   // If not RCE'ing (iteration splitting) or Aligning, then we do not
     2289   // need a pre-loop.  We may still need to peel an initial iteration but
     2290   // we will not be needing an unknown number of pre-iterations.
     2291   //
     2292   // Basically, if may_rce_align reports FALSE first time through,
     2293   // we will not be able to later do RCE or Aligning on this loop.
     2294   bool may_rce_align = !policy_peel_only(phase) || should_rce || should_align;
     2295 
     2296   // If we have any of these conditions (RCE, alignment, unrolling) met, then
     2297   // we switch to the pre-/main-/post-loop model.  This model also covers
     2298   // peeling.
     2299   if (should_rce || should_align || should_unroll) {
     2300     if (cl->is_normal_loop())  // Convert to 'pre/main/post' loops
     2301       phase->insert_pre_post_loops(this,old_new, !may_rce_align);
     2302 
     2303     // Adjust the pre- and main-loop limits to let the pre and post loops run
     2304     // with full checks, but the main-loop with no checks.  Remove said
     2305     // checks from the main body.
     2306     if (should_rce)
     2307       phase->do_range_check(this,old_new);
     2308 
     2309     // Double loop body for unrolling.  Adjust the minimum-trip test (will do
     2310     // twice as many iterations as before) and the main body limit (only do
     2311     // an even number of trips).  If we are peeling, we might enable some RCE
     2312     // and we'd rather unroll the post-RCE'd loop SO... do not unroll if
     2313     // peeling.
     2314     if (should_unroll && !should_peel)
     2315       phase->do_unroll(this,old_new, true);
     2316 
     2317     // Adjust the pre-loop limits to align the main body
     2318     // iterations.
     2319     if (should_align)
     2320       Unimplemented();
     2321 
     2322   } else {                      // Else we have an unchanged counted loop
     2323     if (should_peel)           // Might want to peel but do nothing else
     2324       phase->do_peeling(this,old_new);
     2325   }
     2326   return true;
     2327 }
     2328 
     2329 
     2330 //=============================================================================
     2331 //------------------------------iteration_split--------------------------------
     2332 bool IdealLoopTree::iteration_split( PhaseIdealLoop *phase, Node_List &old_new ) {
     2333   // Recursively iteration split nested loops
     2334   if (_child && !_child->iteration_split(phase, old_new))
     2335     return false;
     2336 
     2337   // Clean out prior deadwood
     2338   DCE_loop_body();
     2339 
     2340 
     2341   // Look for loop-exit tests with my 50/50 guesses from the Parsing stage.
     2342   // Replace with a 1-in-10 exit guess.
     2343   if (_parent /*not the root loop*/ &&
     2344       !_irreducible &&
     2345       // Also ignore the occasional dead backedge
     2346       !tail()->is_top()) {
     2347     adjust_loop_exit_prob(phase);
     2348   }
     2349 
     2350   // Gate unrolling, RCE and peeling efforts.
     2351   if (!_child &&                // If not an inner loop, do not split
     2352       !_irreducible &&
     2353       _allow_optimizations &&
     2354       !tail()->is_top()) {     // Also ignore the occasional dead backedge
     2355     if (!_has_call) {
     2356         if (!iteration_split_impl(phase, old_new)) {
     2357           return false;
     2358         }
     2359     } else if (policy_unswitching(phase)) {
     2360       phase->do_unswitching(this, old_new);
     2361     }
     2362   }
     2363 
     2364   // Minor offset re-organization to remove loop-fallout uses of
     2365   // trip counter when there was no major reshaping.
     2366   phase->reorg_offsets(this);
     2367 
     2368   if (_next && !_next->iteration_split(phase, old_new))
     2369     return false;
     2370   return true;
     2371 }
     2372 
     2373 
     2374 //=============================================================================
     2375 // Process all the loops in the loop tree and replace any fill
     2376 // patterns with an intrisc version.
     2377 bool PhaseIdealLoop::do_intrinsify_fill() {
     2378   bool changed = false;
     2379   for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {
     2380     IdealLoopTree* lpt = iter.current();
     2381     changed |= intrinsify_fill(lpt);
     2382   }
     2383   return changed;
     2384 }
     2385 
     2386 
     2387 // Examine an inner loop looking for a a single store of an invariant
     2388 // value in a unit stride loop,
     2389 bool PhaseIdealLoop::match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
     2390                                      Node*& shift, Node*& con) {
     2391   const char* msg = NULL;
     2392   Node* msg_node = NULL;
     2393 
     2394   store_value = NULL;
     2395   con = NULL;
     2396   shift = NULL;
     2397 
     2398   // Process the loop looking for stores.  If there are multiple
     2399   // stores or extra control flow give at this point.
     2400   CountedLoopNode* head = lpt->_head->as_CountedLoop();
     2401   for (uint i = 0; msg == NULL && i < lpt->_body.size(); i++) {
     2402     Node* n = lpt->_body.at(i);
     2403     if (n->outcnt() == 0) continue; // Ignore dead
     2404     if (n->is_Store()) {
     2405       if (store != NULL) {
     2406         msg = "multiple stores";
     2407         break;
     2408       }
     2409       int opc = n->Opcode();
     2410       if (opc == Op_StoreP || opc == Op_StoreN || opc == Op_StoreCM) {
     2411         msg = "oop fills not handled";
     2412         break;
     2413       }
     2414       Node* value = n->in(MemNode::ValueIn);
     2415       if (!lpt->is_invariant(value)) {
     2416         msg  = "variant store value";
     2417       } else if (!_igvn.type(n->in(MemNode::Address))->isa_aryptr()) {
     2418         msg = "not array address";
     2419       }
     2420       store = n;
     2421       store_value = value;
     2422     } else if (n->is_If() && n != head->loopexit()) {
     2423       msg = "extra control flow";
     2424       msg_node = n;
     2425     }
     2426   }
     2427 
     2428   if (store == NULL) {
     2429     // No store in loop
     2430     return false;
     2431   }
     2432 
     2433   if (msg == NULL && head->stride_con() != 1) {
     2434     // could handle negative strides too
     2435     if (head->stride_con() < 0) {
     2436       msg = "negative stride";
     2437     } else {
     2438       msg = "non-unit stride";
     2439     }
     2440   }
     2441 
     2442   if (msg == NULL && !store->in(MemNode::Address)->is_AddP()) {
     2443     msg = "can't handle store address";
     2444     msg_node = store->in(MemNode::Address);
     2445   }
     2446 
     2447   if (msg == NULL &&
     2448       (!store->in(MemNode::Memory)->is_Phi() ||
     2449        store->in(MemNode::Memory)->in(LoopNode::LoopBackControl) != store)) {
     2450     msg = "store memory isn't proper phi";
     2451     msg_node = store->in(MemNode::Memory);
     2452   }
     2453 
     2454   // Make sure there is an appropriate fill routine
     2455   BasicType t = store->as_Mem()->memory_type();
     2456   const char* fill_name;
     2457   if (msg == NULL &&
     2458       StubRoutines::select_fill_function(t, false, fill_name) == NULL) {
     2459     msg = "unsupported store";
     2460     msg_node = store;
     2461   }
     2462 
     2463   if (msg != NULL) {
     2464 #ifndef PRODUCT
     2465     if (TraceOptimizeFill) {
     2466       tty->print_cr("not fill intrinsic candidate: %s", msg);
     2467       if (msg_node != NULL) msg_node->dump();
     2468     }
     2469 #endif
     2470     return false;
     2471   }
     2472 
     2473   // Make sure the address expression can be handled.  It should be
     2474   // head->phi * elsize + con.  head->phi might have a ConvI2L.
     2475   Node* elements[4];
     2476   Node* conv = NULL;
     2477   bool found_index = false;
     2478   int count = store->in(MemNode::Address)->as_AddP()->unpack_offsets(elements, ARRAY_SIZE(elements));
     2479   for (int e = 0; e < count; e++) {
     2480     Node* n = elements[e];
     2481     if (n->is_Con() && con == NULL) {
     2482       con = n;
     2483     } else if (n->Opcode() == Op_LShiftX && shift == NULL) {
     2484       Node* value = n->in(1);
     2485 #ifdef _LP64
     2486       if (value->Opcode() == Op_ConvI2L) {
     2487         conv = value;
     2488         value = value->in(1);
     2489       }
     2490 #endif
     2491       if (value != head->phi()) {
     2492         msg = "unhandled shift in address";
     2493       } else {
     2494         if (type2aelembytes(store->as_Mem()->memory_type(), true) != (1 << n->in(2)->get_int())) {
     2495           msg = "scale doesn't match";
     2496         } else {
     2497           found_index = true;
     2498           shift = n;
     2499         }
     2500       }
     2501     } else if (n->Opcode() == Op_ConvI2L && conv == NULL) {
     2502       if (n->in(1) == head->phi()) {
     2503         found_index = true;
     2504         conv = n;
     2505       } else {
     2506         msg = "unhandled input to ConvI2L";
     2507       }
     2508     } else if (n == head->phi()) {
     2509       // no shift, check below for allowed cases
     2510       found_index = true;
     2511     } else {
     2512       msg = "unhandled node in address";
     2513       msg_node = n;
     2514     }
     2515   }
     2516 
     2517   if (count == -1) {
     2518     msg = "malformed address expression";
     2519     msg_node = store;
     2520   }
     2521 
     2522   if (!found_index) {
     2523     msg = "missing use of index";
     2524   }
     2525 
     2526   // byte sized items won't have a shift
     2527   if (msg == NULL && shift == NULL && t != T_BYTE && t != T_BOOLEAN) {
     2528     msg = "can't find shift";
     2529     msg_node = store;
     2530   }
     2531 
     2532   if (msg != NULL) {
     2533 #ifndef PRODUCT
     2534     if (TraceOptimizeFill) {
     2535       tty->print_cr("not fill intrinsic: %s", msg);
     2536       if (msg_node != NULL) msg_node->dump();
     2537     }
     2538 #endif
     2539     return false;
     2540   }
     2541 
     2542   // No make sure all the other nodes in the loop can be handled
     2543   VectorSet ok(Thread::current()->resource_area());
     2544 
     2545   // store related values are ok
     2546   ok.set(store->_idx);
     2547   ok.set(store->in(MemNode::Memory)->_idx);
     2548 
     2549   // Loop structure is ok
     2550   ok.set(head->_idx);
     2551   ok.set(head->loopexit()->_idx);
     2552   ok.set(head->phi()->_idx);
     2553   ok.set(head->incr()->_idx);
     2554   ok.set(head->loopexit()->cmp_node()->_idx);
     2555   ok.set(head->loopexit()->in(1)->_idx);
     2556 
     2557   // Address elements are ok
     2558   if (con)   ok.set(con->_idx);
     2559   if (shift) ok.set(shift->_idx);
     2560   if (conv)  ok.set(conv->_idx);
     2561 
     2562   for (uint i = 0; msg == NULL && i < lpt->_body.size(); i++) {
     2563     Node* n = lpt->_body.at(i);
     2564     if (n->outcnt() == 0) continue; // Ignore dead
     2565     if (ok.test(n->_idx)) continue;
     2566     // Backedge projection is ok
     2567     if (n->is_IfTrue() && n->in(0) == head->loopexit()) continue;
     2568     if (!n->is_AddP()) {
     2569       msg = "unhandled node";
     2570       msg_node = n;
     2571       break;
     2572     }
     2573   }
     2574 
     2575   // Make sure no unexpected values are used outside the loop
     2576   for (uint i = 0; msg == NULL && i < lpt->_body.size(); i++) {
     2577     Node* n = lpt->_body.at(i);
     2578     // These values can be replaced with other nodes if they are used
     2579     // outside the loop.
     2580     if (n == store || n == head->loopexit() || n == head->incr() || n == store->in(MemNode::Memory)) continue;
     2581     for (SimpleDUIterator iter(n); iter.has_next(); iter.next()) {
     2582       Node* use = iter.get();
     2583       if (!lpt->_body.contains(use)) {
     2584         msg = "node is used outside loop";
     2585         // lpt->_body.dump();
     2586         msg_node = n;
     2587         break;
     2588       }
     2589     }
     2590   }
     2591 
     2592 #ifdef ASSERT
     2593   if (TraceOptimizeFill) {
     2594     if (msg != NULL) {
     2595       tty->print_cr("no fill intrinsic: %s", msg);
     2596       if (msg_node != NULL) msg_node->dump();
     2597     } else {
     2598       tty->print_cr("fill intrinsic for:");
     2599     }
     2600     store->dump();
     2601     if (Verbose) {
     2602       lpt->_body.dump();
     2603     }
     2604   }
     2605 #endif
     2606 
     2607   return msg == NULL;
     2608 }
     2609 
     2610 
     2611 
     2612 bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) {
     2613   // Only for counted inner loops
     2614   if (!lpt->is_counted() || !lpt->is_inner()) {
     2615     return false;
     2616   }
     2617 
     2618   // Must have constant stride
     2619   CountedLoopNode* head = lpt->_head->as_CountedLoop();
     2620   if (!head->stride_is_con() || !head->is_normal_loop()) {
     2621     return false;
     2622   }
     2623 
     2624   // Check that the body only contains a store of a loop invariant
     2625   // value that is indexed by the loop phi.
     2626   Node* store = NULL;
     2627   Node* store_value = NULL;
     2628   Node* shift = NULL;
     2629   Node* offset = NULL;
     2630   if (!match_fill_loop(lpt, store, store_value, shift, offset)) {
     2631     return false;
     2632   }
     2633 
     2634 #ifndef PRODUCT
     2635   if (TraceLoopOpts) {
     2636     tty->print("ArrayFill    ");
     2637     lpt->dump_head();
     2638   }
     2639 #endif
     2640 
     2641   // Now replace the whole loop body by a call to a fill routine that
     2642   // covers the same region as the loop.
     2643   Node* base = store->in(MemNode::Address)->as_AddP()->in(AddPNode::Base);
     2644 
     2645   // Build an expression for the beginning of the copy region
     2646   Node* index = head->init_trip();
     2647 #ifdef _LP64
     2648   index = new (C, 2) ConvI2LNode(index);
     2649   _igvn.register_new_node_with_optimizer(index);
     2650 #endif
     2651   if (shift != NULL) {
     2652     // byte arrays don't require a shift but others do.
     2653     index = new (C, 3) LShiftXNode(index, shift->in(2));
     2654     _igvn.register_new_node_with_optimizer(index);
     2655   }
     2656   index = new (C, 4) AddPNode(base, base, index);
     2657   _igvn.register_new_node_with_optimizer(index);
     2658   Node* from = new (C, 4) AddPNode(base, index, offset);
     2659   _igvn.register_new_node_with_optimizer(from);
     2660   // Compute the number of elements to copy
     2661   Node* len = new (C, 3) SubINode(head->limit(), head->init_trip());
     2662   _igvn.register_new_node_with_optimizer(len);
     2663 
     2664   BasicType t = store->as_Mem()->memory_type();
     2665   bool aligned = false;
     2666   if (offset != NULL && head->init_trip()->is_Con()) {
     2667     int element_size = type2aelembytes(t);
     2668     aligned = (offset->find_intptr_t_type()->get_con() + head->init_trip()->get_int() * element_size) % HeapWordSize == 0;
     2669   }
     2670 
     2671   // Build a call to the fill routine
     2672   const char* fill_name;
     2673   address fill = StubRoutines::select_fill_function(t, aligned, fill_name);
     2674   assert(fill != NULL, "what?");
     2675 
     2676   // Convert float/double to int/long for fill routines
     2677   if (t == T_FLOAT) {
     2678     store_value = new (C, 2) MoveF2INode(store_value);
     2679     _igvn.register_new_node_with_optimizer(store_value);
     2680   } else if (t == T_DOUBLE) {
     2681     store_value = new (C, 2) MoveD2LNode(store_value);
     2682     _igvn.register_new_node_with_optimizer(store_value);
     2683   }
     2684 
     2685   Node* mem_phi = store->in(MemNode::Memory);
     2686   Node* result_ctrl;
     2687   Node* result_mem;
     2688   const TypeFunc* call_type = OptoRuntime::array_fill_Type();
     2689   int size = call_type->domain()->cnt();
     2690   CallLeafNode *call = new (C, size) CallLeafNoFPNode(call_type, fill,
     2691                                                       fill_name, TypeAryPtr::get_array_body_type(t));
     2692   call->init_req(TypeFunc::Parms+0, from);
     2693   call->init_req(TypeFunc::Parms+1, store_value);
     2694 #ifdef _LP64
     2695   len = new (C, 2) ConvI2LNode(len);
     2696   _igvn.register_new_node_with_optimizer(len);
     2697 #endif
     2698   call->init_req(TypeFunc::Parms+2, len);
     2699 #ifdef _LP64
     2700   call->init_req(TypeFunc::Parms+3, C->top());
     2701 #endif
     2702   call->init_req( TypeFunc::Control, head->init_control());
     2703   call->init_req( TypeFunc::I_O    , C->top() )        ;   // does no i/o
     2704   call->init_req( TypeFunc::Memory ,  mem_phi->in(LoopNode::EntryControl) );
     2705   call->init_req( TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr) );
     2706   call->init_req( TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr) );
     2707   _igvn.register_new_node_with_optimizer(call);
     2708   result_ctrl = new (C, 1) ProjNode(call,TypeFunc::Control);
     2709   _igvn.register_new_node_with_optimizer(result_ctrl);
     2710   result_mem = new (C, 1) ProjNode(call,TypeFunc::Memory);
     2711   _igvn.register_new_node_with_optimizer(result_mem);
     2712 
     2713   // If this fill is tightly coupled to an allocation and overwrites
     2714   // the whole body, allow it to take over the zeroing.
     2715   AllocateNode* alloc = AllocateNode::Ideal_allocation(base, this);
     2716   if (alloc != NULL && alloc->is_AllocateArray()) {
     2717     Node* length = alloc->as_AllocateArray()->Ideal_length();
     2718     if (head->limit() == length &&
     2719         head->init_trip() == _igvn.intcon(0)) {
     2720       if (TraceOptimizeFill) {
     2721         tty->print_cr("Eliminated zeroing in allocation");
     2722       }
     2723       alloc->maybe_set_complete(&_igvn);
     2724     } else {
     2725 #ifdef ASSERT
     2726       if (TraceOptimizeFill) {
     2727         tty->print_cr("filling array but bounds don't match");
     2728         alloc->dump();
     2729         head->init_trip()->dump();
     2730         head->limit()->dump();
     2731         length->dump();
     2732       }
     2733 #endif
     2734     }
     2735   }
     2736 
     2737   // Redirect the old control and memory edges that are outside the loop.
     2738   Node* exit = head->loopexit()->proj_out(0);
     2739   // Sometimes the memory phi of the head is used as the outgoing
     2740   // state of the loop.  It's safe in this case to replace it with the
     2741   // result_mem.
     2742   _igvn.replace_node(store->in(MemNode::Memory), result_mem);
     2743   _igvn.replace_node(exit, result_ctrl);
     2744   _igvn.replace_node(store, result_mem);
     2745   // Any uses the increment outside of the loop become the loop limit.
     2746   _igvn.replace_node(head->incr(), head->limit());
     2747 
     2748   // Disconnect the head from the loop.
     2749   for (uint i = 0; i < lpt->_body.size(); i++) {
     2750     Node* n = lpt->_body.at(i);
     2751     _igvn.replace_node(n, C->top());
     2752   }
     2753 
     2754   return true;
     2755 }