GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
tree-ssa-operands.h
Go to the documentation of this file.
1
/* SSA operand management for trees.
2
Copyright (C) 2003-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_SSA_OPERANDS_H
21
#define GCC_TREE_SSA_OPERANDS_H
22
23
/* Interface to SSA operands. */
24
25
26
/* This represents a pointer to a DEF operand. */
27
typedef
tree
*
def_operand_p
;
28
29
/* This represents a pointer to a USE operand. */
30
typedef
ssa_use_operand_t
*
use_operand_p
;
31
32
/* NULL operand types. */
33
#define NULL_USE_OPERAND_P ((use_operand_p)NULL)
34
#define NULL_DEF_OPERAND_P ((def_operand_p)NULL)
35
36
/* This represents the USE operands of a stmt. */
37
struct
use_optype_d
38
{
39
struct
use_optype_d
*
next
;
40
struct
ssa_use_operand_d
use_ptr
;
41
};
42
typedef
struct
use_optype_d
*
use_optype_p
;
43
44
/* This structure represents a variable sized buffer which is allocated by the
45
operand memory manager. Operands are suballocated out of this block. The
46
MEM array varies in size. */
47
48
struct
GTY
((chain_next("%h.next
"), variable_size)) ssa_operand_memory_d {
49
struct ssa_operand_memory_d *next;
50
char mem[1];
51
};
52
53
/* Per-function operand caches. */
54
struct GTY(()) ssa_operands {
55
struct ssa_operand_memory_d *operand_memory;
56
unsigned operand_memory_index;
57
/* Current size of the operand memory buffer. */
58
unsigned int ssa_operand_mem_size;
59
60
bool ops_active;
61
62
struct use_optype_d * GTY ((skip ("
"))) free_uses;
63
};
64
65
#define USE_FROM_PTR(PTR) get_use_from_ptr (PTR)
66
#define DEF_FROM_PTR(PTR) get_def_from_ptr (PTR)
67
#define SET_USE(USE, V) set_ssa_use_from_ptr (USE, V)
68
#define SET_DEF(DEF, V) ((*(DEF)) = (V))
69
70
#define USE_STMT(USE) (USE)->loc.stmt
71
72
#define USE_OP_PTR(OP) (&((OP)->use_ptr))
73
#define USE_OP(OP) (USE_FROM_PTR (USE_OP_PTR (OP)))
74
75
#define PHI_RESULT_PTR(PHI) gimple_phi_result_ptr (PHI)
76
#define PHI_RESULT(PHI) DEF_FROM_PTR (PHI_RESULT_PTR (PHI))
77
#define SET_PHI_RESULT(PHI, V) SET_DEF (PHI_RESULT_PTR (PHI), (V))
78
/*
79
#define PHI_ARG_DEF(PHI, I) USE_FROM_PTR (PHI_ARG_DEF_PTR ((PHI), (I)))
80
*/
81
#define PHI_ARG_DEF_PTR(PHI, I) gimple_phi_arg_imm_use_ptr ((PHI), (I))
82
#define PHI_ARG_DEF(PHI, I) gimple_phi_arg_def ((PHI), (I))
83
#define SET_PHI_ARG_DEF(PHI, I, V) \
84
SET_USE (PHI_ARG_DEF_PTR ((PHI), (I)), (V))
85
#define PHI_ARG_DEF_FROM_EDGE(PHI, E) \
86
PHI_ARG_DEF ((PHI), (E)->dest_idx)
87
#define PHI_ARG_DEF_PTR_FROM_EDGE(PHI, E) \
88
PHI_ARG_DEF_PTR ((PHI), (E)->dest_idx)
89
#define PHI_ARG_INDEX_FROM_USE(USE) phi_arg_index_from_use (USE)
90
91
92
extern bool ssa_operands_active (struct function *);
93
extern void init_ssa_operands (struct function *fn);
94
extern void fini_ssa_operands (void);
95
extern bool verify_ssa_operands (gimple stmt);
96
extern void free_stmt_operands (gimple);
97
extern void update_stmt_operands (gimple);
98
extern void swap_ssa_operands (gimple, tree *, tree *);
99
extern bool verify_imm_links (FILE *f, tree var);
100
101
extern void dump_immediate_uses_for (FILE *file, tree var);
102
extern void dump_immediate_uses (FILE *file);
103
extern void debug_immediate_uses (void);
104
extern void debug_immediate_uses_for (tree var);
105
106
extern void unlink_stmt_vdef (gimple);
107
108
/* Return the tree pointed-to by USE. */
109
static inline tree
110
get_use_from_ptr (use_operand_p use)
111
{
112
return *(use->use);
113
}
114
115
/* Return the tree pointed-to by DEF. */
116
static inline tree
117
get_def_from_ptr (def_operand_p def)
118
{
119
return *def;
120
}
121
122
#endif /* GCC_TREE_SSA_OPERANDS_H */
gcc
tree-ssa-operands.h
Generated by
1.8.1.1