GCC Middle and Back End API Reference
tree-affine.h
Go to the documentation of this file.
1 /* Operations with affine combinations of trees.
2  Copyright (C) 2005-2013 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. */
31 
32  /* Its coefficient in the combination. */
34 };
35 
36 typedef struct affine_tree_combination
37 {
38  /* Type of the result of the combination. */
39  tree type;
40 
41  /* Constant 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 
76  struct pointer_map_t **);
80 
81 /* Debugging functions. */
82 void debug_aff (aff_tree *);