GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
tree-ssanames.h
Go to the documentation of this file.
1
/* SSA name expresssons routines
2
Copyright (C) 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 under
7
the terms of the GNU General Public License as published by the Free
8
Software Foundation; either version 3, or (at your option) any later
9
version.
10
11
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12
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
#ifndef GCC_TREE_SSANAMES_H
21
#define GCC_TREE_SSANAMES_H
22
23
/* Aliasing information for SSA_NAMEs representing pointer variables. */
24
25
struct
GTY
(())
ptr_info_def
26
{
27
/* The points-to solution. */
28
struct
pt_solution
pt;
29
30
/* Alignment and misalignment of the pointer in bytes. Together
31
align and misalign specify low known bits of the pointer.
32
ptr & (align - 1) == misalign. */
33
34
/* When known, this is the power-of-two byte alignment of the object this
35
pointer points into. This is usually DECL_ALIGN_UNIT for decls and
36
MALLOC_ABI_ALIGNMENT for allocated storage. When the alignment is not
37
known, it is zero. Do not access directly but use functions
38
get_ptr_info_alignment, set_ptr_info_alignment,
39
mark_ptr_info_alignment_unknown and similar. */
40
unsigned
int
align;
41
42
/* When alignment is known, the byte offset this pointer differs from the
43
above alignment. Access only through the same helper functions as align
44
above. */
45
unsigned
int
misalign;
46
};
47
48
/* Value range information for SSA_NAMEs representing non-pointer variables. */
49
50
struct
GTY
(())
range_info_def
{
51
/* Minimum for value range. */
52
double_int
min;
53
/* Maximum for value range. */
54
double_int
max;
55
};
56
57
58
#define SSANAMES(fun) (fun)->gimple_df->ssa_names
59
#define MODIFIED_NORETURN_CALLS(fun) (fun)->gimple_df->modified_noreturn_calls
60
#define DEFAULT_DEFS(fun) (fun)->gimple_df->default_defs
61
62
#define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
63
#define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)])
64
65
66
/* Type of value ranges. See value_range_d In tree-vrp.c for a
67
description of these types. */
68
enum
value_range_type
{
VR_UNDEFINED
,
VR_RANGE
,
VR_ANTI_RANGE
,
VR_VARYING
};
69
70
/* Sets the value range to SSA. */
71
extern
void
set_range_info
(
tree
ssa,
double_int
min,
double_int
max);
72
/* Gets the value range from SSA. */
73
extern
enum
value_range_type
get_range_info
(
tree
name,
double_int
*min,
74
double_int
*max);
75
extern
void
init_ssanames
(
struct
function
*,
int
);
76
extern
void
fini_ssanames
(
void
);
77
extern
void
ssanames_print_statistics
(
void
);
78
extern
tree
make_ssa_name_fn
(
struct
function
*,
tree
,
gimple
);
79
extern
void
release_ssa_name
(
tree
);
80
extern
bool
get_ptr_info_alignment
(
struct
ptr_info_def
*,
unsigned
int
*,
81
unsigned
int
*);
82
extern
void
mark_ptr_info_alignment_unknown
(
struct
ptr_info_def
*);
83
extern
void
set_ptr_info_alignment
(
struct
ptr_info_def
*,
unsigned
int
,
84
unsigned
int
);
85
extern
void
adjust_ptr_info_misalignment
(
struct
ptr_info_def
*,
86
unsigned
int
);
87
extern
struct
ptr_info_def
*
get_ptr_info
(
tree
);
88
89
extern
tree
copy_ssa_name_fn
(
struct
function
*,
tree
,
gimple
);
90
extern
void
duplicate_ssa_name_ptr_info
(
tree
,
struct
ptr_info_def
*);
91
extern
tree
duplicate_ssa_name_fn
(
struct
function
*,
tree
,
gimple
);
92
extern
void
duplicate_ssa_name_range_info
(
tree
,
struct
range_info_def
*);
93
extern
void
release_defs
(
gimple
);
94
extern
void
replace_ssa_name_symbol
(
tree
,
tree
);
95
96
97
/* Return an SSA_NAME node for variable VAR defined in statement STMT
98
in function cfun. */
99
100
static
inline
tree
101
make_ssa_name
(
tree
var,
gimple
stmt)
102
{
103
return
make_ssa_name_fn
(
cfun
, var, stmt);
104
}
105
106
/* Return an SSA_NAME node using the template SSA name NAME defined in
107
statement STMT in function cfun. */
108
109
static
inline
tree
110
copy_ssa_name
(
tree
var,
gimple
stmt)
111
{
112
return
copy_ssa_name_fn
(
cfun
, var, stmt);
113
}
114
115
/* Creates a duplicate of a SSA name NAME tobe defined by statement STMT
116
in function cfun. */
117
118
static
inline
tree
119
duplicate_ssa_name
(
tree
var,
gimple
stmt)
120
{
121
return
duplicate_ssa_name_fn
(
cfun
, var, stmt);
122
}
123
124
/* Return an anonymous SSA_NAME node for type TYPE defined in statement STMT
125
in function cfun. Arrange so that it uses NAME in dumps. */
126
127
static
inline
tree
128
make_temp_ssa_name
(
tree
type
,
gimple
stmt,
const
char
*name)
129
{
130
tree
ssa_name
;
131
gcc_checking_assert
(
TYPE_P
(type));
132
ssa_name =
make_ssa_name_fn
(
cfun
, type, stmt);
133
SET_SSA_NAME_VAR_OR_IDENTIFIER
(ssa_name,
get_identifier
(name));
134
return
ssa_name
;
135
}
136
137
138
#endif
/* GCC_TREE_SSANAMES_H */
gcc
tree-ssanames.h
Generated by
1.8.1.1