OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [tree-scalar-evolution.h] - Diff between revs 280 and 338

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 280 Rev 338
/* Scalar evolution detector.
/* Scalar evolution detector.
   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
   Contributed by Sebastian Pop <s.pop@laposte.net>
   Contributed by Sebastian Pop <s.pop@laposte.net>
 
 
This file is part of GCC.
This file is part of GCC.
 
 
GCC is free software; you can redistribute it and/or modify it under
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
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
Software Foundation; either version 3, or (at your option) any later
version.
version.
 
 
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */
<http://www.gnu.org/licenses/>.  */
 
 
#ifndef GCC_TREE_SCALAR_EVOLUTION_H
#ifndef GCC_TREE_SCALAR_EVOLUTION_H
#define GCC_TREE_SCALAR_EVOLUTION_H
#define GCC_TREE_SCALAR_EVOLUTION_H
 
 
extern tree number_of_latch_executions (struct loop *);
extern tree number_of_latch_executions (struct loop *);
extern tree number_of_exit_cond_executions (struct loop *);
extern tree number_of_exit_cond_executions (struct loop *);
extern gimple get_loop_exit_condition (const struct loop *);
extern gimple get_loop_exit_condition (const struct loop *);
 
 
extern void scev_initialize (void);
extern void scev_initialize (void);
extern void scev_reset (void);
extern void scev_reset (void);
extern void scev_reset_htab (void);
extern void scev_reset_htab (void);
extern void scev_finalize (void);
extern void scev_finalize (void);
extern tree analyze_scalar_evolution (struct loop *, tree);
extern tree analyze_scalar_evolution (struct loop *, tree);
extern tree instantiate_scev (basic_block, struct loop *, tree);
extern tree instantiate_scev (basic_block, struct loop *, tree);
extern tree resolve_mixers (struct loop *, tree);
extern tree resolve_mixers (struct loop *, tree);
extern void gather_stats_on_scev_database (void);
extern void gather_stats_on_scev_database (void);
extern void scev_analysis (void);
extern void scev_analysis (void);
extern unsigned int scev_const_prop (void);
extern unsigned int scev_const_prop (void);
extern bool expression_expensive_p (tree);
extern bool expression_expensive_p (tree);
extern bool simple_iv (struct loop *, struct loop *, tree, affine_iv *, bool);
extern bool simple_iv (struct loop *, struct loop *, tree, affine_iv *, bool);
extern tree compute_overall_effect_of_inner_loop (struct loop *, tree);
extern tree compute_overall_effect_of_inner_loop (struct loop *, tree);
 
 
/* Returns the basic block preceding LOOP or ENTRY_BLOCK_PTR when the
/* Returns the basic block preceding LOOP or ENTRY_BLOCK_PTR when the
   loop is function's body.  */
   loop is function's body.  */
 
 
static inline basic_block
static inline basic_block
block_before_loop (loop_p loop)
block_before_loop (loop_p loop)
{
{
  edge preheader = loop_preheader_edge (loop);
  edge preheader = loop_preheader_edge (loop);
  return (preheader ? preheader->src : ENTRY_BLOCK_PTR);
  return (preheader ? preheader->src : ENTRY_BLOCK_PTR);
}
}
 
 
/* Analyze all the parameters of the chrec that were left under a
/* Analyze all the parameters of the chrec that were left under a
   symbolic form.  LOOP is the loop in which symbolic names have to
   symbolic form.  LOOP is the loop in which symbolic names have to
   be analyzed and instantiated.  */
   be analyzed and instantiated.  */
 
 
static inline tree
static inline tree
instantiate_parameters (struct loop *loop, tree chrec)
instantiate_parameters (struct loop *loop, tree chrec)
{
{
  return instantiate_scev (block_before_loop (loop), loop, chrec);
  return instantiate_scev (block_before_loop (loop), loop, chrec);
}
}
 
 
/* Returns the loop of the polynomial chrec CHREC.  */
/* Returns the loop of the polynomial chrec CHREC.  */
 
 
static inline struct loop *
static inline struct loop *
get_chrec_loop (const_tree chrec)
get_chrec_loop (const_tree chrec)
{
{
  return get_loop (CHREC_VARIABLE (chrec));
  return get_loop (CHREC_VARIABLE (chrec));
}
}
 
 
#endif  /* GCC_TREE_SCALAR_EVOLUTION_H  */
#endif  /* GCC_TREE_SCALAR_EVOLUTION_H  */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.