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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [tree-affine.h] - Diff between revs 816 and 826

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

Rev 816 Rev 826
/* Operations with affine combinations of trees.
/* Operations with affine combinations of trees.
   Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
   Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
 
 
This file is part of GCC.
This file is part of GCC.
 
 
GCC is free software; you can redistribute it and/or modify it
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
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
Free Software Foundation; either version 3, or (at your option) any
later version.
later version.
 
 
GCC is distributed in the hope that it will be useful, but WITHOUT
GCC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ANY 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/>.  */
 
 
/* Affine combination of trees.  We keep track of at most MAX_AFF_ELTS elements
/* Affine combination of trees.  We keep track of at most MAX_AFF_ELTS elements
   to make things simpler; this is sufficient in most cases.  */
   to make things simpler; this is sufficient in most cases.  */
 
 
#define MAX_AFF_ELTS 8
#define MAX_AFF_ELTS 8
 
 
/* Element of an affine combination.  */
/* Element of an affine combination.  */
 
 
struct aff_comb_elt
struct aff_comb_elt
{
{
  /* The value of the element.  */
  /* The value of the element.  */
  tree val;
  tree val;
 
 
  /* Its coefficient in the combination.  */
  /* Its coefficient in the combination.  */
  double_int coef;
  double_int coef;
};
};
 
 
typedef struct affine_tree_combination
typedef struct affine_tree_combination
{
{
  /* Type of the result of the combination.  */
  /* Type of the result of the combination.  */
  tree type;
  tree type;
 
 
  /* Constant offset.  */
  /* Constant offset.  */
  double_int offset;
  double_int offset;
 
 
  /* Number of elements of the combination.  */
  /* Number of elements of the combination.  */
  unsigned n;
  unsigned n;
 
 
  /* Elements and their coefficients.  Type of elements may be different from
  /* Elements and their coefficients.  Type of elements may be different from
     TYPE, but their sizes must be the same (STRIP_NOPS is applied to the
     TYPE, but their sizes must be the same (STRIP_NOPS is applied to the
     elements).
     elements).
 
 
     The coefficients are always sign extended from the precision of TYPE
     The coefficients are always sign extended from the precision of TYPE
     (regardless of signedness of TYPE).  */
     (regardless of signedness of TYPE).  */
  struct aff_comb_elt elts[MAX_AFF_ELTS];
  struct aff_comb_elt elts[MAX_AFF_ELTS];
 
 
  /* Remainder of the expression.  Usually NULL, used only if there are more
  /* Remainder of the expression.  Usually NULL, used only if there are more
     than MAX_AFF_ELTS elements.  Type of REST will be either sizetype for
     than MAX_AFF_ELTS elements.  Type of REST will be either sizetype for
     TYPE of POINTER_TYPEs or TYPE.  */
     TYPE of POINTER_TYPEs or TYPE.  */
  tree rest;
  tree rest;
} aff_tree;
} aff_tree;
 
 
double_int double_int_ext_for_comb (double_int, aff_tree *);
double_int double_int_ext_for_comb (double_int, aff_tree *);
void aff_combination_const (aff_tree *, tree, double_int);
void aff_combination_const (aff_tree *, tree, double_int);
void aff_combination_elt (aff_tree *, tree, tree);
void aff_combination_elt (aff_tree *, tree, tree);
void aff_combination_scale (aff_tree *, double_int);
void aff_combination_scale (aff_tree *, double_int);
void aff_combination_mult (aff_tree *, aff_tree *, aff_tree *);
void aff_combination_mult (aff_tree *, aff_tree *, aff_tree *);
void aff_combination_add (aff_tree *, aff_tree *);
void aff_combination_add (aff_tree *, aff_tree *);
void aff_combination_add_elt (aff_tree *, tree, double_int);
void aff_combination_add_elt (aff_tree *, tree, double_int);
void aff_combination_remove_elt (aff_tree *, unsigned);
void aff_combination_remove_elt (aff_tree *, unsigned);
void aff_combination_convert (aff_tree *, tree);
void aff_combination_convert (aff_tree *, tree);
void tree_to_aff_combination (tree, tree, aff_tree *);
void tree_to_aff_combination (tree, tree, aff_tree *);
tree aff_combination_to_tree (aff_tree *);
tree aff_combination_to_tree (aff_tree *);
void unshare_aff_combination (aff_tree *);
void unshare_aff_combination (aff_tree *);
bool aff_combination_constant_multiple_p (aff_tree *, aff_tree *, double_int *);
bool aff_combination_constant_multiple_p (aff_tree *, aff_tree *, double_int *);
void aff_combination_expand (aff_tree *, struct pointer_map_t **);
void aff_combination_expand (aff_tree *, struct pointer_map_t **);
void tree_to_aff_combination_expand (tree, tree, aff_tree *,
void tree_to_aff_combination_expand (tree, tree, aff_tree *,
                                     struct pointer_map_t **);
                                     struct pointer_map_t **);
void get_inner_reference_aff (tree, aff_tree *, double_int *);
void get_inner_reference_aff (tree, aff_tree *, double_int *);
void free_affine_expand_cache (struct pointer_map_t **);
void free_affine_expand_cache (struct pointer_map_t **);
 
 
/* Debugging functions.  */
/* Debugging functions.  */
void print_aff (FILE *, aff_tree *);
void print_aff (FILE *, aff_tree *);
void debug_aff (aff_tree *);
void debug_aff (aff_tree *);
 
 

powered by: WebSVN 2.1.0

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