hotspot/src/share/vm/opto/loopTransform.cpp
changeset 22851 4c4b6a45be43
parent 22838 82c7497fbad4
parent 21526 03b4acedb351
child 22872 b6902ee5bc8d
equal deleted inserted replaced
22850:4e69ce7e1101 22851:4c4b6a45be43
  1962       assert(iff->is_If(), "");
  1962       assert(iff->is_If(), "");
  1963       ProjNode* dp = ((IfNode*)iff)->proj_out(1-flip);
  1963       ProjNode* dp = ((IfNode*)iff)->proj_out(1-flip);
  1964       // Find loads off the surviving projection; remove their control edge
  1964       // Find loads off the surviving projection; remove their control edge
  1965       for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
  1965       for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
  1966         Node* cd = dp->fast_out(i); // Control-dependent node
  1966         Node* cd = dp->fast_out(i); // Control-dependent node
  1967         if( cd->is_Load() ) {   // Loads can now float around in the loop
  1967         if (cd->is_Load() && cd->depends_only_on_test()) {   // Loads can now float around in the loop
  1968           // Allow the load to float around in the loop, or before it
  1968           // Allow the load to float around in the loop, or before it
  1969           // but NOT before the pre-loop.
  1969           // but NOT before the pre-loop.
  1970           _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL
  1970           _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL
  1971           --i;
  1971           --i;
  1972           --imax;
  1972           --imax;