GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
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. */
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
debug_aff
(
aff_tree
*);
gcc
tree-affine.h
Generated by
1.8.1.1