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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [tree-affine.h] - Blame information for rev 818

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 684 jeremybenn
/* Operations with affine combinations of trees.
2
   Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
3
 
4
This file is part of GCC.
5
 
6
GCC is free software; you can redistribute it and/or modify it
7
under the terms of the GNU General Public License as published by the
8
Free Software Foundation; either version 3, or (at your option) any
9
later version.
10
 
11
GCC is distributed in the hope that it will be useful, but WITHOUT
12
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14
for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GCC; see the file COPYING3.  If not see
18
<http://www.gnu.org/licenses/>.  */
19
 
20
/* Affine combination of trees.  We keep track of at most MAX_AFF_ELTS elements
21
   to make things simpler; this is sufficient in most cases.  */
22
 
23
#define MAX_AFF_ELTS 8
24
 
25
/* Element of an affine combination.  */
26
 
27
struct aff_comb_elt
28
{
29
  /* The value of the element.  */
30
  tree val;
31
 
32
  /* Its coefficient in the combination.  */
33
  double_int coef;
34
};
35
 
36
typedef struct affine_tree_combination
37
{
38
  /* Type of the result of the combination.  */
39
  tree type;
40
 
41
  /* Constant offset.  */
42
  double_int offset;
43
 
44
  /* Number of elements of the combination.  */
45
  unsigned n;
46
 
47
  /* Elements and their coefficients.  Type of elements may be different from
48
     TYPE, but their sizes must be the same (STRIP_NOPS is applied to the
49
     elements).
50
 
51
     The coefficients are always sign extended from the precision of TYPE
52
     (regardless of signedness of TYPE).  */
53
  struct aff_comb_elt elts[MAX_AFF_ELTS];
54
 
55
  /* Remainder of the expression.  Usually NULL, used only if there are more
56
     than MAX_AFF_ELTS elements.  Type of REST will be either sizetype for
57
     TYPE of POINTER_TYPEs or TYPE.  */
58
  tree rest;
59
} aff_tree;
60
 
61
double_int double_int_ext_for_comb (double_int, aff_tree *);
62
void aff_combination_const (aff_tree *, tree, double_int);
63
void aff_combination_elt (aff_tree *, tree, tree);
64
void aff_combination_scale (aff_tree *, double_int);
65
void aff_combination_mult (aff_tree *, aff_tree *, aff_tree *);
66
void aff_combination_add (aff_tree *, aff_tree *);
67
void aff_combination_add_elt (aff_tree *, tree, double_int);
68
void aff_combination_remove_elt (aff_tree *, unsigned);
69
void aff_combination_convert (aff_tree *, tree);
70
void tree_to_aff_combination (tree, tree, aff_tree *);
71
tree aff_combination_to_tree (aff_tree *);
72
void unshare_aff_combination (aff_tree *);
73
bool aff_combination_constant_multiple_p (aff_tree *, aff_tree *, double_int *);
74
void aff_combination_expand (aff_tree *, struct pointer_map_t **);
75
void tree_to_aff_combination_expand (tree, tree, aff_tree *,
76
                                     struct pointer_map_t **);
77
void get_inner_reference_aff (tree, aff_tree *, double_int *);
78
void free_affine_expand_cache (struct pointer_map_t **);
79
bool aff_comb_cannot_overlap_p (aff_tree *, double_int, double_int);
80
 
81
/* Debugging functions.  */
82
void print_aff (FILE *, aff_tree *);
83
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.