< prev index next >

src/share/vm/opto/loopnode.hpp

Print this page


   1 /*
   2  * Copyright (c) 1998, 2015, 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  *


 503   bool policy_unroll(PhaseIdealLoop *phase);
 504 
 505   // Loop analyses to map to a maximal superword unrolling for vectorization.
 506   void policy_unroll_slp_analysis(CountedLoopNode *cl, PhaseIdealLoop *phase, int future_unroll_ct);
 507 
 508   // Return TRUE or FALSE if the loop should be range-check-eliminated.
 509   // Gather a list of IF tests that are dominated by iteration splitting;
 510   // also gather the end of the first split and the start of the 2nd split.
 511   bool policy_range_check( PhaseIdealLoop *phase ) const;
 512 
 513   // Return TRUE or FALSE if the loop should be cache-line aligned.
 514   // Gather the expression that does the alignment.  Note that only
 515   // one array base can be aligned in a loop (unless the VM guarantees
 516   // mutual alignment).  Note that if we vectorize short memory ops
 517   // into longer memory ops, we may want to increase alignment.
 518   bool policy_align( PhaseIdealLoop *phase ) const;
 519 
 520   // Return TRUE if "iff" is a range check.
 521   bool is_range_check_if(IfNode *iff, PhaseIdealLoop *phase, Invariance& invar) const;
 522 
 523   // Compute loop exact trip count if possible
 524   void compute_exact_trip_count( PhaseIdealLoop *phase );
 525 
 526   // Compute loop trip count from profile data
 527   void compute_profile_trip_cnt( PhaseIdealLoop *phase );
 528 
 529   // Reassociate invariant expressions.
 530   void reassociate_invariants(PhaseIdealLoop *phase);
 531   // Reassociate invariant add and subtract expressions.
 532   Node* reassociate_add_sub(Node* n1, PhaseIdealLoop *phase);
 533   // Return nonzero index of invariant operand if invariant and variant
 534   // are combined with an Add or Sub. Helper for reassociate_invariants.
 535   int is_invariant_addition(Node* n, PhaseIdealLoop *phase);
 536 
 537   // Return true if n is invariant
 538   bool is_invariant(Node* n) const;
 539 
 540   // Put loop body on igvn work list
 541   void record_for_igvn();
 542 
 543   bool is_loop()    { return !_irreducible && _tail && !_tail->is_top(); }
 544   bool is_inner()   { return is_loop() && _child == NULL; }


   1 /*
   2  * Copyright (c) 1998, 2016, 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  *


 503   bool policy_unroll(PhaseIdealLoop *phase);
 504 
 505   // Loop analyses to map to a maximal superword unrolling for vectorization.
 506   void policy_unroll_slp_analysis(CountedLoopNode *cl, PhaseIdealLoop *phase, int future_unroll_ct);
 507 
 508   // Return TRUE or FALSE if the loop should be range-check-eliminated.
 509   // Gather a list of IF tests that are dominated by iteration splitting;
 510   // also gather the end of the first split and the start of the 2nd split.
 511   bool policy_range_check( PhaseIdealLoop *phase ) const;
 512 
 513   // Return TRUE or FALSE if the loop should be cache-line aligned.
 514   // Gather the expression that does the alignment.  Note that only
 515   // one array base can be aligned in a loop (unless the VM guarantees
 516   // mutual alignment).  Note that if we vectorize short memory ops
 517   // into longer memory ops, we may want to increase alignment.
 518   bool policy_align( PhaseIdealLoop *phase ) const;
 519 
 520   // Return TRUE if "iff" is a range check.
 521   bool is_range_check_if(IfNode *iff, PhaseIdealLoop *phase, Invariance& invar) const;
 522 
 523   // Compute loop trip count if possible
 524   void compute_trip_count(PhaseIdealLoop* phase);
 525 
 526   // Compute loop trip count from profile data
 527   void compute_profile_trip_cnt( PhaseIdealLoop *phase );
 528 
 529   // Reassociate invariant expressions.
 530   void reassociate_invariants(PhaseIdealLoop *phase);
 531   // Reassociate invariant add and subtract expressions.
 532   Node* reassociate_add_sub(Node* n1, PhaseIdealLoop *phase);
 533   // Return nonzero index of invariant operand if invariant and variant
 534   // are combined with an Add or Sub. Helper for reassociate_invariants.
 535   int is_invariant_addition(Node* n, PhaseIdealLoop *phase);
 536 
 537   // Return true if n is invariant
 538   bool is_invariant(Node* n) const;
 539 
 540   // Put loop body on igvn work list
 541   void record_for_igvn();
 542 
 543   bool is_loop()    { return !_irreducible && _tail && !_tail->is_top(); }
 544   bool is_inner()   { return is_loop() && _child == NULL; }


< prev index next >