20#ifndef GCC_SSA_ITERATORS_H
21#define GCC_SSA_ITERATORS_H
70#if ! defined ENABLE_GIMPLE_CHECKING
71#define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR) \
72 for ((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR)); \
73 !end_readonly_imm_use_p (&(ITER)); \
74 (void) ((DEST) = next_readonly_imm_use (&(ITER))))
79struct auto_end_imm_use_fast_traverse
84 ~auto_end_imm_use_fast_traverse ()
85 { imm->
name->ssa_name.fast_iteration_depth--; }
88#define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR) \
89 for (struct auto_end_imm_use_fast_traverse \
90 auto_end_imm_use_fast_traverse \
91 ((((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR))), \
93 !end_readonly_imm_use_p (&(ITER)); \
94 (void) ((DEST) = next_readonly_imm_use (&(ITER))))
115#define FOR_EACH_IMM_USE_STMT(STMT, ITER, SSAVAR) \
116 for (struct auto_end_imm_use_stmt_traverse \
117 auto_end_imm_use_stmt_traverse \
118 ((((STMT) = first_imm_use_stmt (&(ITER), (SSAVAR))), \
120 !end_imm_use_stmt_p (&(ITER)); \
121 (void) ((STMT) = next_imm_use_stmt (&(ITER))))
136#define FOR_EACH_IMM_USE_ON_STMT(DEST, ITER) \
137 for ((DEST) = first_imm_use_on_stmt (&(ITER)); \
138 !end_imm_use_on_stmt_p (&(ITER)); \
139 (void) ((DEST) = next_imm_use_on_stmt (&(ITER))))
178#define SSA_OP_USE 0x01
179#define SSA_OP_DEF 0x02
180#define SSA_OP_VUSE 0x04
181#define SSA_OP_VDEF 0x08
183#define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE)
184#define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF)
185#define SSA_OP_ALL_VIRTUALS (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS)
186#define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
187#define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
188#define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
193#define FOR_EACH_SSA_TREE_OPERAND(TREEVAR, STMT, ITER, FLAGS) \
194 for (TREEVAR = op_iter_init_tree (&(ITER), STMT, FLAGS); \
195 !op_iter_done (&(ITER)); \
196 (void) (TREEVAR = op_iter_next_tree (&(ITER))))
201#define FOR_EACH_SSA_USE_OPERAND(USEVAR, STMT, ITER, FLAGS) \
202 for (USEVAR = op_iter_init_use (&(ITER), STMT, FLAGS); \
203 !op_iter_done (&(ITER)); \
204 USEVAR = op_iter_next_use (&(ITER)))
209#define FOR_EACH_SSA_DEF_OPERAND(DEFVAR, STMT, ITER, FLAGS) \
210 for (DEFVAR = op_iter_init_def (&(ITER), STMT, FLAGS); \
211 !op_iter_done (&(ITER)); \
212 DEFVAR = op_iter_next_def (&(ITER)))
217#define FOR_EACH_PHI_ARG(USEVAR, STMT, ITER, FLAGS) \
218 for ((USEVAR) = op_iter_init_phiuse (&(ITER), STMT, FLAGS); \
219 !op_iter_done (&(ITER)); \
220 (USEVAR) = op_iter_next_use (&(ITER)))
225#define FOR_EACH_PHI_OR_STMT_USE(USEVAR, STMT, ITER, FLAGS) \
226 for ((USEVAR) = (gimple_code (STMT) == GIMPLE_PHI \
227 ? op_iter_init_phiuse (&(ITER), \
228 as_a <gphi *> (STMT), \
230 : op_iter_init_use (&(ITER), STMT, FLAGS)); \
231 !op_iter_done (&(ITER)); \
232 (USEVAR) = op_iter_next_use (&(ITER)))
236#define FOR_EACH_PHI_OR_STMT_DEF(DEFVAR, STMT, ITER, FLAGS) \
237 for ((DEFVAR) = (gimple_code (STMT) == GIMPLE_PHI \
238 ? op_iter_init_phidef (&(ITER), \
239 as_a <gphi *> (STMT), \
241 : op_iter_init_def (&(ITER), STMT, FLAGS)); \
242 !op_iter_done (&(ITER)); \
243 (DEFVAR) = op_iter_next_def (&(ITER)))
248#define SINGLE_SSA_TREE_OPERAND(STMT, FLAGS) \
249 single_ssa_tree_operand (STMT, FLAGS)
254#define SINGLE_SSA_USE_OPERAND(STMT, FLAGS) \
255 single_ssa_use_operand (STMT, FLAGS)
260#define SINGLE_SSA_DEF_OPERAND(STMT, FLAGS) \
261 single_ssa_def_operand (STMT, FLAGS)
264#define ZERO_SSA_OPERANDS(STMT, FLAGS) zero_ssa_operands (STMT, FLAGS)
267#define NUM_SSA_OPERANDS(STMT, FLAGS) num_ssa_operands (STMT, FLAGS)
278#if defined ENABLE_GIMPLE_CHECKING
285 gcc_assert (var->ssa_name.fast_iteration_depth == 0
286 && (var->ssa_name.active_iterated_stmt ==
NULL
287 || (var->ssa_name.active_iterated_stmt
304 linknode->
prev = list;
307 list->
next = linknode;
390#if defined ENABLE_GIMPLE_CHECKING
391 var->
ssa_name.fast_iteration_depth++;
467 if (ptr == ptr->
next)
497 unsigned int num = 0;
501 for (ptr = start->next; ptr != start; ptr = ptr->
next)
506 for (ptr = start->next; ptr != start; ptr = ptr->
next)
659 case GIMPLE_TRANSACTION:
835 if ((flags &
comp) == 0)
866 if ((flags &
comp) == 0)
893#if defined ENABLE_GIMPLE_CHECKING
894 imm->name->ssa_name.active_iterated_stmt =
NULL;
913 if (last_p->
next == use_p)
971#if defined ENABLE_GIMPLE_CHECKING
973 && var->ssa_name.fast_iteration_depth == 0);
989#if defined ENABLE_GIMPLE_CHECKING
1004#if defined ENABLE_GIMPLE_CHECKING
const union tree_node * const_tree
Definition coretypes.h:98
union tree_node * tree
Definition coretypes.h:97
#define cfun
Definition function.h:480
static sbitmap * comp
Definition gcse.cc:1732
bool is_gimple_reg(tree t)
Definition gimple-expr.cc:790
use_operand_p gimple_vuse_op(const gimple *g)
Definition gimple-ssa.h:141
tree * gimple_op_ptr(gimple *gs, unsigned i)
Definition gimple.h:2571
tree * gimple_vdef_ptr(gimple *g)
Definition gimple.h:2218
tree gimple_op(const gimple *gs, unsigned i)
Definition gimple.h:2557
tree gimple_vdef(const gimple *g)
Definition gimple.h:2194
gimple_code
Definition gimple.h:30
unsigned gimple_asm_noutputs(const gasm *asm_stmt)
Definition gimple.h:4068
tree gimple_phi_result(const gphi *gs)
Definition gimple.h:4599
struct use_optype_d * gimple_use_ops(const gimple *g)
Definition gimple.h:2158
bool is_gimple_debug(const gimple *gs)
Definition gimple.h:4950
tree * gimple_phi_result_ptr(gphi *gs)
Definition gimple.h:4614
tree gimple_vuse(const gimple *g)
Definition gimple.h:2182
unsigned gimple_phi_num_args(const gimple *gs)
Definition gimple.h:4589
#define return_false()
Definition ipa-icf-gimple.h:57
T as_a(U *p)
Definition is-a.h:253
T dyn_cast(U *p)
Definition is-a.h:280
Definition custom-sarif-properties/state-graphs.h:33
def_operand_p op_iter_next_def(ssa_op_iter *ptr)
Definition ssa-iterators.h:547
use_operand_p first_imm_use_on_stmt(imm_use_iterator *imm)
Definition ssa-iterators.h:1015
#define SSA_OP_USE
Definition ssa-iterators.h:178
#define SSA_OP_VUSE
Definition ssa-iterators.h:180
void link_imm_use_stmt(ssa_use_operand_t *linknode, tree def, gimple *stmt)
Definition ssa-iterators.h:339
void end_imm_use_stmt_traverse(imm_use_iterator *)
use_operand_p first_readonly_imm_use(imm_use_iterator *imm, tree var)
Definition ssa-iterators.h:388
void delink_stmt_imm_use(gimple *stmt)
Definition ssa-iterators.h:1046
bool single_imm_use(const_tree var, use_operand_p *use_p, gimple **stmt)
Definition ssa-iterators.h:462
gimple * first_imm_use_stmt(imm_use_iterator *imm, tree var)
Definition ssa-iterators.h:969
void clear_and_done_ssa_iter(ssa_op_iter *ptr)
Definition ssa-iterators.h:626
#define SSA_OP_VIRTUAL_DEFS
Definition ssa-iterators.h:184
bool has_zero_uses(const_tree var)
Definition ssa-iterators.h:427
#define SSA_OP_VDEF
Definition ssa-iterators.h:181
use_operand_p op_iter_init_phiuse(ssa_op_iter *ptr, gphi *phi, int flags)
Definition ssa-iterators.h:822
use_operand_p next_imm_use_on_stmt(imm_use_iterator *imm)
Definition ssa-iterators.h:1032
void relink_imm_use(ssa_use_operand_t *node, ssa_use_operand_t *old)
Definition ssa-iterators.h:350
#define SSA_OP_VIRTUAL_USES
Definition ssa-iterators.h:183
use_operand_p op_iter_next_use(ssa_op_iter *ptr)
Definition ssa-iterators.h:527
ssa_op_iter_type
Definition ssa-iterators.h:152
@ ssa_op_iter_none
Definition ssa-iterators.h:153
@ ssa_op_iter_use
Definition ssa-iterators.h:155
@ ssa_op_iter_tree
Definition ssa-iterators.h:154
@ ssa_op_iter_def
Definition ssa-iterators.h:156
use_operand_p single_ssa_use_operand(gimple *stmt, int flags)
Definition ssa-iterators.h:737
tree op_iter_init_tree(ssa_op_iter *ptr, gimple *stmt, int flags)
Definition ssa-iterators.h:708
use_operand_p move_use_after_head(use_operand_p use_p, use_operand_p head, use_operand_p last_p)
Definition ssa-iterators.h:905
bool end_imm_use_on_stmt_p(const imm_use_iterator *imm)
Definition ssa-iterators.h:1024
#define FOR_EACH_SSA_USE_OPERAND(USEVAR, STMT, ITER, FLAGS)
Definition ssa-iterators.h:201
bool zero_ssa_operands(gimple *stmt, int flags)
Definition ssa-iterators.h:783
#define FOR_EACH_SSA_TREE_OPERAND(TREEVAR, STMT, ITER, FLAGS)
Definition ssa-iterators.h:193
gimple * next_imm_use_stmt(imm_use_iterator *imm)
Definition ssa-iterators.h:998
#define FOR_EACH_PHI_ARG(USEVAR, STMT, ITER, FLAGS)
Definition ssa-iterators.h:217
tree single_phi_def(gphi *stmt, int flags)
Definition ssa-iterators.h:809
def_operand_p op_iter_init_def(ssa_op_iter *ptr, gimple *stmt, int flags)
Definition ssa-iterators.h:696
use_operand_p next_readonly_imm_use(imm_use_iterator *imm)
Definition ssa-iterators.h:404
use_operand_p ssa_vuse_operand(gimple *stmt)
Definition ssa-iterators.h:754
void op_iter_init(ssa_op_iter *ptr, gimple *stmt, int flags)
Definition ssa-iterators.h:639
unsigned int num_imm_uses(const_tree var)
Definition ssa-iterators.h:493
void relink_imm_use_stmt(ssa_use_operand_t *linknode, ssa_use_operand_t *old, gimple *stmt)
Definition ssa-iterators.h:368
void set_ssa_use_from_ptr(use_operand_p use, tree val)
Definition ssa-iterators.h:329
use_operand_p op_iter_init_use(ssa_op_iter *ptr, gimple *stmt, int flags)
Definition ssa-iterators.h:684
void link_imm_use(ssa_use_operand_t *linknode, tree def)
Definition ssa-iterators.h:312
#define SSA_OP_ALL_DEFS
Definition ssa-iterators.h:187
void link_imm_use_to_list(ssa_use_operand_t *linknode, ssa_use_operand_t *list)
Definition ssa-iterators.h:300
bool has_single_use(const_tree var)
Definition ssa-iterators.h:441
#define SSA_OP_ALL_USES
Definition ssa-iterators.h:186
bool end_readonly_imm_use_p(const imm_use_iterator *imm)
Definition ssa-iterators.h:381
def_operand_p single_ssa_def_operand(gimple *stmt, int flags)
Definition ssa-iterators.h:765
def_operand_p op_iter_init_phidef(ssa_op_iter *ptr, gphi *phi, int flags)
Definition ssa-iterators.h:852
#define SSA_OP_DEF
Definition ssa-iterators.h:179
void delink_imm_use(ssa_use_operand_t *linknode)
Definition ssa-iterators.h:272
#define FOR_EACH_PHI_OR_STMT_USE(USEVAR, STMT, ITER, FLAGS)
Definition ssa-iterators.h:225
bool end_imm_use_stmt_p(const imm_use_iterator *imm)
Definition ssa-iterators.h:882
use_operand_p link_use_stmts_after(use_operand_p head, imm_use_iterator *)
Definition ssa-iterators.h:932
bool single_imm_use_1(const ssa_use_operand_t *head, use_operand_p *use_p, gimple **stmt)
Definition tree-ssa-operands.cc:1394
tree op_iter_next_tree(ssa_op_iter *ptr)
Definition ssa-iterators.h:582
tree single_ssa_tree_operand(gimple *stmt, int flags)
Definition ssa-iterators.h:719
auto_vec< gimple *, 2 > gather_imm_use_stmts(tree ssavar)
Definition tree-ssa-operands.cc:1422
bool op_iter_done(const ssa_op_iter *ptr)
Definition ssa-iterators.h:520
int num_ssa_operands(gimple *stmt, int flags)
Definition ssa-iterators.h:794
~auto_end_imm_use_stmt_traverse()
Definition ssa-iterators.h:107
auto_end_imm_use_stmt_traverse(imm_use_iterator *imm)
Definition ssa-iterators.h:105
imm_use_iterator * imm
Definition ssa-iterators.h:104
Definition loop-invariant.cc:88
Definition collect2.cc:175
Definition ssa-iterators.h:51
ssa_use_operand_t * next_stmt_use
Definition ssa-iterators.h:58
ssa_use_operand_t * end_p
Definition ssa-iterators.h:55
ssa_use_operand_t * imm_use
Definition ssa-iterators.h:53
ssa_use_operand_t * next_imm_name
Definition ssa-iterators.h:61
tree name
Definition ssa-iterators.h:63
Definition ssa-iterators.h:165
unsigned numops
Definition ssa-iterators.h:170
unsigned i
Definition ssa-iterators.h:169
bool done
Definition ssa-iterators.h:167
int flags
Definition ssa-iterators.h:168
gimple * stmt
Definition ssa-iterators.h:172
use_optype_p uses
Definition ssa-iterators.h:171
enum ssa_op_iter_type iter_type
Definition ssa-iterators.h:166
Definition tree-core.h:1687
union ssa_use_operand_t::@367230375271135120343303147343174306203144124205 loc
gimple * stmt
Definition tree-core.h:1695
tree ssa_name
Definition tree-core.h:1695
tree * use
Definition tree-core.h:1696
struct ssa_use_operand_t * prev
Definition tree-core.h:1688
struct ssa_use_operand_t * next
Definition tree-core.h:1689
struct use_optype_d * next
Definition tree-ssa-operands.h:39
Definition loop-invariant.cc:78
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:814
#define gcc_checking_assert(EXPR)
Definition system.h:821
bool ssa_operands_active(struct function *fun)
Definition tree-ssa-operands.cc:219
tree * def_operand_p
Definition tree-ssa-operands.h:27
struct use_optype_d * use_optype_p
Definition tree-ssa-operands.h:42
#define USE_FROM_PTR(PTR)
Definition tree-ssa-operands.h:65
#define USE_STMT(USE)
Definition tree-ssa-operands.h:70
ssa_use_operand_t * use_operand_p
Definition tree-ssa-operands.h:30
#define USE_OP(OP)
Definition tree-ssa-operands.h:73
#define USE_OP_PTR(OP)
Definition tree-ssa-operands.h:72
#define PHI_ARG_DEF_PTR(PHI, I)
Definition tree-ssa-operands.h:77
#define NULL_USE_OPERAND_P
Definition tree-ssa-operands.h:33
#define NULL_DEF_OPERAND_P
Definition tree-ssa-operands.h:34
#define TREE_VALUE(NODE)
Definition tree.h:1241
#define MAY_HAVE_DEBUG_BIND_STMTS
Definition tree.h:1333
#define SSA_NAME_IMM_USE_NODE(NODE)
Definition tree.h:2248
#define TREE_CODE(NODE)
Definition tree.h:325
#define NULL_TREE
Definition tree.h:318