GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
tree-outof-ssa.h
Go to the documentation of this file.
1
/* Routines for expanding from SSA form to RTL.
2
Copyright (C) 2009-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
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 3, or (at your option)
9
any later version.
10
11
GCC is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License 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
21
#ifndef GCC_TREE_OUTOF_SSA_H
22
#define GCC_TREE_OUTOF_SSA_H
23
24
25
/* This structure (of which only a singleton SA exists) is used to
26
pass around information between the outof-SSA functions, cfgexpand
27
and expand itself. */
28
struct
ssaexpand
29
{
30
/* The computed partitions of SSA names are stored here. */
31
var_map
map
;
32
33
/* For an SSA name version V bit V is set iff TER decided that
34
its definition should be forwarded. */
35
bitmap
values
;
36
37
/* For a partition number I partition_to_pseudo[I] contains the
38
RTL expression of the allocated space of it (either a MEM or
39
a pseudos REG). */
40
rtx
*
partition_to_pseudo
;
41
42
/* If partition I contains an SSA name that has a default def,
43
bit I will be set in this bitmap. */
44
bitmap
partition_has_default_def
;
45
};
46
47
/* This is the singleton described above. */
48
extern
struct
ssaexpand
SA
;
49
50
/* Returns the RTX expression representing the storage of the outof-SSA
51
partition that the SSA name EXP is a member of. */
52
static
inline
rtx
53
get_rtx_for_ssa_name
(
tree
exp
)
54
{
55
int
p = partition_find (
SA
.
map
->
var_partition
,
SSA_NAME_VERSION
(exp));
56
if
(
SA
.
map
->
partition_to_view
)
57
p =
SA
.
map
->
partition_to_view
[p];
58
gcc_assert
(p !=
NO_PARTITION
);
59
return
SA
.
partition_to_pseudo
[p];
60
}
61
62
/* If TER decided to forward the definition of SSA name EXP this function
63
returns the defining statement, otherwise NULL. */
64
static
inline
gimple
65
get_gimple_for_ssa_name
(
tree
exp
)
66
{
67
int
v =
SSA_NAME_VERSION
(exp);
68
if
(
SA
.
values
&&
bitmap_bit_p
(
SA
.
values
, v))
69
return
SSA_NAME_DEF_STMT
(exp);
70
return
NULL
;
71
}
72
73
extern
bool
ssa_is_replaceable_p
(
gimple
stmt);
74
extern
void
finish_out_of_ssa
(
struct
ssaexpand
*sa);
75
extern
unsigned
int
rewrite_out_of_ssa
(
struct
ssaexpand
*sa);
76
extern
void
expand_phi_nodes
(
struct
ssaexpand
*sa);
77
78
#endif
/* GCC_TREE_OUTOF_SSA_H */
gcc
tree-outof-ssa.h
Generated by
1.8.1.1