OSDN Git Service

- fix whitespace in laste gcc/ChangeLog entry
[pf3gnuchains/gcc-fork.git] / gcc / tree-scalar-evolution.h
index def30b4..dd1bdfc 100644 (file)
@@ -1,12 +1,13 @@
 /* Scalar evolution detector.
 /* Scalar evolution detector.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
    Contributed by Sebastian Pop <s.pop@laposte.net>
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
    Contributed by Sebastian Pop <s.pop@laposte.net>
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -15,23 +16,56 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_TREE_SCALAR_EVOLUTION_H
 #define GCC_TREE_SCALAR_EVOLUTION_H
 
 
 #ifndef GCC_TREE_SCALAR_EVOLUTION_H
 #define GCC_TREE_SCALAR_EVOLUTION_H
 
-extern tree number_of_iterations_in_loop (struct loop *);
-extern tree get_loop_exit_condition (struct loop *);
+extern tree number_of_latch_executions (struct loop *);
+extern tree number_of_exit_cond_executions (struct loop *);
+extern gimple get_loop_exit_condition (const struct loop *);
 
 
-extern void scev_initialize (struct loops *loops);
+extern void scev_initialize (void);
 extern void scev_reset (void);
 extern void scev_reset (void);
+extern void scev_reset_htab (void);
 extern void scev_finalize (void);
 extern tree analyze_scalar_evolution (struct loop *, tree);
 extern void scev_finalize (void);
 extern tree analyze_scalar_evolution (struct loop *, tree);
-extern tree instantiate_parameters (struct loop *, tree);
+extern tree instantiate_scev (basic_block, struct loop *, tree);
+extern tree resolve_mixers (struct loop *, tree);
 extern void gather_stats_on_scev_database (void);
 extern void scev_analysis (void);
 extern void gather_stats_on_scev_database (void);
 extern void scev_analysis (void);
-extern bool simple_iv (struct loop *, tree, tree, tree *, tree *, bool);
+extern unsigned int scev_const_prop (void);
+extern bool expression_expensive_p (tree);
+extern bool simple_iv (struct loop *, struct loop *, tree, affine_iv *, bool);
+extern tree compute_overall_effect_of_inner_loop (struct loop *, tree);
+
+/* Returns the basic block preceding LOOP or ENTRY_BLOCK_PTR when the
+   loop is function's body.  */
+
+static inline basic_block
+block_before_loop (loop_p loop)
+{
+  edge preheader = loop_preheader_edge (loop);
+  return (preheader ? preheader->src : ENTRY_BLOCK_PTR);
+}
+
+/* Analyze all the parameters of the chrec that were left under a
+   symbolic form.  LOOP is the loop in which symbolic names have to
+   be analyzed and instantiated.  */
+
+static inline tree
+instantiate_parameters (struct loop *loop, tree chrec)
+{
+  return instantiate_scev (block_before_loop (loop), loop, chrec);
+}
+
+/* Returns the loop of the polynomial chrec CHREC.  */
+
+static inline struct loop *
+get_chrec_loop (const_tree chrec)
+{
+  return get_loop (CHREC_VARIABLE (chrec));
+}
 
 #endif  /* GCC_TREE_SCALAR_EVOLUTION_H  */
 
 #endif  /* GCC_TREE_SCALAR_EVOLUTION_H  */