< prev index next >

src/hotspot/share/opto/loopnode.cpp

Print this page

3874   } else {
3875     // Note that it is possible for a LoopNode to reach here, if the
3876     // backedge has been made unreachable (hence the LoopNode no longer
3877     // denotes a Loop, and will eventually be removed).
3878 
3879     // Record tightest enclosing loop for self.  Mark as post-visited.
3880     set_loop(n, innermost);
3881     // Also record has_call flag early on
3882     if( innermost ) {
3883       if( n->is_Call() && !n->is_CallLeaf() && !n->is_macro() ) {
3884         // Do not count uncommon calls
3885         if( !n->is_CallStaticJava() || !n->as_CallStaticJava()->_name ) {
3886           Node *iff = n->in(0)->in(0);
3887           // No any calls for vectorized loops.
3888           if( UseSuperWord || !iff->is_If() ||
3889               (n->in(0)->Opcode() == Op_IfFalse &&
3890                (1.0 - iff->as_If()->_prob) >= 0.01) ||
3891               (iff->as_If()->_prob >= 0.01) )
3892             innermost->_has_call = 1;
3893         }
3894       } else if( n->is_Allocate() && n->as_Allocate()->_is_scalar_replaceable ) {
3895         // Disable loop optimizations if the loop has a scalar replaceable
3896         // allocation. This disabling may cause a potential performance lost
3897         // if the allocation is not eliminated for some reason.
3898         innermost->_allow_optimizations = false;
3899         innermost->_has_call = 1; // = true
3900       } else if (n->Opcode() == Op_SafePoint) {
3901         // Record all safepoints in this loop.
3902         if (innermost->_safepts == NULL) innermost->_safepts = new Node_List();
3903         innermost->_safepts->push(n);
3904       }
3905     }
3906   }
3907 
3908   // Flag as post-visited now
3909   set_postvisited(n);
3910   return pre_order;
3911 }
3912 
3913 
3914 //------------------------------build_loop_early-------------------------------

3874   } else {
3875     // Note that it is possible for a LoopNode to reach here, if the
3876     // backedge has been made unreachable (hence the LoopNode no longer
3877     // denotes a Loop, and will eventually be removed).
3878 
3879     // Record tightest enclosing loop for self.  Mark as post-visited.
3880     set_loop(n, innermost);
3881     // Also record has_call flag early on
3882     if( innermost ) {
3883       if( n->is_Call() && !n->is_CallLeaf() && !n->is_macro() ) {
3884         // Do not count uncommon calls
3885         if( !n->is_CallStaticJava() || !n->as_CallStaticJava()->_name ) {
3886           Node *iff = n->in(0)->in(0);
3887           // No any calls for vectorized loops.
3888           if( UseSuperWord || !iff->is_If() ||
3889               (n->in(0)->Opcode() == Op_IfFalse &&
3890                (1.0 - iff->as_If()->_prob) >= 0.01) ||
3891               (iff->as_If()->_prob >= 0.01) )
3892             innermost->_has_call = 1;
3893         }
3894       } else if( n->is_Allocate() && (n->as_Allocate()->_is_scalar_replaceable || n->as_Allocate()->_is_stack_allocateable) ) {
3895         // Disable loop optimizations if the loop has a scalar replaceable
3896         // allocation. This disabling may cause a potential performance lost
3897         // if the allocation is not eliminated for some reason.
3898         innermost->_allow_optimizations = false;
3899         innermost->_has_call = 1; // = true
3900       } else if (n->Opcode() == Op_SafePoint) {
3901         // Record all safepoints in this loop.
3902         if (innermost->_safepts == NULL) innermost->_safepts = new Node_List();
3903         innermost->_safepts->push(n);
3904       }
3905     }
3906   }
3907 
3908   // Flag as post-visited now
3909   set_postvisited(n);
3910   return pre_order;
3911 }
3912 
3913 
3914 //------------------------------build_loop_early-------------------------------
< prev index next >