OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [doc/] [gimple.texi] - Blame information for rev 711

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 711 jeremybenn
@c Copyright (c) 2008, 2009, 2010 Free Software Foundation, Inc.
2
@c Free Software Foundation, Inc.
3
@c This is part of the GCC manual.
4
@c For copying conditions, see the file gcc.texi.
5
 
6
@node GIMPLE
7
@chapter GIMPLE
8
@cindex GIMPLE
9
 
10
GIMPLE is a three-address representation derived from GENERIC by
11
breaking down GENERIC expressions into tuples of no more than 3
12
operands (with some exceptions like function calls).  GIMPLE was
13
heavily influenced by the SIMPLE IL used by the McCAT compiler
14
project at McGill University, though we have made some different
15
choices.  For one thing, SIMPLE doesn't support @code{goto}.
16
 
17
Temporaries are introduced to hold intermediate values needed to
18
compute complex expressions. Additionally, all the control
19
structures used in GENERIC are lowered into conditional jumps,
20
lexical scopes are removed and exception regions are converted
21
into an on the side exception region tree.
22
 
23
The compiler pass which converts GENERIC into GIMPLE is referred to as
24
the @samp{gimplifier}.  The gimplifier works recursively, generating
25
GIMPLE tuples out of the original GENERIC expressions.
26
 
27
One of the early implementation strategies used for the GIMPLE
28
representation was to use the same internal data structures used
29
by front ends to represent parse trees. This simplified
30
implementation because we could leverage existing functionality
31
and interfaces. However, GIMPLE is a much more restrictive
32
representation than abstract syntax trees (AST), therefore it
33
does not require the full structural complexity provided by the
34
main tree data structure.
35
 
36
The GENERIC representation of a function is stored in the
37
@code{DECL_SAVED_TREE} field of the associated @code{FUNCTION_DECL}
38
tree node.  It is converted to GIMPLE by a call to
39
@code{gimplify_function_tree}.
40
 
41
If a front end wants to include language-specific tree codes in the tree
42
representation which it provides to the back end, it must provide a
43
definition of @code{LANG_HOOKS_GIMPLIFY_EXPR} which knows how to
44
convert the front end trees to GIMPLE@.  Usually such a hook will involve
45
much of the same code for expanding front end trees to RTL@.  This function
46
can return fully lowered GIMPLE, or it can return GENERIC trees and let the
47
main gimplifier lower them the rest of the way; this is often simpler.
48
GIMPLE that is not fully lowered is known as ``High GIMPLE'' and
49
consists of the IL before the pass @code{pass_lower_cf}.  High GIMPLE
50
contains some container statements like lexical scopes
51
(represented by @code{GIMPLE_BIND}) and nested expressions (e.g.,
52
@code{GIMPLE_TRY}), while ``Low GIMPLE'' exposes all of the
53
implicit jumps for control and exception expressions directly in
54
the IL and EH region trees.
55
 
56
The C and C++ front ends currently convert directly from front end
57
trees to GIMPLE, and hand that off to the back end rather than first
58
converting to GENERIC@.  Their gimplifier hooks know about all the
59
@code{_STMT} nodes and how to convert them to GENERIC forms.  There
60
was some work done on a genericization pass which would run first, but
61
the existence of @code{STMT_EXPR} meant that in order to convert all
62
of the C statements into GENERIC equivalents would involve walking the
63
entire tree anyway, so it was simpler to lower all the way.  This
64
might change in the future if someone writes an optimization pass
65
which would work better with higher-level trees, but currently the
66
optimizers all expect GIMPLE@.
67
 
68
You can request to dump a C-like representation of the GIMPLE form
69
with the flag @option{-fdump-tree-gimple}.
70
 
71
@menu
72
* Tuple representation::
73
* GIMPLE instruction set::
74
* GIMPLE Exception Handling::
75
* Temporaries::
76
* Operands::
77
* Manipulating GIMPLE statements::
78
* Tuple specific accessors::
79
* GIMPLE sequences::
80
* Sequence iterators::
81
* Adding a new GIMPLE statement code::
82
* Statement and operand traversals::
83
@end menu
84
 
85
@node Tuple representation
86
@section Tuple representation
87
@cindex tuples
88
 
89
GIMPLE instructions are tuples of variable size divided in two
90
groups: a header describing the instruction and its locations,
91
and a variable length body with all the operands. Tuples are
92
organized into a hierarchy with 3 main classes of tuples.
93
 
94
@subsection @code{gimple_statement_base} (gsbase)
95
@cindex gimple_statement_base
96
 
97
This is the root of the hierarchy, it holds basic information
98
needed by most GIMPLE statements. There are some fields that
99
may not be relevant to every GIMPLE statement, but those were
100
moved into the base structure to take advantage of holes left by
101
other fields (thus making the structure more compact).  The
102
structure takes 4 words (32 bytes) on 64 bit hosts:
103
 
104
@multitable {@code{references_memory_p}} {Size (bits)}
105
@item Field                             @tab Size (bits)
106
@item @code{code}                       @tab 8
107
@item @code{subcode}                    @tab 16
108
@item @code{no_warning}                 @tab 1
109
@item @code{visited}                    @tab 1
110
@item @code{nontemporal_move}           @tab 1
111
@item @code{plf}                        @tab 2
112
@item @code{modified}                   @tab 1
113
@item @code{has_volatile_ops}           @tab 1
114
@item @code{references_memory_p}        @tab 1
115
@item @code{uid}                        @tab 32
116
@item @code{location}                   @tab 32
117
@item @code{num_ops}                    @tab 32
118
@item @code{bb}                         @tab 64
119
@item @code{block}                      @tab 63
120
@item Total size                        @tab 32 bytes
121
@end multitable
122
 
123
@itemize @bullet
124
@item @code{code}
125
Main identifier for a GIMPLE instruction.
126
 
127
@item @code{subcode}
128
Used to distinguish different variants of the same basic
129
instruction or provide flags applicable to a given code. The
130
@code{subcode} flags field has different uses depending on the code of
131
the instruction, but mostly it distinguishes instructions of the
132
same family. The most prominent use of this field is in
133
assignments, where subcode indicates the operation done on the
134
RHS of the assignment. For example, a = b + c is encoded as
135
@code{GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>}.
136
 
137
@item @code{no_warning}
138
Bitflag to indicate whether a warning has already been issued on
139
this statement.
140
 
141
@item @code{visited}
142
General purpose ``visited'' marker. Set and cleared by each pass
143
when needed.
144
 
145
@item @code{nontemporal_move}
146
Bitflag used in assignments that represent non-temporal moves.
147
Although this bitflag is only used in assignments, it was moved
148
into the base to take advantage of the bit holes left by the
149
previous fields.
150
 
151
@item @code{plf}
152
Pass Local Flags. This 2-bit mask can be used as general purpose
153
markers by any pass. Passes are responsible for clearing and
154
setting these two flags accordingly.
155
 
156
@item @code{modified}
157
Bitflag to indicate whether the statement has been modified.
158
Used mainly by the operand scanner to determine when to re-scan a
159
statement for operands.
160
 
161
@item @code{has_volatile_ops}
162
Bitflag to indicate whether this statement contains operands that
163
have been marked volatile.
164
 
165
@item @code{references_memory_p}
166
Bitflag to indicate whether this statement contains memory
167
references (i.e., its operands are either global variables, or
168
pointer dereferences or anything that must reside in memory).
169
 
170
@item @code{uid}
171
This is an unsigned integer used by passes that want to assign
172
IDs to every statement. These IDs must be assigned and used by
173
each pass.
174
 
175
@item @code{location}
176
This is a @code{location_t} identifier to specify source code
177
location for this statement. It is inherited from the front
178
end.
179
 
180
@item @code{num_ops}
181
Number of operands that this statement has. This specifies the
182
size of the operand vector embedded in the tuple. Only used in
183
some tuples, but it is declared in the base tuple to take
184
advantage of the 32-bit hole left by the previous fields.
185
 
186
@item @code{bb}
187
Basic block holding the instruction.
188
 
189
@item @code{block}
190
Lexical block holding this statement.  Also used for debug
191
information generation.
192
@end itemize
193
 
194
@subsection @code{gimple_statement_with_ops}
195
@cindex gimple_statement_with_ops
196
 
197
This tuple is actually split in two:
198
@code{gimple_statement_with_ops_base} and
199
@code{gimple_statement_with_ops}. This is needed to accommodate the
200
way the operand vector is allocated. The operand vector is
201
defined to be an array of 1 element. So, to allocate a dynamic
202
number of operands, the memory allocator (@code{gimple_alloc}) simply
203
allocates enough memory to hold the structure itself plus @code{N
204
- 1} operands which run ``off the end'' of the structure. For
205
example, to allocate space for a tuple with 3 operands,
206
@code{gimple_alloc} reserves @code{sizeof (struct
207
gimple_statement_with_ops) + 2 * sizeof (tree)} bytes.
208
 
209
On the other hand, several fields in this tuple need to be shared
210
with the @code{gimple_statement_with_memory_ops} tuple. So, these
211
common fields are placed in @code{gimple_statement_with_ops_base} which
212
is then inherited from the other two tuples.
213
 
214
 
215
@multitable {@code{def_ops}}    {48 + 8 * @code{num_ops} bytes}
216
@item   @code{gsbase}           @tab 256
217
@item   @code{def_ops}          @tab 64
218
@item   @code{use_ops}          @tab 64
219
@item   @code{op}               @tab @code{num_ops} * 64
220
@item   Total size              @tab 48 + 8 * @code{num_ops} bytes
221
@end multitable
222
 
223
@itemize @bullet
224
@item @code{gsbase}
225
Inherited from @code{struct gimple_statement_base}.
226
 
227
@item @code{def_ops}
228
Array of pointers into the operand array indicating all the slots that
229
contain a variable written-to by the statement. This array is
230
also used for immediate use chaining. Note that it would be
231
possible to not rely on this array, but the changes required to
232
implement this are pretty invasive.
233
 
234
@item @code{use_ops}
235
Similar to @code{def_ops} but for variables read by the statement.
236
 
237
@item @code{op}
238
Array of trees with @code{num_ops} slots.
239
@end itemize
240
 
241
@subsection @code{gimple_statement_with_memory_ops}
242
 
243
This tuple is essentially identical to @code{gimple_statement_with_ops},
244
except that it contains 4 additional fields to hold vectors
245
related memory stores and loads.  Similar to the previous case,
246
the structure is split in two to accommodate for the operand
247
vector (@code{gimple_statement_with_memory_ops_base} and
248
@code{gimple_statement_with_memory_ops}).
249
 
250
 
251
@multitable {@code{vdef_ops}}   {80 + 8 * @code{num_ops} bytes}
252
@item Field                     @tab Size (bits)
253
@item @code{gsbase}             @tab 256
254
@item @code{def_ops}            @tab 64
255
@item @code{use_ops}            @tab 64
256
@item @code{vdef_ops}           @tab 64
257
@item @code{vuse_ops}           @tab 64
258
@item @code{stores}             @tab 64
259
@item @code{loads}              @tab 64
260
@item @code{op}                 @tab @code{num_ops} * 64
261
@item Total size                @tab 80 + 8 * @code{num_ops} bytes
262
@end multitable
263
 
264
@itemize @bullet
265
@item @code{vdef_ops}
266
Similar to @code{def_ops} but for @code{VDEF} operators. There is
267
one entry per memory symbol written by this statement. This is
268
used to maintain the memory SSA use-def and def-def chains.
269
 
270
@item @code{vuse_ops}
271
Similar to @code{use_ops} but for @code{VUSE} operators. There is
272
one entry per memory symbol loaded by this statement. This is
273
used to maintain the memory SSA use-def chains.
274
 
275
@item @code{stores}
276
Bitset with all the UIDs for the symbols written-to by the
277
statement.  This is different than @code{vdef_ops} in that all the
278
affected symbols are mentioned in this set.  If memory
279
partitioning is enabled, the @code{vdef_ops} vector will refer to memory
280
partitions. Furthermore, no SSA information is stored in this
281
set.
282
 
283
@item @code{loads}
284
Similar to @code{stores}, but for memory loads. (Note that there
285
is some amount of redundancy here, it should be possible to
286
reduce memory utilization further by removing these sets).
287
@end itemize
288
 
289
All the other tuples are defined in terms of these three basic
290
ones. Each tuple will add some fields. The main gimple type
291
is defined to be the union of all these structures (@code{GTY} markers
292
elided for clarity):
293
 
294
@smallexample
295
union gimple_statement_d
296
@{
297
  struct gimple_statement_base gsbase;
298
  struct gimple_statement_with_ops gsops;
299
  struct gimple_statement_with_memory_ops gsmem;
300
  struct gimple_statement_omp omp;
301
  struct gimple_statement_bind gimple_bind;
302
  struct gimple_statement_catch gimple_catch;
303
  struct gimple_statement_eh_filter gimple_eh_filter;
304
  struct gimple_statement_phi gimple_phi;
305
  struct gimple_statement_resx gimple_resx;
306
  struct gimple_statement_try gimple_try;
307
  struct gimple_statement_wce gimple_wce;
308
  struct gimple_statement_asm gimple_asm;
309
  struct gimple_statement_omp_critical gimple_omp_critical;
310
  struct gimple_statement_omp_for gimple_omp_for;
311
  struct gimple_statement_omp_parallel gimple_omp_parallel;
312
  struct gimple_statement_omp_task gimple_omp_task;
313
  struct gimple_statement_omp_sections gimple_omp_sections;
314
  struct gimple_statement_omp_single gimple_omp_single;
315
  struct gimple_statement_omp_continue gimple_omp_continue;
316
  struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
317
  struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
318
@};
319
@end smallexample
320
 
321
 
322
@node GIMPLE instruction set
323
@section GIMPLE instruction set
324
@cindex GIMPLE instruction set
325
 
326
The following table briefly describes the GIMPLE instruction set.
327
 
328
@multitable {@code{GIMPLE_OMP_SECTIONS_SWITCH}} {High GIMPLE} {Low GIMPLE}
329
@item Instruction                       @tab High GIMPLE        @tab Low GIMPLE
330
@item @code{GIMPLE_ASM}                 @tab x                  @tab x
331
@item @code{GIMPLE_ASSIGN}              @tab x                  @tab x
332
@item @code{GIMPLE_BIND}                @tab x                  @tab
333
@item @code{GIMPLE_CALL}                @tab x                  @tab x
334
@item @code{GIMPLE_CATCH}               @tab x                  @tab
335
@item @code{GIMPLE_COND}                @tab x                  @tab x
336
@item @code{GIMPLE_DEBUG}               @tab x                  @tab x
337
@item @code{GIMPLE_EH_FILTER}           @tab x                  @tab
338
@item @code{GIMPLE_GOTO}                @tab x                  @tab x
339
@item @code{GIMPLE_LABEL}               @tab x                  @tab x
340
@item @code{GIMPLE_NOP}                 @tab x                  @tab x
341
@item @code{GIMPLE_OMP_ATOMIC_LOAD}     @tab x                  @tab x
342
@item @code{GIMPLE_OMP_ATOMIC_STORE}    @tab x                  @tab x
343
@item @code{GIMPLE_OMP_CONTINUE}        @tab x                  @tab x
344
@item @code{GIMPLE_OMP_CRITICAL}        @tab x                  @tab x
345
@item @code{GIMPLE_OMP_FOR}             @tab x                  @tab x
346
@item @code{GIMPLE_OMP_MASTER}          @tab x                  @tab x
347
@item @code{GIMPLE_OMP_ORDERED}         @tab x                  @tab x
348
@item @code{GIMPLE_OMP_PARALLEL}        @tab x                  @tab x
349
@item @code{GIMPLE_OMP_RETURN}          @tab x                  @tab x
350
@item @code{GIMPLE_OMP_SECTION}         @tab x                  @tab x
351
@item @code{GIMPLE_OMP_SECTIONS}        @tab x                  @tab x
352
@item @code{GIMPLE_OMP_SECTIONS_SWITCH} @tab x                  @tab x
353
@item @code{GIMPLE_OMP_SINGLE}          @tab x                  @tab x
354
@item @code{GIMPLE_PHI}                 @tab                    @tab x
355
@item @code{GIMPLE_RESX}                @tab                    @tab x
356
@item @code{GIMPLE_RETURN}              @tab x                  @tab x
357
@item @code{GIMPLE_SWITCH}              @tab x                  @tab x
358
@item @code{GIMPLE_TRY}                 @tab x                  @tab
359
@end multitable
360
 
361
@node GIMPLE Exception Handling
362
@section Exception Handling
363
@cindex GIMPLE Exception Handling
364
 
365
Other exception handling constructs are represented using
366
@code{GIMPLE_TRY_CATCH}.  @code{GIMPLE_TRY_CATCH} has two operands.  The
367
first operand is a sequence of statements to execute.  If executing
368
these statements does not throw an exception, then the second operand
369
is ignored.  Otherwise, if an exception is thrown, then the second
370
operand of the @code{GIMPLE_TRY_CATCH} is checked.  The second
371
operand may have the following forms:
372
 
373
@enumerate
374
 
375
@item A sequence of statements to execute.  When an exception occurs,
376
these statements are executed, and then the exception is rethrown.
377
 
378
@item A sequence of @code{GIMPLE_CATCH} statements.  Each
379
@code{GIMPLE_CATCH} has a list of applicable exception types and
380
handler code.  If the thrown exception matches one of the caught
381
types, the associated handler code is executed.  If the handler
382
code falls off the bottom, execution continues after the original
383
@code{GIMPLE_TRY_CATCH}.
384
 
385
@item A @code{GIMPLE_EH_FILTER} statement.  This has a list of
386
permitted exception types, and code to handle a match failure.  If the
387
thrown exception does not match one of the allowed types, the
388
associated match failure code is executed.  If the thrown exception
389
does match, it continues unwinding the stack looking for the next
390
handler.
391
 
392
@end enumerate
393
 
394
Currently throwing an exception is not directly represented in
395
GIMPLE, since it is implemented by calling a function.  At some
396
point in the future we will want to add some way to express that
397
the call will throw an exception of a known type.
398
 
399
Just before running the optimizers, the compiler lowers the
400
high-level EH constructs above into a set of @samp{goto}s, magic
401
labels, and EH regions.  Continuing to unwind at the end of a
402
cleanup is represented with a @code{GIMPLE_RESX}.
403
 
404
 
405
@node Temporaries
406
@section Temporaries
407
@cindex Temporaries
408
 
409
When gimplification encounters a subexpression that is too
410
complex, it creates a new temporary variable to hold the value of
411
the subexpression, and adds a new statement to initialize it
412
before the current statement. These special temporaries are known
413
as @samp{expression temporaries}, and are allocated using
414
@code{get_formal_tmp_var}.  The compiler tries to always evaluate
415
identical expressions into the same temporary, to simplify
416
elimination of redundant calculations.
417
 
418
We can only use expression temporaries when we know that it will
419
not be reevaluated before its value is used, and that it will not
420
be otherwise modified@footnote{These restrictions are derived
421
from those in Morgan 4.8.}. Other temporaries can be allocated
422
using @code{get_initialized_tmp_var} or @code{create_tmp_var}.
423
 
424
Currently, an expression like @code{a = b + 5} is not reduced any
425
further.  We tried converting it to something like
426
@smallexample
427
T1 = b + 5;
428
a = T1;
429
@end smallexample
430
but this bloated the representation for minimal benefit.  However, a
431
variable which must live in memory cannot appear in an expression; its
432
value is explicitly loaded into a temporary first.  Similarly, storing
433
the value of an expression to a memory variable goes through a
434
temporary.
435
 
436
@node Operands
437
@section Operands
438
@cindex Operands
439
 
440
In general, expressions in GIMPLE consist of an operation and the
441
appropriate number of simple operands; these operands must either be a
442
GIMPLE rvalue (@code{is_gimple_val}), i.e.@: a constant or a register
443
variable.  More complex operands are factored out into temporaries, so
444
that
445
@smallexample
446
a = b + c + d
447
@end smallexample
448
becomes
449
@smallexample
450
T1 = b + c;
451
a = T1 + d;
452
@end smallexample
453
 
454
The same rule holds for arguments to a @code{GIMPLE_CALL}.
455
 
456
The target of an assignment is usually a variable, but can also be a
457
@code{MEM_REF} or a compound lvalue as described below.
458
 
459
@menu
460
* Compound Expressions::
461
* Compound Lvalues::
462
* Conditional Expressions::
463
* Logical Operators::
464
@end menu
465
 
466
@node Compound Expressions
467
@subsection Compound Expressions
468
@cindex Compound Expressions
469
 
470
The left-hand side of a C comma expression is simply moved into a separate
471
statement.
472
 
473
@node Compound Lvalues
474
@subsection Compound Lvalues
475
@cindex Compound Lvalues
476
 
477
Currently compound lvalues involving array and structure field references
478
are not broken down; an expression like @code{a.b[2] = 42} is not reduced
479
any further (though complex array subscripts are).  This restriction is a
480
workaround for limitations in later optimizers; if we were to convert this
481
to
482
 
483
@smallexample
484
T1 = &a.b;
485
T1[2] = 42;
486
@end smallexample
487
 
488
alias analysis would not remember that the reference to @code{T1[2]} came
489
by way of @code{a.b}, so it would think that the assignment could alias
490
another member of @code{a}; this broke @code{struct-alias-1.c}.  Future
491
optimizer improvements may make this limitation unnecessary.
492
 
493
@node Conditional Expressions
494
@subsection Conditional Expressions
495
@cindex Conditional Expressions
496
 
497
A C @code{?:} expression is converted into an @code{if} statement with
498
each branch assigning to the same temporary.  So,
499
 
500
@smallexample
501
a = b ? c : d;
502
@end smallexample
503
becomes
504
@smallexample
505
if (b == 1)
506
  T1 = c;
507
else
508
  T1 = d;
509
a = T1;
510
@end smallexample
511
 
512
The GIMPLE level if-conversion pass re-introduces @code{?:}
513
expression, if appropriate. It is used to vectorize loops with
514
conditions using vector conditional operations.
515
 
516
Note that in GIMPLE, @code{if} statements are represented using
517
@code{GIMPLE_COND}, as described below.
518
 
519
@node Logical Operators
520
@subsection Logical Operators
521
@cindex Logical Operators
522
 
523
Except when they appear in the condition operand of a
524
@code{GIMPLE_COND}, logical `and' and `or' operators are simplified
525
as follows: @code{a = b && c} becomes
526
 
527
@smallexample
528
T1 = (bool)b;
529
if (T1 == true)
530
  T1 = (bool)c;
531
a = T1;
532
@end smallexample
533
 
534
Note that @code{T1} in this example cannot be an expression temporary,
535
because it has two different assignments.
536
 
537
@subsection Manipulating operands
538
 
539
All gimple operands are of type @code{tree}.  But only certain
540
types of trees are allowed to be used as operand tuples.  Basic
541
validation is controlled by the function
542
@code{get_gimple_rhs_class}, which given a tree code, returns an
543
@code{enum} with the following values of type @code{enum
544
gimple_rhs_class}
545
 
546
@itemize @bullet
547
@item @code{GIMPLE_INVALID_RHS}
548
The tree cannot be used as a GIMPLE operand.
549
 
550
@item @code{GIMPLE_TERNARY_RHS}
551
The tree is a valid GIMPLE ternary operation.
552
 
553
@item @code{GIMPLE_BINARY_RHS}
554
The tree is a valid GIMPLE binary operation.
555
 
556
@item @code{GIMPLE_UNARY_RHS}
557
The tree is a valid GIMPLE unary operation.
558
 
559
@item @code{GIMPLE_SINGLE_RHS}
560
The tree is a single object, that cannot be split into simpler
561
operands (for instance, @code{SSA_NAME}, @code{VAR_DECL}, @code{COMPONENT_REF}, etc).
562
 
563
This operand class also acts as an escape hatch for tree nodes
564
that may be flattened out into the operand vector, but would need
565
more than two slots on the RHS.  For instance, a @code{COND_EXPR}
566
expression of the form @code{(a op b) ? x : y} could be flattened
567
out on the operand vector using 4 slots, but it would also
568
require additional processing to distinguish @code{c = a op b}
569
from @code{c = a op b ? x : y}.  Something similar occurs with
570
@code{ASSERT_EXPR}.   In time, these special case tree
571
expressions should be flattened into the operand vector.
572
@end itemize
573
 
574
For tree nodes in the categories @code{GIMPLE_TERNARY_RHS},
575
@code{GIMPLE_BINARY_RHS} and @code{GIMPLE_UNARY_RHS}, they cannot be
576
stored inside tuples directly.  They first need to be flattened and
577
separated into individual components.  For instance, given the GENERIC
578
expression
579
 
580
@smallexample
581
a = b + c
582
@end smallexample
583
 
584
its tree representation is:
585
 
586
@smallexample
587
MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
588
@end smallexample
589
 
590
In this case, the GIMPLE form for this statement is logically
591
identical to its GENERIC form but in GIMPLE, the @code{PLUS_EXPR}
592
on the RHS of the assignment is not represented as a tree,
593
instead the two operands are taken out of the @code{PLUS_EXPR} sub-tree
594
and flattened into the GIMPLE tuple as follows:
595
 
596
@smallexample
597
GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
598
@end smallexample
599
 
600
@subsection Operand vector allocation
601
 
602
The operand vector is stored at the bottom of the three tuple
603
structures that accept operands. This means, that depending on
604
the code of a given statement, its operand vector will be at
605
different offsets from the base of the structure.  To access
606
tuple operands use the following accessors
607
 
608
@deftypefn {GIMPLE function} unsigned gimple_num_ops (gimple g)
609
Returns the number of operands in statement G.
610
@end deftypefn
611
 
612
@deftypefn {GIMPLE function} tree gimple_op (gimple g, unsigned i)
613
Returns operand @code{I} from statement @code{G}.
614
@end deftypefn
615
 
616
@deftypefn {GIMPLE function} {tree *} gimple_ops (gimple g)
617
Returns a pointer into the operand vector for statement @code{G}.  This
618
is computed using an internal table called @code{gimple_ops_offset_}[].
619
This table is indexed by the gimple code of @code{G}.
620
 
621
When the compiler is built, this table is filled-in using the
622
sizes of the structures used by each statement code defined in
623
gimple.def.  Since the operand vector is at the bottom of the
624
structure, for a gimple code @code{C} the offset is computed as sizeof
625
(struct-of @code{C}) - sizeof (tree).
626
 
627
This mechanism adds one memory indirection to every access when
628
using @code{gimple_op}(), if this becomes a bottleneck, a pass can
629
choose to memoize the result from @code{gimple_ops}() and use that to
630
access the operands.
631
@end deftypefn
632
 
633
@subsection Operand validation
634
 
635
When adding a new operand to a gimple statement, the operand will
636
be validated according to what each tuple accepts in its operand
637
vector.  These predicates are called by the
638
@code{gimple_@var{name}_set_...()}.  Each tuple will use one of the
639
following predicates (Note, this list is not exhaustive):
640
 
641
@deftypefn {GIMPLE function} bool is_gimple_val (tree t)
642
Returns true if t is a "GIMPLE value", which are all the
643
non-addressable stack variables (variables for which
644
@code{is_gimple_reg} returns true) and constants (expressions for which
645
@code{is_gimple_min_invariant} returns true).
646
@end deftypefn
647
 
648
@deftypefn {GIMPLE function} bool is_gimple_addressable (tree t)
649
Returns true if t is a symbol or memory reference whose address
650
can be taken.
651
@end deftypefn
652
 
653
@deftypefn {GIMPLE function} bool is_gimple_asm_val (tree t)
654
Similar to @code{is_gimple_val} but it also accepts hard registers.
655
@end deftypefn
656
 
657
@deftypefn {GIMPLE function} bool is_gimple_call_addr (tree t)
658
Return true if t is a valid expression to use as the function
659
called by a @code{GIMPLE_CALL}.
660
@end deftypefn
661
 
662
@deftypefn {GIMPLE function} bool is_gimple_mem_ref_addr (tree t)
663
Return true if t is a valid expression to use as first operand
664
of a @code{MEM_REF} expression.
665
@end deftypefn
666
 
667
@deftypefn {GIMPLE function} bool is_gimple_constant (tree t)
668
Return true if t is a valid gimple constant.
669
@end deftypefn
670
 
671
@deftypefn {GIMPLE function} bool is_gimple_min_invariant (tree t)
672
Return true if t is a valid minimal invariant.  This is different
673
from constants, in that the specific value of t may not be known
674
at compile time, but it is known that it doesn't change (e.g.,
675
the address of a function local variable).
676
@end deftypefn
677
 
678
@deftypefn {GIMPLE function} bool is_gimple_ip_invariant (tree t)
679
Return true if t is an interprocedural invariant.  This means that t
680
is a valid invariant in all functions (e.g. it can be an address of a
681
global variable but not of a local one).
682
@end deftypefn
683
 
684
@deftypefn {GIMPLE function} bool is_gimple_ip_invariant_address (tree t)
685
Return true if t is an @code{ADDR_EXPR} that does not change once the
686
program is running (and which is valid in all functions).
687
@end deftypefn
688
 
689
 
690
@subsection Statement validation
691
 
692
@deftypefn {GIMPLE function} bool is_gimple_assign (gimple g)
693
Return true if the code of g is @code{GIMPLE_ASSIGN}.
694
@end deftypefn
695
 
696
@deftypefn {GIMPLE function} bool is_gimple_call (gimple g)
697
Return true if the code of g is @code{GIMPLE_CALL}.
698
@end deftypefn
699
 
700
@deftypefn {GIMPLE function} bool is_gimple_debug (gimple g)
701
Return true if the code of g is @code{GIMPLE_DEBUG}.
702
@end deftypefn
703
 
704
@deftypefn {GIMPLE function} bool gimple_assign_cast_p (gimple g)
705
Return true if g is a @code{GIMPLE_ASSIGN} that performs a type cast
706
operation.
707
@end deftypefn
708
 
709
@deftypefn {GIMPLE function} bool gimple_debug_bind_p (gimple g)
710
Return true if g is a @code{GIMPLE_DEBUG} that binds the value of an
711
expression to a variable.
712
@end deftypefn
713
 
714
@node Manipulating GIMPLE statements
715
@section Manipulating GIMPLE statements
716
@cindex Manipulating GIMPLE statements
717
 
718
This section documents all the functions available to handle each
719
of the GIMPLE instructions.
720
 
721
@subsection Common accessors
722
The following are common accessors for gimple statements.
723
 
724
@deftypefn {GIMPLE function} {enum gimple_code} gimple_code (gimple g)
725
Return the code for statement @code{G}.
726
@end deftypefn
727
 
728
@deftypefn {GIMPLE function} basic_block gimple_bb (gimple g)
729
Return the basic block to which statement @code{G} belongs to.
730
@end deftypefn
731
 
732
@deftypefn {GIMPLE function} tree gimple_block (gimple g)
733
Return the lexical scope block holding statement @code{G}.
734
@end deftypefn
735
 
736
@deftypefn {GIMPLE function} tree gimple_expr_type (gimple stmt)
737
Return the type of the main expression computed by @code{STMT}. Return
738
@code{void_type_node} if @code{STMT} computes nothing. This will only return
739
something meaningful for @code{GIMPLE_ASSIGN}, @code{GIMPLE_COND} and
740
@code{GIMPLE_CALL}.  For all other tuple codes, it will return
741
@code{void_type_node}.
742
@end deftypefn
743
 
744
@deftypefn {GIMPLE function} {enum tree_code} gimple_expr_code (gimple stmt)
745
Return the tree code for the expression computed by @code{STMT}.  This
746
is only meaningful for @code{GIMPLE_CALL}, @code{GIMPLE_ASSIGN} and
747
@code{GIMPLE_COND}.  If @code{STMT} is @code{GIMPLE_CALL}, it will return @code{CALL_EXPR}.
748
For @code{GIMPLE_COND}, it returns the code of the comparison predicate.
749
For @code{GIMPLE_ASSIGN} it returns the code of the operation performed
750
by the @code{RHS} of the assignment.
751
@end deftypefn
752
 
753
@deftypefn {GIMPLE function} void gimple_set_block (gimple g, tree block)
754
Set the lexical scope block of @code{G} to @code{BLOCK}.
755
@end deftypefn
756
 
757
@deftypefn {GIMPLE function} location_t gimple_locus (gimple g)
758
Return locus information for statement @code{G}.
759
@end deftypefn
760
 
761
@deftypefn {GIMPLE function} void gimple_set_locus (gimple g, location_t locus)
762
Set locus information for statement @code{G}.
763
@end deftypefn
764
 
765
@deftypefn {GIMPLE function} bool gimple_locus_empty_p (gimple g)
766
Return true if @code{G} does not have locus information.
767
@end deftypefn
768
 
769
@deftypefn {GIMPLE function} bool gimple_no_warning_p (gimple stmt)
770
Return true if no warnings should be emitted for statement @code{STMT}.
771
@end deftypefn
772
 
773
@deftypefn {GIMPLE function} void gimple_set_visited (gimple stmt, bool visited_p)
774
Set the visited status on statement @code{STMT} to @code{VISITED_P}.
775
@end deftypefn
776
 
777
@deftypefn {GIMPLE function} bool gimple_visited_p (gimple stmt)
778
Return the visited status on statement @code{STMT}.
779
@end deftypefn
780
 
781
@deftypefn {GIMPLE function} void gimple_set_plf (gimple stmt, enum plf_mask plf, bool val_p)
782
Set pass local flag @code{PLF} on statement @code{STMT} to @code{VAL_P}.
783
@end deftypefn
784
 
785
@deftypefn {GIMPLE function} {unsigned int} gimple_plf (gimple stmt, enum plf_mask plf)
786
Return the value of pass local flag @code{PLF} on statement @code{STMT}.
787
@end deftypefn
788
 
789
@deftypefn {GIMPLE function} bool gimple_has_ops (gimple g)
790
Return true if statement @code{G} has register or memory operands.
791
@end deftypefn
792
 
793
@deftypefn {GIMPLE function} bool gimple_has_mem_ops (gimple g)
794
Return true if statement @code{G} has memory operands.
795
@end deftypefn
796
 
797
@deftypefn {GIMPLE function} unsigned gimple_num_ops (gimple g)
798
Return the number of operands for statement @code{G}.
799
@end deftypefn
800
 
801
@deftypefn {GIMPLE function} {tree *} gimple_ops (gimple g)
802
Return the array of operands for statement @code{G}.
803
@end deftypefn
804
 
805
@deftypefn {GIMPLE function} tree gimple_op (gimple g, unsigned i)
806
Return operand @code{I} for statement @code{G}.
807
@end deftypefn
808
 
809
@deftypefn {GIMPLE function} {tree *} gimple_op_ptr (gimple g, unsigned i)
810
Return a pointer to operand @code{I} for statement @code{G}.
811
@end deftypefn
812
 
813
@deftypefn {GIMPLE function} void gimple_set_op (gimple g, unsigned i, tree op)
814
Set operand @code{I} of statement @code{G} to @code{OP}.
815
@end deftypefn
816
 
817
@deftypefn {GIMPLE function} bitmap gimple_addresses_taken (gimple stmt)
818
Return the set of symbols that have had their address taken by
819
@code{STMT}.
820
@end deftypefn
821
 
822
@deftypefn {GIMPLE function} {struct def_optype_d *} gimple_def_ops (gimple g)
823
Return the set of @code{DEF} operands for statement @code{G}.
824
@end deftypefn
825
 
826
@deftypefn {GIMPLE function} void gimple_set_def_ops (gimple g, struct def_optype_d *def)
827
Set @code{DEF} to be the set of @code{DEF} operands for statement @code{G}.
828
@end deftypefn
829
 
830
@deftypefn {GIMPLE function} {struct use_optype_d *} gimple_use_ops (gimple g)
831
Return the set of @code{USE} operands for statement @code{G}.
832
@end deftypefn
833
 
834
@deftypefn {GIMPLE function} void gimple_set_use_ops (gimple g, struct use_optype_d *use)
835
Set @code{USE} to be the set of @code{USE} operands for statement @code{G}.
836
@end deftypefn
837
 
838
@deftypefn {GIMPLE function} {struct voptype_d *} gimple_vuse_ops (gimple g)
839
Return the set of @code{VUSE} operands for statement @code{G}.
840
@end deftypefn
841
 
842
@deftypefn {GIMPLE function} void gimple_set_vuse_ops (gimple g, struct voptype_d *ops)
843
Set @code{OPS} to be the set of @code{VUSE} operands for statement @code{G}.
844
@end deftypefn
845
 
846
@deftypefn {GIMPLE function} {struct voptype_d *} gimple_vdef_ops (gimple g)
847
Return the set of @code{VDEF} operands for statement @code{G}.
848
@end deftypefn
849
 
850
@deftypefn {GIMPLE function} void gimple_set_vdef_ops (gimple g, struct voptype_d *ops)
851
Set @code{OPS} to be the set of @code{VDEF} operands for statement @code{G}.
852
@end deftypefn
853
 
854
@deftypefn {GIMPLE function} bitmap gimple_loaded_syms (gimple g)
855
Return the set of symbols loaded by statement @code{G}.  Each element of
856
the set is the @code{DECL_UID} of the corresponding symbol.
857
@end deftypefn
858
 
859
@deftypefn {GIMPLE function} bitmap gimple_stored_syms (gimple g)
860
Return the set of symbols stored by statement @code{G}.  Each element of
861
the set is the @code{DECL_UID} of the corresponding symbol.
862
@end deftypefn
863
 
864
@deftypefn {GIMPLE function} bool gimple_modified_p (gimple g)
865
Return true if statement @code{G} has operands and the modified field
866
has been set.
867
@end deftypefn
868
 
869
@deftypefn {GIMPLE function} bool gimple_has_volatile_ops (gimple stmt)
870
Return true if statement @code{STMT} contains volatile operands.
871
@end deftypefn
872
 
873
@deftypefn {GIMPLE function} void gimple_set_has_volatile_ops (gimple stmt, bool volatilep)
874
Return true if statement @code{STMT} contains volatile operands.
875
@end deftypefn
876
 
877
@deftypefn {GIMPLE function} void update_stmt (gimple s)
878
Mark statement @code{S} as modified, and update it.
879
@end deftypefn
880
 
881
@deftypefn {GIMPLE function} void update_stmt_if_modified (gimple s)
882
Update statement @code{S} if it has been marked modified.
883
@end deftypefn
884
 
885
@deftypefn {GIMPLE function} gimple gimple_copy (gimple stmt)
886
Return a deep copy of statement @code{STMT}.
887
@end deftypefn
888
 
889
@node Tuple specific accessors
890
@section Tuple specific accessors
891
@cindex Tuple specific accessors
892
 
893
@menu
894
* @code{GIMPLE_ASM}::
895
* @code{GIMPLE_ASSIGN}::
896
* @code{GIMPLE_BIND}::
897
* @code{GIMPLE_CALL}::
898
* @code{GIMPLE_CATCH}::
899
* @code{GIMPLE_COND}::
900
* @code{GIMPLE_DEBUG}::
901
* @code{GIMPLE_EH_FILTER}::
902
* @code{GIMPLE_LABEL}::
903
* @code{GIMPLE_NOP}::
904
* @code{GIMPLE_OMP_ATOMIC_LOAD}::
905
* @code{GIMPLE_OMP_ATOMIC_STORE}::
906
* @code{GIMPLE_OMP_CONTINUE}::
907
* @code{GIMPLE_OMP_CRITICAL}::
908
* @code{GIMPLE_OMP_FOR}::
909
* @code{GIMPLE_OMP_MASTER}::
910
* @code{GIMPLE_OMP_ORDERED}::
911
* @code{GIMPLE_OMP_PARALLEL}::
912
* @code{GIMPLE_OMP_RETURN}::
913
* @code{GIMPLE_OMP_SECTION}::
914
* @code{GIMPLE_OMP_SECTIONS}::
915
* @code{GIMPLE_OMP_SINGLE}::
916
* @code{GIMPLE_PHI}::
917
* @code{GIMPLE_RESX}::
918
* @code{GIMPLE_RETURN}::
919
* @code{GIMPLE_SWITCH}::
920
* @code{GIMPLE_TRY}::
921
* @code{GIMPLE_WITH_CLEANUP_EXPR}::
922
@end menu
923
 
924
 
925
@node @code{GIMPLE_ASM}
926
@subsection @code{GIMPLE_ASM}
927
@cindex @code{GIMPLE_ASM}
928
 
929
@deftypefn {GIMPLE function} gimple gimple_build_asm (const char *string, ninputs, noutputs, nclobbers, ...)
930
Build a @code{GIMPLE_ASM} statement.  This statement is used for
931
building in-line assembly constructs.  @code{STRING} is the assembly
932
code.  @code{NINPUT} is the number of register inputs.  @code{NOUTPUT} is the
933
number of register outputs.  @code{NCLOBBERS} is the number of clobbered
934
registers.  The rest of the arguments trees for each input,
935
output, and clobbered registers.
936
@end deftypefn
937
 
938
@deftypefn {GIMPLE function} gimple gimple_build_asm_vec (const char *, VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
939
Identical to gimple_build_asm, but the arguments are passed in
940
VECs.
941
@end deftypefn
942
 
943
@deftypefn {GIMPLE function} unsigned gimple_asm_ninputs (gimple g)
944
Return the number of input operands for @code{GIMPLE_ASM} @code{G}.
945
@end deftypefn
946
 
947
@deftypefn {GIMPLE function} unsigned gimple_asm_noutputs (gimple g)
948
Return the number of output operands for @code{GIMPLE_ASM} @code{G}.
949
@end deftypefn
950
 
951
@deftypefn {GIMPLE function} unsigned gimple_asm_nclobbers (gimple g)
952
Return the number of clobber operands for @code{GIMPLE_ASM} @code{G}.
953
@end deftypefn
954
 
955
@deftypefn {GIMPLE function} tree gimple_asm_input_op (gimple g, unsigned index)
956
Return input operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
957
@end deftypefn
958
 
959
@deftypefn {GIMPLE function} void gimple_asm_set_input_op (gimple g, unsigned index, tree in_op)
960
Set @code{IN_OP} to be input operand @code{INDEX} in @code{GIMPLE_ASM} @code{G}.
961
@end deftypefn
962
 
963
@deftypefn {GIMPLE function} tree gimple_asm_output_op (gimple g, unsigned index)
964
Return output operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
965
@end deftypefn
966
 
967
@deftypefn {GIMPLE function} void gimple_asm_set_output_op (gimple g, @
968
unsigned index, tree out_op)
969
Set @code{OUT_OP} to be output operand @code{INDEX} in @code{GIMPLE_ASM} @code{G}.
970
@end deftypefn
971
 
972
@deftypefn {GIMPLE function} tree gimple_asm_clobber_op (gimple g, unsigned index)
973
Return clobber operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
974
@end deftypefn
975
 
976
@deftypefn {GIMPLE function} void gimple_asm_set_clobber_op (gimple g, unsigned index, tree clobber_op)
977
Set @code{CLOBBER_OP} to be clobber operand @code{INDEX} in @code{GIMPLE_ASM} @code{G}.
978
@end deftypefn
979
 
980
@deftypefn {GIMPLE function} {const char *} gimple_asm_string (gimple g)
981
Return the string representing the assembly instruction in
982
@code{GIMPLE_ASM} @code{G}.
983
@end deftypefn
984
 
985
@deftypefn {GIMPLE function} bool gimple_asm_volatile_p (gimple g)
986
Return true if @code{G} is an asm statement marked volatile.
987
@end deftypefn
988
 
989
@deftypefn {GIMPLE function} void gimple_asm_set_volatile (gimple g)
990
Mark asm statement @code{G} as volatile.
991
@end deftypefn
992
 
993
@deftypefn {GIMPLE function} void gimple_asm_clear_volatile (gimple g)
994
Remove volatile marker from asm statement @code{G}.
995
@end deftypefn
996
 
997
@node @code{GIMPLE_ASSIGN}
998
@subsection @code{GIMPLE_ASSIGN}
999
@cindex @code{GIMPLE_ASSIGN}
1000
 
1001
@deftypefn {GIMPLE function} gimple gimple_build_assign (tree lhs, tree rhs)
1002
Build a @code{GIMPLE_ASSIGN} statement.  The left-hand side is an lvalue
1003
passed in lhs.  The right-hand side can be either a unary or
1004
binary tree expression.  The expression tree rhs will be
1005
flattened and its operands assigned to the corresponding operand
1006
slots in the new statement.  This function is useful when you
1007
already have a tree expression that you want to convert into a
1008
tuple.  However, try to avoid building expression trees for the
1009
sole purpose of calling this function.  If you already have the
1010
operands in separate trees, it is better to use
1011
@code{gimple_build_assign_with_ops}.
1012
@end deftypefn
1013
 
1014
 
1015
@deftypefn {GIMPLE function} gimple gimplify_assign (tree dst, tree src, gimple_seq *seq_p)
1016
Build a new @code{GIMPLE_ASSIGN} tuple and append it to the end of
1017
@code{*SEQ_P}.
1018
@end deftypefn
1019
 
1020
@code{DST}/@code{SRC} are the destination and source respectively.  You can
1021
pass ungimplified trees in @code{DST} or @code{SRC}, in which
1022
case they will be converted to a gimple operand if necessary.
1023
 
1024
This function returns the newly created @code{GIMPLE_ASSIGN} tuple.
1025
 
1026
@deftypefn {GIMPLE function} gimple gimple_build_assign_with_ops @
1027
(enum tree_code subcode, tree lhs, tree op1, tree op2)
1028
This function is similar to @code{gimple_build_assign}, but is used to
1029
build a @code{GIMPLE_ASSIGN} statement when the operands of the
1030
right-hand side of the assignment are already split into
1031
different operands.
1032
 
1033
The left-hand side is an lvalue passed in lhs.  Subcode is the
1034
@code{tree_code} for the right-hand side of the assignment.  Op1 and op2
1035
are the operands.  If op2 is null, subcode must be a @code{tree_code}
1036
for a unary expression.
1037
@end deftypefn
1038
 
1039
@deftypefn {GIMPLE function} {enum tree_code} gimple_assign_rhs_code (gimple g)
1040
Return the code of the expression computed on the @code{RHS} of
1041
assignment statement @code{G}.
1042
@end deftypefn
1043
 
1044
 
1045
@deftypefn {GIMPLE function} {enum gimple_rhs_class} gimple_assign_rhs_class (gimple g)
1046
Return the gimple rhs class of the code for the expression
1047
computed on the rhs of assignment statement @code{G}.  This will never
1048
return @code{GIMPLE_INVALID_RHS}.
1049
@end deftypefn
1050
 
1051
@deftypefn {GIMPLE function} tree gimple_assign_lhs (gimple g)
1052
Return the @code{LHS} of assignment statement @code{G}.
1053
@end deftypefn
1054
 
1055
@deftypefn {GIMPLE function} {tree *} gimple_assign_lhs_ptr (gimple g)
1056
Return a pointer to the @code{LHS} of assignment statement @code{G}.
1057
@end deftypefn
1058
 
1059
@deftypefn {GIMPLE function} tree gimple_assign_rhs1 (gimple g)
1060
Return the first operand on the @code{RHS} of assignment statement @code{G}.
1061
@end deftypefn
1062
 
1063
@deftypefn {GIMPLE function} {tree *} gimple_assign_rhs1_ptr (gimple g)
1064
Return the address of the first operand on the @code{RHS} of assignment
1065
statement @code{G}.
1066
@end deftypefn
1067
 
1068
@deftypefn {GIMPLE function} tree gimple_assign_rhs2 (gimple g)
1069
Return the second operand on the @code{RHS} of assignment statement @code{G}.
1070
@end deftypefn
1071
 
1072
@deftypefn {GIMPLE function} {tree *} gimple_assign_rhs2_ptr (gimple g)
1073
Return the address of the second operand on the @code{RHS} of assignment
1074
statement @code{G}.
1075
@end deftypefn
1076
 
1077
@deftypefn {GIMPLE function} tree gimple_assign_rhs3 (gimple g)
1078
Return the third operand on the @code{RHS} of assignment statement @code{G}.
1079
@end deftypefn
1080
 
1081
@deftypefn {GIMPLE function} {tree *} gimple_assign_rhs3_ptr (gimple g)
1082
Return the address of the third operand on the @code{RHS} of assignment
1083
statement @code{G}.
1084
@end deftypefn
1085
 
1086
@deftypefn {GIMPLE function} void gimple_assign_set_lhs (gimple g, tree lhs)
1087
Set @code{LHS} to be the @code{LHS} operand of assignment statement @code{G}.
1088
@end deftypefn
1089
 
1090
@deftypefn {GIMPLE function} void gimple_assign_set_rhs1 (gimple g, tree rhs)
1091
Set @code{RHS} to be the first operand on the @code{RHS} of assignment
1092
statement @code{G}.
1093
@end deftypefn
1094
 
1095
@deftypefn {GIMPLE function} void gimple_assign_set_rhs2 (gimple g, tree rhs)
1096
Set @code{RHS} to be the second operand on the @code{RHS} of assignment
1097
statement @code{G}.
1098
@end deftypefn
1099
 
1100
@deftypefn {GIMPLE function} void gimple_assign_set_rhs3 (gimple g, tree rhs)
1101
Set @code{RHS} to be the third operand on the @code{RHS} of assignment
1102
statement @code{G}.
1103
@end deftypefn
1104
 
1105
@deftypefn {GIMPLE function} bool gimple_assign_cast_p (gimple s)
1106
Return true if @code{S} is a type-cast assignment.
1107
@end deftypefn
1108
 
1109
 
1110
@node @code{GIMPLE_BIND}
1111
@subsection @code{GIMPLE_BIND}
1112
@cindex @code{GIMPLE_BIND}
1113
 
1114
@deftypefn {GIMPLE function} gimple gimple_build_bind (tree vars, gimple_seq body)
1115
Build a @code{GIMPLE_BIND} statement with a list of variables in @code{VARS}
1116
and a body of statements in sequence @code{BODY}.
1117
@end deftypefn
1118
 
1119
@deftypefn {GIMPLE function} tree gimple_bind_vars (gimple g)
1120
Return the variables declared in the @code{GIMPLE_BIND} statement @code{G}.
1121
@end deftypefn
1122
 
1123
@deftypefn {GIMPLE function} void gimple_bind_set_vars (gimple g, tree vars)
1124
Set @code{VARS} to be the set of variables declared in the @code{GIMPLE_BIND}
1125
statement @code{G}.
1126
@end deftypefn
1127
 
1128
@deftypefn {GIMPLE function} void gimple_bind_append_vars (gimple g, tree vars)
1129
Append @code{VARS} to the set of variables declared in the @code{GIMPLE_BIND}
1130
statement @code{G}.
1131
@end deftypefn
1132
 
1133
@deftypefn {GIMPLE function} gimple_seq gimple_bind_body (gimple g)
1134
Return the GIMPLE sequence contained in the @code{GIMPLE_BIND} statement
1135
@code{G}.
1136
@end deftypefn
1137
 
1138
@deftypefn {GIMPLE function} void gimple_bind_set_body (gimple g, gimple_seq seq)
1139
Set @code{SEQ} to be sequence contained in the @code{GIMPLE_BIND} statement @code{G}.
1140
@end deftypefn
1141
 
1142
@deftypefn {GIMPLE function} void gimple_bind_add_stmt (gimple gs, gimple stmt)
1143
Append a statement to the end of a @code{GIMPLE_BIND}'s body.
1144
@end deftypefn
1145
 
1146
@deftypefn {GIMPLE function} void gimple_bind_add_seq (gimple gs, gimple_seq seq)
1147
Append a sequence of statements to the end of a @code{GIMPLE_BIND}'s
1148
body.
1149
@end deftypefn
1150
 
1151
@deftypefn {GIMPLE function} tree gimple_bind_block (gimple g)
1152
Return the @code{TREE_BLOCK} node associated with @code{GIMPLE_BIND} statement
1153
@code{G}. This is analogous to the @code{BIND_EXPR_BLOCK} field in trees.
1154
@end deftypefn
1155
 
1156
@deftypefn {GIMPLE function} void gimple_bind_set_block (gimple g, tree block)
1157
Set @code{BLOCK} to be the @code{TREE_BLOCK} node associated with @code{GIMPLE_BIND}
1158
statement @code{G}.
1159
@end deftypefn
1160
 
1161
 
1162
@node @code{GIMPLE_CALL}
1163
@subsection @code{GIMPLE_CALL}
1164
@cindex @code{GIMPLE_CALL}
1165
 
1166
@deftypefn {GIMPLE function} gimple gimple_build_call (tree fn, unsigned nargs, ...)
1167
Build a @code{GIMPLE_CALL} statement to function @code{FN}.  The argument @code{FN}
1168
must be either a @code{FUNCTION_DECL} or a gimple call address as
1169
determined by @code{is_gimple_call_addr}.  @code{NARGS} are the number of
1170
arguments.  The rest of the arguments follow the argument @code{NARGS},
1171
and must be trees that are valid as rvalues in gimple (i.e., each
1172
operand is validated with @code{is_gimple_operand}).
1173
@end deftypefn
1174
 
1175
 
1176
@deftypefn {GIMPLE function} gimple gimple_build_call_from_tree (tree call_expr)
1177
Build a @code{GIMPLE_CALL} from a @code{CALL_EXPR} node.  The arguments and the
1178
function are taken from the expression directly.  This routine
1179
assumes that @code{call_expr} is already in GIMPLE form.  That is, its
1180
operands are GIMPLE values and the function call needs no further
1181
simplification.  All the call flags in @code{call_expr} are copied over
1182
to the new @code{GIMPLE_CALL}.
1183
@end deftypefn
1184
 
1185
@deftypefn {GIMPLE function} gimple gimple_build_call_vec (tree fn, @code{VEC}(tree, heap) *args)
1186
Identical to @code{gimple_build_call} but the arguments are stored in a
1187
@code{VEC}().
1188
@end deftypefn
1189
 
1190
@deftypefn {GIMPLE function} tree gimple_call_lhs (gimple g)
1191
Return the @code{LHS} of call statement @code{G}.
1192
@end deftypefn
1193
 
1194
@deftypefn {GIMPLE function} {tree *} gimple_call_lhs_ptr (gimple g)
1195
Return a pointer to the @code{LHS} of call statement @code{G}.
1196
@end deftypefn
1197
 
1198
@deftypefn {GIMPLE function} void gimple_call_set_lhs (gimple g, tree lhs)
1199
Set @code{LHS} to be the @code{LHS} operand of call statement @code{G}.
1200
@end deftypefn
1201
 
1202
@deftypefn {GIMPLE function} tree gimple_call_fn (gimple g)
1203
Return the tree node representing the function called by call
1204
statement @code{G}.
1205
@end deftypefn
1206
 
1207
@deftypefn {GIMPLE function} void gimple_call_set_fn (gimple g, tree fn)
1208
Set @code{FN} to be the function called by call statement @code{G}.  This has
1209
to be a gimple value specifying the address of the called
1210
function.
1211
@end deftypefn
1212
 
1213
@deftypefn {GIMPLE function} tree gimple_call_fndecl (gimple g)
1214
If a given @code{GIMPLE_CALL}'s callee is a @code{FUNCTION_DECL}, return it.
1215
Otherwise return @code{NULL}.  This function is analogous to
1216
@code{get_callee_fndecl} in @code{GENERIC}.
1217
@end deftypefn
1218
 
1219
@deftypefn {GIMPLE function} tree gimple_call_set_fndecl (gimple g, tree fndecl)
1220
Set the called function to @code{FNDECL}.
1221
@end deftypefn
1222
 
1223
@deftypefn {GIMPLE function} tree gimple_call_return_type (gimple g)
1224
Return the type returned by call statement @code{G}.
1225
@end deftypefn
1226
 
1227
@deftypefn {GIMPLE function} tree gimple_call_chain (gimple g)
1228
Return the static chain for call statement @code{G}.
1229
@end deftypefn
1230
 
1231
@deftypefn {GIMPLE function} void gimple_call_set_chain (gimple g, tree chain)
1232
Set @code{CHAIN} to be the static chain for call statement @code{G}.
1233
@end deftypefn
1234
 
1235
@deftypefn {GIMPLE function} unsigned gimple_call_num_args (gimple g)
1236
Return the number of arguments used by call statement @code{G}.
1237
@end deftypefn
1238
 
1239
@deftypefn {GIMPLE function} tree gimple_call_arg (gimple g, unsigned index)
1240
Return the argument at position @code{INDEX} for call statement @code{G}.  The
1241
first argument is 0.
1242
@end deftypefn
1243
 
1244
@deftypefn {GIMPLE function} {tree *} gimple_call_arg_ptr (gimple g, unsigned index)
1245
Return a pointer to the argument at position @code{INDEX} for call
1246
statement @code{G}.
1247
@end deftypefn
1248
 
1249
@deftypefn {GIMPLE function} void gimple_call_set_arg (gimple g, unsigned index, tree arg)
1250
Set @code{ARG} to be the argument at position @code{INDEX} for call statement
1251
@code{G}.
1252
@end deftypefn
1253
 
1254
@deftypefn {GIMPLE function} void gimple_call_set_tail (gimple s)
1255
Mark call statement @code{S} as being a tail call (i.e., a call just
1256
before the exit of a function). These calls are candidate for
1257
tail call optimization.
1258
@end deftypefn
1259
 
1260
@deftypefn {GIMPLE function} bool gimple_call_tail_p (gimple s)
1261
Return true if @code{GIMPLE_CALL} @code{S} is marked as a tail call.
1262
@end deftypefn
1263
 
1264
@deftypefn {GIMPLE function} void gimple_call_mark_uninlinable (gimple s)
1265
Mark @code{GIMPLE_CALL} @code{S} as being uninlinable.
1266
@end deftypefn
1267
 
1268
@deftypefn {GIMPLE function} bool gimple_call_cannot_inline_p (gimple s)
1269
Return true if @code{GIMPLE_CALL} @code{S} cannot be inlined.
1270
@end deftypefn
1271
 
1272
@deftypefn {GIMPLE function} bool gimple_call_noreturn_p (gimple s)
1273
Return true if @code{S} is a noreturn call.
1274
@end deftypefn
1275
 
1276
@deftypefn {GIMPLE function} gimple gimple_call_copy_skip_args (gimple stmt, bitmap args_to_skip)
1277
Build a @code{GIMPLE_CALL} identical to @code{STMT} but skipping the arguments
1278
in the positions marked by the set @code{ARGS_TO_SKIP}.
1279
@end deftypefn
1280
 
1281
 
1282
@node @code{GIMPLE_CATCH}
1283
@subsection @code{GIMPLE_CATCH}
1284
@cindex @code{GIMPLE_CATCH}
1285
 
1286
@deftypefn {GIMPLE function} gimple gimple_build_catch (tree types, gimple_seq handler)
1287
Build a @code{GIMPLE_CATCH} statement.  @code{TYPES} are the tree types this
1288
catch handles.  @code{HANDLER} is a sequence of statements with the code
1289
for the handler.
1290
@end deftypefn
1291
 
1292
@deftypefn {GIMPLE function} tree gimple_catch_types (gimple g)
1293
Return the types handled by @code{GIMPLE_CATCH} statement @code{G}.
1294
@end deftypefn
1295
 
1296
@deftypefn {GIMPLE function} {tree *} gimple_catch_types_ptr (gimple g)
1297
Return a pointer to the types handled by @code{GIMPLE_CATCH} statement
1298
@code{G}.
1299
@end deftypefn
1300
 
1301
@deftypefn {GIMPLE function} gimple_seq gimple_catch_handler (gimple g)
1302
Return the GIMPLE sequence representing the body of the handler
1303
of @code{GIMPLE_CATCH} statement @code{G}.
1304
@end deftypefn
1305
 
1306
@deftypefn {GIMPLE function} void gimple_catch_set_types (gimple g, tree t)
1307
Set @code{T} to be the set of types handled by @code{GIMPLE_CATCH} @code{G}.
1308
@end deftypefn
1309
 
1310
@deftypefn {GIMPLE function} void gimple_catch_set_handler (gimple g, gimple_seq handler)
1311
Set @code{HANDLER} to be the body of @code{GIMPLE_CATCH} @code{G}.
1312
@end deftypefn
1313
 
1314
 
1315
@node @code{GIMPLE_COND}
1316
@subsection @code{GIMPLE_COND}
1317
@cindex @code{GIMPLE_COND}
1318
 
1319
@deftypefn {GIMPLE function} gimple gimple_build_cond (enum tree_code pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
1320
Build a @code{GIMPLE_COND} statement.  @code{A} @code{GIMPLE_COND} statement compares
1321
@code{LHS} and @code{RHS} and if the condition in @code{PRED_CODE} is true, jump to
1322
the label in @code{t_label}, otherwise jump to the label in @code{f_label}.
1323
@code{PRED_CODE} are relational operator tree codes like @code{EQ_EXPR},
1324
@code{LT_EXPR}, @code{LE_EXPR}, @code{NE_EXPR}, etc.
1325
@end deftypefn
1326
 
1327
 
1328
@deftypefn {GIMPLE function} gimple gimple_build_cond_from_tree (tree cond, tree t_label, tree f_label)
1329
Build a @code{GIMPLE_COND} statement from the conditional expression
1330
tree @code{COND}.  @code{T_LABEL} and @code{F_LABEL} are as in @code{gimple_build_cond}.
1331
@end deftypefn
1332
 
1333
@deftypefn {GIMPLE function} {enum tree_code} gimple_cond_code (gimple g)
1334
Return the code of the predicate computed by conditional
1335
statement @code{G}.
1336
@end deftypefn
1337
 
1338
@deftypefn {GIMPLE function} void gimple_cond_set_code (gimple g, enum tree_code code)
1339
Set @code{CODE} to be the predicate code for the conditional statement
1340
@code{G}.
1341
@end deftypefn
1342
 
1343
@deftypefn {GIMPLE function} tree gimple_cond_lhs (gimple g)
1344
Return the @code{LHS} of the predicate computed by conditional statement
1345
@code{G}.
1346
@end deftypefn
1347
 
1348
@deftypefn {GIMPLE function} void gimple_cond_set_lhs (gimple g, tree lhs)
1349
Set @code{LHS} to be the @code{LHS} operand of the predicate computed by
1350
conditional statement @code{G}.
1351
@end deftypefn
1352
 
1353
@deftypefn {GIMPLE function} tree gimple_cond_rhs (gimple g)
1354
Return the @code{RHS} operand of the predicate computed by conditional
1355
@code{G}.
1356
@end deftypefn
1357
 
1358
@deftypefn {GIMPLE function} void gimple_cond_set_rhs (gimple g, tree rhs)
1359
Set @code{RHS} to be the @code{RHS} operand of the predicate computed by
1360
conditional statement @code{G}.
1361
@end deftypefn
1362
 
1363
@deftypefn {GIMPLE function} tree gimple_cond_true_label (gimple g)
1364
Return the label used by conditional statement @code{G} when its
1365
predicate evaluates to true.
1366
@end deftypefn
1367
 
1368
@deftypefn {GIMPLE function} void gimple_cond_set_true_label (gimple g, tree label)
1369
Set @code{LABEL} to be the label used by conditional statement @code{G} when
1370
its predicate evaluates to true.
1371
@end deftypefn
1372
 
1373
@deftypefn {GIMPLE function} void gimple_cond_set_false_label (gimple g, tree label)
1374
Set @code{LABEL} to be the label used by conditional statement @code{G} when
1375
its predicate evaluates to false.
1376
@end deftypefn
1377
 
1378
@deftypefn {GIMPLE function} tree gimple_cond_false_label (gimple g)
1379
Return the label used by conditional statement @code{G} when its
1380
predicate evaluates to false.
1381
@end deftypefn
1382
 
1383
@deftypefn {GIMPLE function} void gimple_cond_make_false (gimple g)
1384
Set the conditional @code{COND_STMT} to be of the form 'if (1 == 0)'.
1385
@end deftypefn
1386
 
1387
@deftypefn {GIMPLE function} void gimple_cond_make_true (gimple g)
1388
Set the conditional @code{COND_STMT} to be of the form 'if (1 == 1)'.
1389
@end deftypefn
1390
 
1391
@node @code{GIMPLE_DEBUG}
1392
@subsection @code{GIMPLE_DEBUG}
1393
@cindex @code{GIMPLE_DEBUG}
1394
@cindex @code{GIMPLE_DEBUG_BIND}
1395
 
1396
@deftypefn {GIMPLE function} gimple gimple_build_debug_bind (tree var, tree value, gimple stmt)
1397
Build a @code{GIMPLE_DEBUG} statement with @code{GIMPLE_DEBUG_BIND} of
1398
@code{subcode}.  The effect of this statement is to tell debug
1399
information generation machinery that the value of user variable
1400
@code{var} is given by @code{value} at that point, and to remain with
1401
that value until @code{var} runs out of scope, a
1402
dynamically-subsequent debug bind statement overrides the binding, or
1403
conflicting values reach a control flow merge point.  Even if
1404
components of the @code{value} expression change afterwards, the
1405
variable is supposed to retain the same value, though not necessarily
1406
the same location.
1407
 
1408
It is expected that @code{var} be most often a tree for automatic user
1409
variables (@code{VAR_DECL} or @code{PARM_DECL}) that satisfy the
1410
requirements for gimple registers, but it may also be a tree for a
1411
scalarized component of a user variable (@code{ARRAY_REF},
1412
@code{COMPONENT_REF}), or a debug temporary (@code{DEBUG_EXPR_DECL}).
1413
 
1414
As for @code{value}, it can be an arbitrary tree expression, but it is
1415
recommended that it be in a suitable form for a gimple assignment
1416
@code{RHS}.  It is not expected that user variables that could appear
1417
as @code{var} ever appear in @code{value}, because in the latter we'd
1418
have their @code{SSA_NAME}s instead, but even if they were not in SSA
1419
form, user variables appearing in @code{value} are to be regarded as
1420
part of the executable code space, whereas those in @code{var} are to
1421
be regarded as part of the source code space.  There is no way to
1422
refer to the value bound to a user variable within a @code{value}
1423
expression.
1424
 
1425
If @code{value} is @code{GIMPLE_DEBUG_BIND_NOVALUE}, debug information
1426
generation machinery is informed that the variable @code{var} is
1427
unbound, i.e., that its value is indeterminate, which sometimes means
1428
it is really unavailable, and other times that the compiler could not
1429
keep track of it.
1430
 
1431
Block and location information for the newly-created stmt are
1432
taken from @code{stmt}, if given.
1433
@end deftypefn
1434
 
1435
@deftypefn {GIMPLE function} tree gimple_debug_bind_get_var (gimple stmt)
1436
Return the user variable @var{var} that is bound at @code{stmt}.
1437
@end deftypefn
1438
 
1439
@deftypefn {GIMPLE function} tree gimple_debug_bind_get_value (gimple stmt)
1440
Return the value expression that is bound to a user variable at
1441
@code{stmt}.
1442
@end deftypefn
1443
 
1444
@deftypefn {GIMPLE function} {tree *} gimple_debug_bind_get_value_ptr (gimple stmt)
1445
Return a pointer to the value expression that is bound to a user
1446
variable at @code{stmt}.
1447
@end deftypefn
1448
 
1449
@deftypefn {GIMPLE function} void gimple_debug_bind_set_var (gimple stmt, tree var)
1450
Modify the user variable bound at @code{stmt} to @var{var}.
1451
@end deftypefn
1452
 
1453
@deftypefn {GIMPLE function} void gimple_debug_bind_set_value (gimple stmt, tree var)
1454
Modify the value bound to the user variable bound at @code{stmt} to
1455
@var{value}.
1456
@end deftypefn
1457
 
1458
@deftypefn {GIMPLE function} void gimple_debug_bind_reset_value (gimple stmt)
1459
Modify the value bound to the user variable bound at @code{stmt} so
1460
that the variable becomes unbound.
1461
@end deftypefn
1462
 
1463
@deftypefn {GIMPLE function} bool gimple_debug_bind_has_value_p (gimple stmt)
1464
Return @code{TRUE} if @code{stmt} binds a user variable to a value,
1465
and @code{FALSE} if it unbinds the variable.
1466
@end deftypefn
1467
 
1468
@node @code{GIMPLE_EH_FILTER}
1469
@subsection @code{GIMPLE_EH_FILTER}
1470
@cindex @code{GIMPLE_EH_FILTER}
1471
 
1472
@deftypefn {GIMPLE function} gimple gimple_build_eh_filter (tree types, gimple_seq failure)
1473
Build a @code{GIMPLE_EH_FILTER} statement.  @code{TYPES} are the filter's
1474
types.  @code{FAILURE} is a sequence with the filter's failure action.
1475
@end deftypefn
1476
 
1477
@deftypefn {GIMPLE function} tree gimple_eh_filter_types (gimple g)
1478
Return the types handled by @code{GIMPLE_EH_FILTER} statement @code{G}.
1479
@end deftypefn
1480
 
1481
@deftypefn {GIMPLE function} {tree *} gimple_eh_filter_types_ptr (gimple g)
1482
Return a pointer to the types handled by @code{GIMPLE_EH_FILTER}
1483
statement @code{G}.
1484
@end deftypefn
1485
 
1486
@deftypefn {GIMPLE function} gimple_seq gimple_eh_filter_failure (gimple g)
1487
Return the sequence of statement to execute when @code{GIMPLE_EH_FILTER}
1488
statement fails.
1489
@end deftypefn
1490
 
1491
@deftypefn {GIMPLE function} void gimple_eh_filter_set_types (gimple g, tree types)
1492
Set @code{TYPES} to be the set of types handled by @code{GIMPLE_EH_FILTER} @code{G}.
1493
@end deftypefn
1494
 
1495
@deftypefn {GIMPLE function} void gimple_eh_filter_set_failure (gimple g, gimple_seq failure)
1496
Set @code{FAILURE} to be the sequence of statements to execute on
1497
failure for @code{GIMPLE_EH_FILTER} @code{G}.
1498
@end deftypefn
1499
 
1500
@deftypefn {GIMPLE function} bool gimple_eh_filter_must_not_throw (gimple g)
1501
Return the @code{EH_FILTER_MUST_NOT_THROW} flag.
1502
@end deftypefn
1503
 
1504
@deftypefn {GIMPLE function} void gimple_eh_filter_set_must_not_throw (gimple g, bool mntp)
1505
Set the @code{EH_FILTER_MUST_NOT_THROW} flag.
1506
@end deftypefn
1507
 
1508
 
1509
@node @code{GIMPLE_LABEL}
1510
@subsection @code{GIMPLE_LABEL}
1511
@cindex @code{GIMPLE_LABEL}
1512
 
1513
@deftypefn {GIMPLE function} gimple gimple_build_label (tree label)
1514
Build a @code{GIMPLE_LABEL} statement with corresponding to the tree
1515
label, @code{LABEL}.
1516
@end deftypefn
1517
 
1518
@deftypefn {GIMPLE function} tree gimple_label_label (gimple g)
1519
Return the @code{LABEL_DECL} node used by @code{GIMPLE_LABEL} statement @code{G}.
1520
@end deftypefn
1521
 
1522
@deftypefn {GIMPLE function} void gimple_label_set_label (gimple g, tree label)
1523
Set @code{LABEL} to be the @code{LABEL_DECL} node used by @code{GIMPLE_LABEL}
1524
statement @code{G}.
1525
@end deftypefn
1526
 
1527
 
1528
@deftypefn {GIMPLE function} gimple gimple_build_goto (tree dest)
1529
Build a @code{GIMPLE_GOTO} statement to label @code{DEST}.
1530
@end deftypefn
1531
 
1532
@deftypefn {GIMPLE function} tree gimple_goto_dest (gimple g)
1533
Return the destination of the unconditional jump @code{G}.
1534
@end deftypefn
1535
 
1536
@deftypefn {GIMPLE function} void gimple_goto_set_dest (gimple g, tree dest)
1537
Set @code{DEST} to be the destination of the unconditional jump @code{G}.
1538
@end deftypefn
1539
 
1540
 
1541
@node @code{GIMPLE_NOP}
1542
@subsection @code{GIMPLE_NOP}
1543
@cindex @code{GIMPLE_NOP}
1544
 
1545
@deftypefn {GIMPLE function} gimple gimple_build_nop (void)
1546
Build a @code{GIMPLE_NOP} statement.
1547
@end deftypefn
1548
 
1549
@deftypefn {GIMPLE function} bool gimple_nop_p (gimple g)
1550
Returns @code{TRUE} if statement @code{G} is a @code{GIMPLE_NOP}.
1551
@end deftypefn
1552
 
1553
@node @code{GIMPLE_OMP_ATOMIC_LOAD}
1554
@subsection @code{GIMPLE_OMP_ATOMIC_LOAD}
1555
@cindex @code{GIMPLE_OMP_ATOMIC_LOAD}
1556
 
1557
@deftypefn {GIMPLE function} gimple gimple_build_omp_atomic_load (tree lhs, tree rhs)
1558
Build a @code{GIMPLE_OMP_ATOMIC_LOAD} statement.  @code{LHS} is the left-hand
1559
side of the assignment.  @code{RHS} is the right-hand side of the
1560
assignment.
1561
@end deftypefn
1562
 
1563
@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_lhs (gimple g, tree lhs)
1564
Set the @code{LHS} of an atomic load.
1565
@end deftypefn
1566
 
1567
@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_lhs (gimple g)
1568
Get the @code{LHS} of an atomic load.
1569
@end deftypefn
1570
 
1571
@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_rhs (gimple g, tree rhs)
1572
Set the @code{RHS} of an atomic set.
1573
@end deftypefn
1574
 
1575
@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_rhs (gimple g)
1576
Get the @code{RHS} of an atomic set.
1577
@end deftypefn
1578
 
1579
 
1580
@node @code{GIMPLE_OMP_ATOMIC_STORE}
1581
@subsection @code{GIMPLE_OMP_ATOMIC_STORE}
1582
@cindex @code{GIMPLE_OMP_ATOMIC_STORE}
1583
 
1584
@deftypefn {GIMPLE function} gimple gimple_build_omp_atomic_store (tree val)
1585
Build a @code{GIMPLE_OMP_ATOMIC_STORE} statement. @code{VAL} is the value to be
1586
stored.
1587
@end deftypefn
1588
 
1589
@deftypefn {GIMPLE function} void gimple_omp_atomic_store_set_val (gimple g, tree val)
1590
Set the value being stored in an atomic store.
1591
@end deftypefn
1592
 
1593
@deftypefn {GIMPLE function} tree gimple_omp_atomic_store_val (gimple g)
1594
Return the value being stored in an atomic store.
1595
@end deftypefn
1596
 
1597
@node @code{GIMPLE_OMP_CONTINUE}
1598
@subsection @code{GIMPLE_OMP_CONTINUE}
1599
@cindex @code{GIMPLE_OMP_CONTINUE}
1600
 
1601
@deftypefn {GIMPLE function} gimple gimple_build_omp_continue (tree control_def, tree control_use)
1602
Build a @code{GIMPLE_OMP_CONTINUE} statement.  @code{CONTROL_DEF} is the
1603
definition of the control variable.  @code{CONTROL_USE} is the use of
1604
the control variable.
1605
@end deftypefn
1606
 
1607
@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def (gimple s)
1608
Return the definition of the control variable on a
1609
@code{GIMPLE_OMP_CONTINUE} in @code{S}.
1610
@end deftypefn
1611
 
1612
@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def_ptr (gimple s)
1613
Same as above, but return the pointer.
1614
@end deftypefn
1615
 
1616
@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_def (gimple s)
1617
Set the control variable definition for a @code{GIMPLE_OMP_CONTINUE}
1618
statement in @code{S}.
1619
@end deftypefn
1620
 
1621
@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use (gimple s)
1622
Return the use of the control variable on a @code{GIMPLE_OMP_CONTINUE}
1623
in @code{S}.
1624
@end deftypefn
1625
 
1626
@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use_ptr (gimple s)
1627
Same as above, but return the pointer.
1628
@end deftypefn
1629
 
1630
@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_use (gimple s)
1631
Set the control variable use for a @code{GIMPLE_OMP_CONTINUE} statement
1632
in @code{S}.
1633
@end deftypefn
1634
 
1635
 
1636
@node @code{GIMPLE_OMP_CRITICAL}
1637
@subsection @code{GIMPLE_OMP_CRITICAL}
1638
@cindex @code{GIMPLE_OMP_CRITICAL}
1639
 
1640
@deftypefn {GIMPLE function} gimple gimple_build_omp_critical (gimple_seq body, tree name)
1641
Build a @code{GIMPLE_OMP_CRITICAL} statement. @code{BODY} is the sequence of
1642
statements for which only one thread can execute.  @code{NAME} is an
1643
optional identifier for this critical block.
1644
@end deftypefn
1645
 
1646
@deftypefn {GIMPLE function} tree gimple_omp_critical_name (gimple g)
1647
Return the name associated with @code{OMP_CRITICAL} statement @code{G}.
1648
@end deftypefn
1649
 
1650
@deftypefn {GIMPLE function} {tree *} gimple_omp_critical_name_ptr (gimple g)
1651
Return a pointer to the name associated with @code{OMP} critical
1652
statement @code{G}.
1653
@end deftypefn
1654
 
1655
@deftypefn {GIMPLE function} void gimple_omp_critical_set_name (gimple g, tree name)
1656
Set @code{NAME} to be the name associated with @code{OMP} critical statement @code{G}.
1657
@end deftypefn
1658
 
1659
@node @code{GIMPLE_OMP_FOR}
1660
@subsection @code{GIMPLE_OMP_FOR}
1661
@cindex @code{GIMPLE_OMP_FOR}
1662
 
1663
@deftypefn {GIMPLE function} gimple gimple_build_omp_for (gimple_seq body, @
1664
tree clauses, tree index, tree initial, tree final, tree incr, @
1665
gimple_seq pre_body, enum tree_code omp_for_cond)
1666
Build a @code{GIMPLE_OMP_FOR} statement. @code{BODY} is sequence of statements
1667
inside the for loop.  @code{CLAUSES}, are any of the @code{OMP} loop
1668
construct's clauses: private, firstprivate,  lastprivate,
1669
reductions, ordered, schedule, and nowait.  @code{PRE_BODY} is the
1670
sequence of statements that are loop invariant.  @code{INDEX} is the
1671
index variable.  @code{INITIAL} is the initial value of @code{INDEX}.  @code{FINAL} is
1672
final value of @code{INDEX}.  OMP_FOR_COND is the predicate used to
1673
compare @code{INDEX} and @code{FINAL}.  @code{INCR} is the increment expression.
1674
@end deftypefn
1675
 
1676
@deftypefn {GIMPLE function} tree gimple_omp_for_clauses (gimple g)
1677
Return the clauses associated with @code{OMP_FOR} @code{G}.
1678
@end deftypefn
1679
 
1680
@deftypefn {GIMPLE function} {tree *} gimple_omp_for_clauses_ptr (gimple g)
1681
Return a pointer to the @code{OMP_FOR} @code{G}.
1682
@end deftypefn
1683
 
1684
@deftypefn {GIMPLE function} void gimple_omp_for_set_clauses (gimple g, tree clauses)
1685
Set @code{CLAUSES} to be the list of clauses associated with @code{OMP_FOR} @code{G}.
1686
@end deftypefn
1687
 
1688
@deftypefn {GIMPLE function} tree gimple_omp_for_index (gimple g)
1689
Return the index variable for @code{OMP_FOR} @code{G}.
1690
@end deftypefn
1691
 
1692
@deftypefn {GIMPLE function} {tree *} gimple_omp_for_index_ptr (gimple g)
1693
Return a pointer to the index variable for @code{OMP_FOR} @code{G}.
1694
@end deftypefn
1695
 
1696
@deftypefn {GIMPLE function} void gimple_omp_for_set_index (gimple g, tree index)
1697
Set @code{INDEX} to be the index variable for @code{OMP_FOR} @code{G}.
1698
@end deftypefn
1699
 
1700
@deftypefn {GIMPLE function} tree gimple_omp_for_initial (gimple g)
1701
Return the initial value for @code{OMP_FOR} @code{G}.
1702
@end deftypefn
1703
 
1704
@deftypefn {GIMPLE function} {tree *} gimple_omp_for_initial_ptr (gimple g)
1705
Return a pointer to the initial value for @code{OMP_FOR} @code{G}.
1706
@end deftypefn
1707
 
1708
@deftypefn {GIMPLE function} void gimple_omp_for_set_initial (gimple g, tree initial)
1709
Set @code{INITIAL} to be the initial value for @code{OMP_FOR} @code{G}.
1710
@end deftypefn
1711
 
1712
@deftypefn {GIMPLE function} tree gimple_omp_for_final (gimple g)
1713
Return the final value for @code{OMP_FOR} @code{G}.
1714
@end deftypefn
1715
 
1716
@deftypefn {GIMPLE function} {tree *} gimple_omp_for_final_ptr (gimple g)
1717
turn a pointer to the final value for @code{OMP_FOR} @code{G}.
1718
@end deftypefn
1719
 
1720
@deftypefn {GIMPLE function} void gimple_omp_for_set_final (gimple g, tree final)
1721
Set @code{FINAL} to be the final value for @code{OMP_FOR} @code{G}.
1722
@end deftypefn
1723
 
1724
@deftypefn {GIMPLE function} tree gimple_omp_for_incr (gimple g)
1725
Return the increment value for @code{OMP_FOR} @code{G}.
1726
@end deftypefn
1727
 
1728
@deftypefn {GIMPLE function} {tree *} gimple_omp_for_incr_ptr (gimple g)
1729
Return a pointer to the increment value for @code{OMP_FOR} @code{G}.
1730
@end deftypefn
1731
 
1732
@deftypefn {GIMPLE function} void gimple_omp_for_set_incr (gimple g, tree incr)
1733
Set @code{INCR} to be the increment value for @code{OMP_FOR} @code{G}.
1734
@end deftypefn
1735
 
1736
@deftypefn {GIMPLE function} gimple_seq gimple_omp_for_pre_body (gimple g)
1737
Return the sequence of statements to execute before the @code{OMP_FOR}
1738
statement @code{G} starts.
1739
@end deftypefn
1740
 
1741
@deftypefn {GIMPLE function} void gimple_omp_for_set_pre_body (gimple g, gimple_seq pre_body)
1742
Set @code{PRE_BODY} to be the sequence of statements to execute before
1743
the @code{OMP_FOR} statement @code{G} starts.
1744
@end deftypefn
1745
 
1746
@deftypefn {GIMPLE function} void gimple_omp_for_set_cond (gimple g, enum tree_code cond)
1747
Set @code{COND} to be the condition code for @code{OMP_FOR} @code{G}.
1748
@end deftypefn
1749
 
1750
@deftypefn {GIMPLE function} {enum tree_code} gimple_omp_for_cond (gimple g)
1751
Return the condition code associated with @code{OMP_FOR} @code{G}.
1752
@end deftypefn
1753
 
1754
 
1755
@node @code{GIMPLE_OMP_MASTER}
1756
@subsection @code{GIMPLE_OMP_MASTER}
1757
@cindex @code{GIMPLE_OMP_MASTER}
1758
 
1759
@deftypefn {GIMPLE function} gimple gimple_build_omp_master (gimple_seq body)
1760
Build a @code{GIMPLE_OMP_MASTER} statement. @code{BODY} is the sequence of
1761
statements to be executed by just the master.
1762
@end deftypefn
1763
 
1764
 
1765
@node @code{GIMPLE_OMP_ORDERED}
1766
@subsection @code{GIMPLE_OMP_ORDERED}
1767
@cindex @code{GIMPLE_OMP_ORDERED}
1768
 
1769
@deftypefn {GIMPLE function} gimple gimple_build_omp_ordered (gimple_seq body)
1770
Build a @code{GIMPLE_OMP_ORDERED} statement.
1771
@end deftypefn
1772
 
1773
@code{BODY} is the sequence of statements inside a loop that will
1774
executed in sequence.
1775
 
1776
 
1777
@node @code{GIMPLE_OMP_PARALLEL}
1778
@subsection @code{GIMPLE_OMP_PARALLEL}
1779
@cindex @code{GIMPLE_OMP_PARALLEL}
1780
 
1781
@deftypefn {GIMPLE function} gimple gimple_build_omp_parallel (gimple_seq @
1782
body, tree clauses, tree child_fn, tree data_arg)
1783
Build a @code{GIMPLE_OMP_PARALLEL} statement.
1784
@end deftypefn
1785
 
1786
@code{BODY} is sequence of statements which are executed in parallel.
1787
@code{CLAUSES}, are the @code{OMP} parallel construct's clauses.  @code{CHILD_FN} is
1788
the function created for the parallel threads to execute.
1789
@code{DATA_ARG} are the shared data argument(s).
1790
 
1791
@deftypefn {GIMPLE function} bool gimple_omp_parallel_combined_p (gimple g)
1792
Return true if @code{OMP} parallel statement @code{G} has the
1793
@code{GF_OMP_PARALLEL_COMBINED} flag set.
1794
@end deftypefn
1795
 
1796
@deftypefn {GIMPLE function} void gimple_omp_parallel_set_combined_p (gimple g)
1797
Set the @code{GF_OMP_PARALLEL_COMBINED} field in @code{OMP} parallel statement
1798
@code{G}.
1799
@end deftypefn
1800
 
1801
@deftypefn {GIMPLE function} gimple_seq gimple_omp_body (gimple g)
1802
Return the body for the @code{OMP} statement @code{G}.
1803
@end deftypefn
1804
 
1805
@deftypefn {GIMPLE function} void gimple_omp_set_body (gimple g, gimple_seq body)
1806
Set @code{BODY} to be the body for the @code{OMP} statement @code{G}.
1807
@end deftypefn
1808
 
1809
@deftypefn {GIMPLE function} tree gimple_omp_parallel_clauses (gimple g)
1810
Return the clauses associated with @code{OMP_PARALLEL} @code{G}.
1811
@end deftypefn
1812
 
1813
@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_clauses_ptr (gimple g)
1814
Return a pointer to the clauses associated with @code{OMP_PARALLEL} @code{G}.
1815
@end deftypefn
1816
 
1817
@deftypefn {GIMPLE function} void gimple_omp_parallel_set_clauses (gimple g, tree clauses)
1818
Set @code{CLAUSES} to be the list of clauses associated with
1819
@code{OMP_PARALLEL} @code{G}.
1820
@end deftypefn
1821
 
1822
@deftypefn {GIMPLE function} tree gimple_omp_parallel_child_fn (gimple g)
1823
Return the child function used to hold the body of @code{OMP_PARALLEL}
1824
@code{G}.
1825
@end deftypefn
1826
 
1827
@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_child_fn_ptr (gimple g)
1828
Return a pointer to the child function used to hold the body of
1829
@code{OMP_PARALLEL} @code{G}.
1830
@end deftypefn
1831
 
1832
@deftypefn {GIMPLE function} void gimple_omp_parallel_set_child_fn (gimple g, tree child_fn)
1833
Set @code{CHILD_FN} to be the child function for @code{OMP_PARALLEL} @code{G}.
1834
@end deftypefn
1835
 
1836
@deftypefn {GIMPLE function} tree gimple_omp_parallel_data_arg (gimple g)
1837
Return the artificial argument used to send variables and values
1838
from the parent to the children threads in @code{OMP_PARALLEL} @code{G}.
1839
@end deftypefn
1840
 
1841
@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_data_arg_ptr (gimple g)
1842
Return a pointer to the data argument for @code{OMP_PARALLEL} @code{G}.
1843
@end deftypefn
1844
 
1845
@deftypefn {GIMPLE function} void gimple_omp_parallel_set_data_arg (gimple g, tree data_arg)
1846
Set @code{DATA_ARG} to be the data argument for @code{OMP_PARALLEL} @code{G}.
1847
@end deftypefn
1848
 
1849
@deftypefn {GIMPLE function} bool is_gimple_omp (gimple stmt)
1850
Returns true when the gimple statement @code{STMT} is any of the OpenMP
1851
types.
1852
@end deftypefn
1853
 
1854
 
1855
@node @code{GIMPLE_OMP_RETURN}
1856
@subsection @code{GIMPLE_OMP_RETURN}
1857
@cindex @code{GIMPLE_OMP_RETURN}
1858
 
1859
@deftypefn {GIMPLE function} gimple gimple_build_omp_return (bool wait_p)
1860
Build a @code{GIMPLE_OMP_RETURN} statement. @code{WAIT_P} is true if this is a
1861
non-waiting return.
1862
@end deftypefn
1863
 
1864
@deftypefn {GIMPLE function} void gimple_omp_return_set_nowait (gimple s)
1865
Set the nowait flag on @code{GIMPLE_OMP_RETURN} statement @code{S}.
1866
@end deftypefn
1867
 
1868
 
1869
@deftypefn {GIMPLE function} bool gimple_omp_return_nowait_p (gimple g)
1870
Return true if @code{OMP} return statement @code{G} has the
1871
@code{GF_OMP_RETURN_NOWAIT} flag set.
1872
@end deftypefn
1873
 
1874
@node @code{GIMPLE_OMP_SECTION}
1875
@subsection @code{GIMPLE_OMP_SECTION}
1876
@cindex @code{GIMPLE_OMP_SECTION}
1877
 
1878
@deftypefn {GIMPLE function} gimple gimple_build_omp_section (gimple_seq body)
1879
Build a @code{GIMPLE_OMP_SECTION} statement for a sections statement.
1880
@end deftypefn
1881
 
1882
@code{BODY} is the sequence of statements in the section.
1883
 
1884
@deftypefn {GIMPLE function} bool gimple_omp_section_last_p (gimple g)
1885
Return true if @code{OMP} section statement @code{G} has the
1886
@code{GF_OMP_SECTION_LAST} flag set.
1887
@end deftypefn
1888
 
1889
@deftypefn {GIMPLE function} void gimple_omp_section_set_last (gimple g)
1890
Set the @code{GF_OMP_SECTION_LAST} flag on @code{G}.
1891
@end deftypefn
1892
 
1893
@node @code{GIMPLE_OMP_SECTIONS}
1894
@subsection @code{GIMPLE_OMP_SECTIONS}
1895
@cindex @code{GIMPLE_OMP_SECTIONS}
1896
 
1897
@deftypefn {GIMPLE function} gimple gimple_build_omp_sections (gimple_seq body, tree clauses)
1898
Build a @code{GIMPLE_OMP_SECTIONS} statement. @code{BODY} is a sequence of
1899
section statements.  @code{CLAUSES} are any of the @code{OMP} sections
1900
construct's clauses: private, firstprivate, lastprivate,
1901
reduction, and nowait.
1902
@end deftypefn
1903
 
1904
 
1905
@deftypefn {GIMPLE function} gimple gimple_build_omp_sections_switch (void)
1906
Build a @code{GIMPLE_OMP_SECTIONS_SWITCH} statement.
1907
@end deftypefn
1908
 
1909
@deftypefn {GIMPLE function} tree gimple_omp_sections_control (gimple g)
1910
Return the control variable associated with the
1911
@code{GIMPLE_OMP_SECTIONS} in @code{G}.
1912
@end deftypefn
1913
 
1914
@deftypefn {GIMPLE function} {tree *} gimple_omp_sections_control_ptr (gimple g)
1915
Return a pointer to the clauses associated with the
1916
@code{GIMPLE_OMP_SECTIONS} in @code{G}.
1917
@end deftypefn
1918
 
1919
@deftypefn {GIMPLE function} void gimple_omp_sections_set_control (gimple g, tree control)
1920
Set @code{CONTROL} to be the set of clauses associated with the
1921
@code{GIMPLE_OMP_SECTIONS} in @code{G}.
1922
@end deftypefn
1923
 
1924
@deftypefn {GIMPLE function} tree gimple_omp_sections_clauses (gimple g)
1925
Return the clauses associated with @code{OMP_SECTIONS} @code{G}.
1926
@end deftypefn
1927
 
1928
@deftypefn {GIMPLE function} {tree *} gimple_omp_sections_clauses_ptr (gimple g)
1929
Return a pointer to the clauses associated with @code{OMP_SECTIONS} @code{G}.
1930
@end deftypefn
1931
 
1932
@deftypefn {GIMPLE function} void gimple_omp_sections_set_clauses (gimple g, tree clauses)
1933
Set @code{CLAUSES} to be the set of clauses associated with @code{OMP_SECTIONS}
1934
@code{G}.
1935
@end deftypefn
1936
 
1937
 
1938
@node @code{GIMPLE_OMP_SINGLE}
1939
@subsection @code{GIMPLE_OMP_SINGLE}
1940
@cindex @code{GIMPLE_OMP_SINGLE}
1941
 
1942
@deftypefn {GIMPLE function} gimple gimple_build_omp_single (gimple_seq body, tree clauses)
1943
Build a @code{GIMPLE_OMP_SINGLE} statement. @code{BODY} is the sequence of
1944
statements that will be executed once.  @code{CLAUSES} are any of the
1945
@code{OMP} single construct's clauses: private, firstprivate,
1946
copyprivate, nowait.
1947
@end deftypefn
1948
 
1949
@deftypefn {GIMPLE function} tree gimple_omp_single_clauses (gimple g)
1950
Return the clauses associated with @code{OMP_SINGLE} @code{G}.
1951
@end deftypefn
1952
 
1953
@deftypefn {GIMPLE function} {tree *} gimple_omp_single_clauses_ptr (gimple g)
1954
Return a pointer to the clauses associated with @code{OMP_SINGLE} @code{G}.
1955
@end deftypefn
1956
 
1957
@deftypefn {GIMPLE function} void gimple_omp_single_set_clauses (gimple g, tree clauses)
1958
Set @code{CLAUSES} to be the clauses associated with @code{OMP_SINGLE} @code{G}.
1959
@end deftypefn
1960
 
1961
 
1962
@node @code{GIMPLE_PHI}
1963
@subsection @code{GIMPLE_PHI}
1964
@cindex @code{GIMPLE_PHI}
1965
 
1966
@deftypefn {GIMPLE function} unsigned gimple_phi_capacity (gimple g)
1967
Return the maximum number of arguments supported by @code{GIMPLE_PHI} @code{G}.
1968
@end deftypefn
1969
 
1970
@deftypefn {GIMPLE function} unsigned gimple_phi_num_args (gimple g)
1971
Return the number of arguments in @code{GIMPLE_PHI} @code{G}. This must always
1972
be exactly the number of incoming edges for the basic block
1973
holding @code{G}.
1974
@end deftypefn
1975
 
1976
@deftypefn {GIMPLE function} tree gimple_phi_result (gimple g)
1977
Return the @code{SSA} name created by @code{GIMPLE_PHI} @code{G}.
1978
@end deftypefn
1979
 
1980
@deftypefn {GIMPLE function} {tree *} gimple_phi_result_ptr (gimple g)
1981
Return a pointer to the @code{SSA} name created by @code{GIMPLE_PHI} @code{G}.
1982
@end deftypefn
1983
 
1984
@deftypefn {GIMPLE function} void gimple_phi_set_result (gimple g, tree result)
1985
Set @code{RESULT} to be the @code{SSA} name created by @code{GIMPLE_PHI} @code{G}.
1986
@end deftypefn
1987
 
1988
@deftypefn {GIMPLE function} {struct phi_arg_d *} gimple_phi_arg (gimple g, index)
1989
Return the @code{PHI} argument corresponding to incoming edge @code{INDEX} for
1990
@code{GIMPLE_PHI} @code{G}.
1991
@end deftypefn
1992
 
1993
@deftypefn {GIMPLE function} void gimple_phi_set_arg (gimple g, index, struct phi_arg_d * phiarg)
1994
Set @code{PHIARG} to be the argument corresponding to incoming edge
1995
@code{INDEX} for @code{GIMPLE_PHI} @code{G}.
1996
@end deftypefn
1997
 
1998
@node @code{GIMPLE_RESX}
1999
@subsection @code{GIMPLE_RESX}
2000
@cindex @code{GIMPLE_RESX}
2001
 
2002
@deftypefn {GIMPLE function} gimple gimple_build_resx (int region)
2003
Build a @code{GIMPLE_RESX} statement which is a statement.  This
2004
statement is a placeholder for _Unwind_Resume before we know if a
2005
function call or a branch is needed.  @code{REGION} is the exception
2006
region from which control is flowing.
2007
@end deftypefn
2008
 
2009
@deftypefn {GIMPLE function} int gimple_resx_region (gimple g)
2010
Return the region number for @code{GIMPLE_RESX} @code{G}.
2011
@end deftypefn
2012
 
2013
@deftypefn {GIMPLE function} void gimple_resx_set_region (gimple g, int region)
2014
Set @code{REGION} to be the region number for @code{GIMPLE_RESX} @code{G}.
2015
@end deftypefn
2016
 
2017
@node @code{GIMPLE_RETURN}
2018
@subsection @code{GIMPLE_RETURN}
2019
@cindex @code{GIMPLE_RETURN}
2020
 
2021
@deftypefn {GIMPLE function} gimple gimple_build_return (tree retval)
2022
Build a @code{GIMPLE_RETURN} statement whose return value is retval.
2023
@end deftypefn
2024
 
2025
@deftypefn {GIMPLE function} tree gimple_return_retval (gimple g)
2026
Return the return value for @code{GIMPLE_RETURN} @code{G}.
2027
@end deftypefn
2028
 
2029
@deftypefn {GIMPLE function} void gimple_return_set_retval (gimple g, tree retval)
2030
Set @code{RETVAL} to be the return value for @code{GIMPLE_RETURN} @code{G}.
2031
@end deftypefn
2032
 
2033
@node @code{GIMPLE_SWITCH}
2034
@subsection @code{GIMPLE_SWITCH}
2035
@cindex @code{GIMPLE_SWITCH}
2036
 
2037
@deftypefn {GIMPLE function} gimple gimple_build_switch (unsigned nlabels, @
2038
tree index, tree default_label, ...)
2039
Build a @code{GIMPLE_SWITCH} statement.  @code{NLABELS} are the number of
2040
labels excluding the default label.  The default label is passed
2041
in @code{DEFAULT_LABEL}.  The rest of the arguments are trees
2042
representing the labels.  Each label is a tree of code
2043
@code{CASE_LABEL_EXPR}.
2044
@end deftypefn
2045
 
2046
@deftypefn {GIMPLE function} gimple gimple_build_switch_vec (tree index, tree @
2047
default_label, @code{VEC}(tree,heap) *args)
2048
This function is an alternate way of building @code{GIMPLE_SWITCH}
2049
statements.  @code{INDEX} and @code{DEFAULT_LABEL} are as in
2050
gimple_build_switch.  @code{ARGS} is a vector of @code{CASE_LABEL_EXPR} trees
2051
that contain the labels.
2052
@end deftypefn
2053
 
2054
@deftypefn {GIMPLE function} unsigned gimple_switch_num_labels (gimple g)
2055
Return the number of labels associated with the switch statement
2056
@code{G}.
2057
@end deftypefn
2058
 
2059
@deftypefn {GIMPLE function} void gimple_switch_set_num_labels (gimple g, @
2060
unsigned nlabels)
2061
Set @code{NLABELS} to be the number of labels for the switch statement
2062
@code{G}.
2063
@end deftypefn
2064
 
2065
@deftypefn {GIMPLE function} tree gimple_switch_index (gimple g)
2066
Return the index variable used by the switch statement @code{G}.
2067
@end deftypefn
2068
 
2069
@deftypefn {GIMPLE function} void gimple_switch_set_index (gimple g, tree index)
2070
Set @code{INDEX} to be the index variable for switch statement @code{G}.
2071
@end deftypefn
2072
 
2073
@deftypefn {GIMPLE function} tree gimple_switch_label (gimple g, unsigned index)
2074
Return the label numbered @code{INDEX}. The default label is 0, followed
2075
by any labels in a switch statement.
2076
@end deftypefn
2077
 
2078
@deftypefn {GIMPLE function} void gimple_switch_set_label (gimple g, unsigned @
2079
index, tree label)
2080
Set the label number @code{INDEX} to @code{LABEL}. 0 is always the default
2081
label.
2082
@end deftypefn
2083
 
2084
@deftypefn {GIMPLE function} tree gimple_switch_default_label (gimple g)
2085
Return the default label for a switch statement.
2086
@end deftypefn
2087
 
2088
@deftypefn {GIMPLE function} void gimple_switch_set_default_label (gimple g, @
2089
tree label)
2090
Set the default label for a switch statement.
2091
@end deftypefn
2092
 
2093
 
2094
@node @code{GIMPLE_TRY}
2095
@subsection @code{GIMPLE_TRY}
2096
@cindex @code{GIMPLE_TRY}
2097
 
2098
@deftypefn {GIMPLE function} gimple gimple_build_try (gimple_seq eval, @
2099
gimple_seq cleanup, unsigned int kind)
2100
Build a @code{GIMPLE_TRY} statement.  @code{EVAL} is a sequence with the
2101
expression to evaluate.  @code{CLEANUP} is a sequence of statements to
2102
run at clean-up time.  @code{KIND} is the enumeration value
2103
@code{GIMPLE_TRY_CATCH} if this statement denotes a try/catch construct
2104
or @code{GIMPLE_TRY_FINALLY} if this statement denotes a try/finally
2105
construct.
2106
@end deftypefn
2107
 
2108
@deftypefn {GIMPLE function} {enum gimple_try_flags} gimple_try_kind (gimple g)
2109
Return the kind of try block represented by @code{GIMPLE_TRY} @code{G}. This is
2110
either @code{GIMPLE_TRY_CATCH} or @code{GIMPLE_TRY_FINALLY}.
2111
@end deftypefn
2112
 
2113
@deftypefn {GIMPLE function} bool gimple_try_catch_is_cleanup (gimple g)
2114
Return the @code{GIMPLE_TRY_CATCH_IS_CLEANUP} flag.
2115
@end deftypefn
2116
 
2117
@deftypefn {GIMPLE function} gimple_seq gimple_try_eval (gimple g)
2118
Return the sequence of statements used as the body for @code{GIMPLE_TRY}
2119
@code{G}.
2120
@end deftypefn
2121
 
2122
@deftypefn {GIMPLE function} gimple_seq gimple_try_cleanup (gimple g)
2123
Return the sequence of statements used as the cleanup body for
2124
@code{GIMPLE_TRY} @code{G}.
2125
@end deftypefn
2126
 
2127
@deftypefn {GIMPLE function} void gimple_try_set_catch_is_cleanup (gimple g, @
2128
bool catch_is_cleanup)
2129
Set the @code{GIMPLE_TRY_CATCH_IS_CLEANUP} flag.
2130
@end deftypefn
2131
 
2132
@deftypefn {GIMPLE function} void gimple_try_set_eval (gimple g, gimple_seq eval)
2133
Set @code{EVAL} to be the sequence of statements to use as the body for
2134
@code{GIMPLE_TRY} @code{G}.
2135
@end deftypefn
2136
 
2137
@deftypefn {GIMPLE function} void gimple_try_set_cleanup (gimple g, gimple_seq cleanup)
2138
Set @code{CLEANUP} to be the sequence of statements to use as the
2139
cleanup body for @code{GIMPLE_TRY} @code{G}.
2140
@end deftypefn
2141
 
2142
@node @code{GIMPLE_WITH_CLEANUP_EXPR}
2143
@subsection @code{GIMPLE_WITH_CLEANUP_EXPR}
2144
@cindex @code{GIMPLE_WITH_CLEANUP_EXPR}
2145
 
2146
@deftypefn {GIMPLE function} gimple gimple_build_wce (gimple_seq cleanup)
2147
Build a @code{GIMPLE_WITH_CLEANUP_EXPR} statement.  @code{CLEANUP} is the
2148
clean-up expression.
2149
@end deftypefn
2150
 
2151
@deftypefn {GIMPLE function} gimple_seq gimple_wce_cleanup (gimple g)
2152
Return the cleanup sequence for cleanup statement @code{G}.
2153
@end deftypefn
2154
 
2155
@deftypefn {GIMPLE function} void gimple_wce_set_cleanup (gimple g, gimple_seq cleanup)
2156
Set @code{CLEANUP} to be the cleanup sequence for @code{G}.
2157
@end deftypefn
2158
 
2159
@deftypefn {GIMPLE function} bool gimple_wce_cleanup_eh_only (gimple g)
2160
Return the @code{CLEANUP_EH_ONLY} flag for a @code{WCE} tuple.
2161
@end deftypefn
2162
 
2163
@deftypefn {GIMPLE function} void gimple_wce_set_cleanup_eh_only (gimple g, bool eh_only_p)
2164
Set the @code{CLEANUP_EH_ONLY} flag for a @code{WCE} tuple.
2165
@end deftypefn
2166
 
2167
 
2168
@node GIMPLE sequences
2169
@section GIMPLE sequences
2170
@cindex GIMPLE sequences
2171
 
2172
GIMPLE sequences are the tuple equivalent of @code{STATEMENT_LIST}'s
2173
used in @code{GENERIC}.  They are used to chain statements together, and
2174
when used in conjunction with sequence iterators, provide a
2175
framework for iterating through statements.
2176
 
2177
GIMPLE sequences are of type struct @code{gimple_sequence}, but are more
2178
commonly passed by reference to functions dealing with sequences.
2179
The type for a sequence pointer is @code{gimple_seq} which is the same
2180
as struct @code{gimple_sequence} *.  When declaring a local sequence,
2181
you can define a local variable of type struct @code{gimple_sequence}.
2182
When declaring a sequence allocated on the garbage collected
2183
heap, use the function @code{gimple_seq_alloc} documented below.
2184
 
2185
There are convenience functions for iterating through sequences
2186
in the section entitled Sequence Iterators.
2187
 
2188
Below is a list of functions to manipulate and query sequences.
2189
 
2190
@deftypefn {GIMPLE function} void gimple_seq_add_stmt (gimple_seq *seq, gimple g)
2191
Link a gimple statement to the end of the sequence *@code{SEQ} if @code{G} is
2192
not @code{NULL}.  If *@code{SEQ} is @code{NULL}, allocate a sequence before linking.
2193
@end deftypefn
2194
 
2195
@deftypefn {GIMPLE function} void gimple_seq_add_seq (gimple_seq *dest, gimple_seq src)
2196
Append sequence @code{SRC} to the end of sequence *@code{DEST} if @code{SRC} is not
2197
@code{NULL}.  If *@code{DEST} is @code{NULL}, allocate a new sequence before
2198
appending.
2199
@end deftypefn
2200
 
2201
@deftypefn {GIMPLE function} gimple_seq gimple_seq_deep_copy (gimple_seq src)
2202
Perform a deep copy of sequence @code{SRC} and return the result.
2203
@end deftypefn
2204
 
2205
@deftypefn {GIMPLE function} gimple_seq gimple_seq_reverse (gimple_seq seq)
2206
Reverse the order of the statements in the sequence @code{SEQ}.  Return
2207
@code{SEQ}.
2208
@end deftypefn
2209
 
2210
@deftypefn {GIMPLE function} gimple gimple_seq_first (gimple_seq s)
2211
Return the first statement in sequence @code{S}.
2212
@end deftypefn
2213
 
2214
@deftypefn {GIMPLE function} gimple gimple_seq_last (gimple_seq s)
2215
Return the last statement in sequence @code{S}.
2216
@end deftypefn
2217
 
2218
@deftypefn {GIMPLE function} void gimple_seq_set_last (gimple_seq s, gimple last)
2219
Set the last statement in sequence @code{S} to the statement in @code{LAST}.
2220
@end deftypefn
2221
 
2222
@deftypefn {GIMPLE function} void gimple_seq_set_first (gimple_seq s, gimple first)
2223
Set the first statement in sequence @code{S} to the statement in @code{FIRST}.
2224
@end deftypefn
2225
 
2226
@deftypefn {GIMPLE function} void gimple_seq_init (gimple_seq s)
2227
Initialize sequence @code{S} to an empty sequence.
2228
@end deftypefn
2229
 
2230
@deftypefn {GIMPLE function} gimple_seq gimple_seq_alloc (void)
2231
Allocate a new sequence in the garbage collected store and return
2232
it.
2233
@end deftypefn
2234
 
2235
@deftypefn {GIMPLE function} void gimple_seq_copy (gimple_seq dest, gimple_seq src)
2236
Copy the sequence @code{SRC} into the sequence @code{DEST}.
2237
@end deftypefn
2238
 
2239
@deftypefn {GIMPLE function} bool gimple_seq_empty_p (gimple_seq s)
2240
Return true if the sequence @code{S} is empty.
2241
@end deftypefn
2242
 
2243
@deftypefn {GIMPLE function} gimple_seq bb_seq (basic_block bb)
2244
Returns the sequence of statements in @code{BB}.
2245
@end deftypefn
2246
 
2247
@deftypefn {GIMPLE function} void set_bb_seq (basic_block bb, gimple_seq seq)
2248
Sets the sequence of statements in @code{BB} to @code{SEQ}.
2249
@end deftypefn
2250
 
2251
@deftypefn {GIMPLE function} bool gimple_seq_singleton_p (gimple_seq seq)
2252
Determine whether @code{SEQ} contains exactly one statement.
2253
@end deftypefn
2254
 
2255
@node Sequence iterators
2256
@section Sequence iterators
2257
@cindex Sequence iterators
2258
 
2259
Sequence iterators are convenience constructs for iterating
2260
through statements in a sequence.  Given a sequence @code{SEQ}, here is
2261
a typical use of gimple sequence iterators:
2262
 
2263
@smallexample
2264
gimple_stmt_iterator gsi;
2265
 
2266
for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
2267
  @{
2268
    gimple g = gsi_stmt (gsi);
2269
    /* Do something with gimple statement @code{G}.  */
2270
  @}
2271
@end smallexample
2272
 
2273
Backward iterations are possible:
2274
 
2275
@smallexample
2276
        for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
2277
@end smallexample
2278
 
2279
Forward and backward iterations on basic blocks are possible with
2280
@code{gsi_start_bb} and @code{gsi_last_bb}.
2281
 
2282
In the documentation below we sometimes refer to enum
2283
@code{gsi_iterator_update}.  The valid options for this enumeration are:
2284
 
2285
@itemize @bullet
2286
@item @code{GSI_NEW_STMT}
2287
Only valid when a single statement is added.  Move the iterator to it.
2288
 
2289
@item @code{GSI_SAME_STMT}
2290
Leave the iterator at the same statement.
2291
 
2292
@item @code{GSI_CONTINUE_LINKING}
2293
Move iterator to whatever position is suitable for linking other
2294
statements in the same direction.
2295
@end itemize
2296
 
2297
Below is a list of the functions used to manipulate and use
2298
statement iterators.
2299
 
2300
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_start (gimple_seq seq)
2301
Return a new iterator pointing to the sequence @code{SEQ}'s first
2302
statement.  If @code{SEQ} is empty, the iterator's basic block is @code{NULL}.
2303
Use @code{gsi_start_bb} instead when the iterator needs to always have
2304
the correct basic block set.
2305
@end deftypefn
2306
 
2307
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_start_bb (basic_block bb)
2308
Return a new iterator pointing to the first statement in basic
2309
block @code{BB}.
2310
@end deftypefn
2311
 
2312
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_last (gimple_seq seq)
2313
Return a new iterator initially pointing to the last statement of
2314
sequence @code{SEQ}.  If @code{SEQ} is empty, the iterator's basic block is
2315
@code{NULL}.  Use @code{gsi_last_bb} instead when the iterator needs to always
2316
have the correct basic block set.
2317
@end deftypefn
2318
 
2319
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_last_bb (basic_block bb)
2320
Return a new iterator pointing to the last statement in basic
2321
block @code{BB}.
2322
@end deftypefn
2323
 
2324
@deftypefn {GIMPLE function} bool gsi_end_p (gimple_stmt_iterator i)
2325
Return @code{TRUE} if at the end of @code{I}.
2326
@end deftypefn
2327
 
2328
@deftypefn {GIMPLE function} bool gsi_one_before_end_p (gimple_stmt_iterator i)
2329
Return @code{TRUE} if we're one statement before the end of @code{I}.
2330
@end deftypefn
2331
 
2332
@deftypefn {GIMPLE function} void gsi_next (gimple_stmt_iterator *i)
2333
Advance the iterator to the next gimple statement.
2334
@end deftypefn
2335
 
2336
@deftypefn {GIMPLE function} void gsi_prev (gimple_stmt_iterator *i)
2337
Advance the iterator to the previous gimple statement.
2338
@end deftypefn
2339
 
2340
@deftypefn {GIMPLE function} gimple gsi_stmt (gimple_stmt_iterator i)
2341
Return the current stmt.
2342
@end deftypefn
2343
 
2344
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_after_labels (basic_block bb)
2345
Return a block statement iterator that points to the first
2346
non-label statement in block @code{BB}.
2347
@end deftypefn
2348
 
2349
@deftypefn {GIMPLE function} {gimple *} gsi_stmt_ptr (gimple_stmt_iterator *i)
2350
Return a pointer to the current stmt.
2351
@end deftypefn
2352
 
2353
@deftypefn {GIMPLE function} basic_block gsi_bb (gimple_stmt_iterator i)
2354
Return the basic block associated with this iterator.
2355
@end deftypefn
2356
 
2357
@deftypefn {GIMPLE function} gimple_seq gsi_seq (gimple_stmt_iterator i)
2358
Return the sequence associated with this iterator.
2359
@end deftypefn
2360
 
2361
@deftypefn {GIMPLE function} void gsi_remove (gimple_stmt_iterator *i, bool remove_eh_info)
2362
Remove the current stmt from the sequence.  The iterator is
2363
updated to point to the next statement.  When @code{REMOVE_EH_INFO} is
2364
true we remove the statement pointed to by iterator @code{I} from the @code{EH}
2365
tables.  Otherwise we do not modify the @code{EH} tables.  Generally,
2366
@code{REMOVE_EH_INFO} should be true when the statement is going to be
2367
removed from the @code{IL} and not reinserted elsewhere.
2368
@end deftypefn
2369
 
2370
@deftypefn {GIMPLE function} void gsi_link_seq_before (gimple_stmt_iterator *i, gimple_seq seq, enum gsi_iterator_update mode)
2371
Links the sequence of statements @code{SEQ} before the statement pointed
2372
by iterator @code{I}.  @code{MODE} indicates what to do with the iterator
2373
after insertion (see @code{enum gsi_iterator_update} above).
2374
@end deftypefn
2375
 
2376
@deftypefn {GIMPLE function} void gsi_link_before (gimple_stmt_iterator *i, gimple g, enum gsi_iterator_update mode)
2377
Links statement @code{G} before the statement pointed-to by iterator @code{I}.
2378
Updates iterator @code{I} according to @code{MODE}.
2379
@end deftypefn
2380
 
2381
@deftypefn {GIMPLE function} void gsi_link_seq_after (gimple_stmt_iterator *i, @
2382
gimple_seq seq, enum gsi_iterator_update mode)
2383
Links sequence @code{SEQ} after the statement pointed-to by iterator @code{I}.
2384
@code{MODE} is as in @code{gsi_insert_after}.
2385
@end deftypefn
2386
 
2387
@deftypefn {GIMPLE function} void gsi_link_after (gimple_stmt_iterator *i, @
2388
gimple g, enum gsi_iterator_update mode)
2389
Links statement @code{G} after the statement pointed-to by iterator @code{I}.
2390
@code{MODE} is as in @code{gsi_insert_after}.
2391
@end deftypefn
2392
 
2393
@deftypefn {GIMPLE function} gimple_seq gsi_split_seq_after (gimple_stmt_iterator i)
2394
Move all statements in the sequence after @code{I} to a new sequence.
2395
Return this new sequence.
2396
@end deftypefn
2397
 
2398
@deftypefn {GIMPLE function} gimple_seq gsi_split_seq_before (gimple_stmt_iterator *i)
2399
Move all statements in the sequence before @code{I} to a new sequence.
2400
Return this new sequence.
2401
@end deftypefn
2402
 
2403
@deftypefn {GIMPLE function} void gsi_replace (gimple_stmt_iterator *i, @
2404
gimple stmt, bool update_eh_info)
2405
Replace the statement pointed-to by @code{I} to @code{STMT}.  If @code{UPDATE_EH_INFO}
2406
is true, the exception handling information of the original
2407
statement is moved to the new statement.
2408
@end deftypefn
2409
 
2410
@deftypefn {GIMPLE function} void gsi_insert_before (gimple_stmt_iterator *i, @
2411
gimple stmt, enum gsi_iterator_update mode)
2412
Insert statement @code{STMT} before the statement pointed-to by iterator
2413
@code{I}, update @code{STMT}'s basic block and scan it for new operands.  @code{MODE}
2414
specifies how to update iterator @code{I} after insertion (see enum
2415
@code{gsi_iterator_update}).
2416
@end deftypefn
2417
 
2418
@deftypefn {GIMPLE function} void gsi_insert_seq_before (gimple_stmt_iterator *i, @
2419
gimple_seq seq, enum gsi_iterator_update mode)
2420
Like @code{gsi_insert_before}, but for all the statements in @code{SEQ}.
2421
@end deftypefn
2422
 
2423
@deftypefn {GIMPLE function} void gsi_insert_after (gimple_stmt_iterator *i, @
2424
gimple stmt, enum gsi_iterator_update mode)
2425
Insert statement @code{STMT} after the statement pointed-to by iterator
2426
@code{I}, update @code{STMT}'s basic block and scan it for new operands.  @code{MODE}
2427
specifies how to update iterator @code{I} after insertion (see enum
2428
@code{gsi_iterator_update}).
2429
@end deftypefn
2430
 
2431
@deftypefn {GIMPLE function} void gsi_insert_seq_after (gimple_stmt_iterator *i, @
2432
gimple_seq seq, enum gsi_iterator_update mode)
2433
Like @code{gsi_insert_after}, but for all the statements in @code{SEQ}.
2434
@end deftypefn
2435
 
2436
@deftypefn {GIMPLE function} gimple_stmt_iterator gsi_for_stmt (gimple stmt)
2437
Finds iterator for @code{STMT}.
2438
@end deftypefn
2439
 
2440
@deftypefn {GIMPLE function} void gsi_move_after (gimple_stmt_iterator *from, @
2441
gimple_stmt_iterator *to)
2442
Move the statement at @code{FROM} so it comes right after the statement
2443
at @code{TO}.
2444
@end deftypefn
2445
 
2446
@deftypefn {GIMPLE function} void gsi_move_before (gimple_stmt_iterator *from, @
2447
gimple_stmt_iterator *to)
2448
Move the statement at @code{FROM} so it comes right before the statement
2449
at @code{TO}.
2450
@end deftypefn
2451
 
2452
@deftypefn {GIMPLE function} void gsi_move_to_bb_end (gimple_stmt_iterator *from, @
2453
basic_block bb)
2454
Move the statement at @code{FROM} to the end of basic block @code{BB}.
2455
@end deftypefn
2456
 
2457
@deftypefn {GIMPLE function} void gsi_insert_on_edge (edge e, gimple stmt)
2458
Add @code{STMT} to the pending list of edge @code{E}.  No actual insertion is
2459
made until a call to @code{gsi_commit_edge_inserts}() is made.
2460
@end deftypefn
2461
 
2462
@deftypefn {GIMPLE function} void gsi_insert_seq_on_edge (edge e, gimple_seq seq)
2463
Add the sequence of statements in @code{SEQ} to the pending list of edge
2464
@code{E}.  No actual insertion is made until a call to
2465
@code{gsi_commit_edge_inserts}() is made.
2466
@end deftypefn
2467
 
2468
@deftypefn {GIMPLE function} basic_block gsi_insert_on_edge_immediate (edge e, gimple stmt)
2469
Similar to @code{gsi_insert_on_edge}+@code{gsi_commit_edge_inserts}.  If a new
2470
block has to be created, it is returned.
2471
@end deftypefn
2472
 
2473
@deftypefn {GIMPLE function} void gsi_commit_one_edge_insert (edge e, basic_block *new_bb)
2474
Commit insertions pending at edge @code{E}.  If a new block is created,
2475
set @code{NEW_BB} to this block, otherwise set it to @code{NULL}.
2476
@end deftypefn
2477
 
2478
@deftypefn {GIMPLE function} void gsi_commit_edge_inserts (void)
2479
This routine will commit all pending edge insertions, creating
2480
any new basic blocks which are necessary.
2481
@end deftypefn
2482
 
2483
 
2484
@node Adding a new GIMPLE statement code
2485
@section Adding a new GIMPLE statement code
2486
@cindex Adding a new GIMPLE statement code
2487
 
2488
The first step in adding a new GIMPLE statement code, is
2489
modifying the file @code{gimple.def}, which contains all the GIMPLE
2490
codes.  Then you must add a corresponding structure, and an entry
2491
in @code{union gimple_statement_d}, both of which are located in
2492
@code{gimple.h}.  This in turn, will require you to add a corresponding
2493
@code{GTY} tag in @code{gsstruct.def}, and code to handle this tag in
2494
@code{gss_for_code} which is located in @code{gimple.c}.
2495
 
2496
In order for the garbage collector to know the size of the
2497
structure you created in @code{gimple.h}, you need to add a case to
2498
handle your new GIMPLE statement in @code{gimple_size} which is located
2499
in @code{gimple.c}.
2500
 
2501
You will probably want to create a function to build the new
2502
gimple statement in @code{gimple.c}.  The function should be called
2503
@code{gimple_build_@var{new-tuple-name}}, and should return the new tuple
2504
of type gimple.
2505
 
2506
If your new statement requires accessors for any members or
2507
operands it may have, put simple inline accessors in
2508
@code{gimple.h} and any non-trivial accessors in @code{gimple.c} with a
2509
corresponding prototype in @code{gimple.h}.
2510
 
2511
 
2512
@node Statement and operand traversals
2513
@section Statement and operand traversals
2514
@cindex Statement and operand traversals
2515
 
2516
There are two functions available for walking statements and
2517
sequences: @code{walk_gimple_stmt} and @code{walk_gimple_seq},
2518
accordingly, and a third function for walking the operands in a
2519
statement: @code{walk_gimple_op}.
2520
 
2521
@deftypefn {GIMPLE function} tree walk_gimple_stmt (gimple_stmt_iterator *gsi, @
2522
  walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info *wi)
2523
This function is used to walk the current statement in @code{GSI},
2524
optionally using traversal state stored in @code{WI}.  If @code{WI} is @code{NULL}, no
2525
state is kept during the traversal.
2526
 
2527
The callback @code{CALLBACK_STMT} is called.  If @code{CALLBACK_STMT} returns
2528
true, it means that the callback function has handled all the
2529
operands of the statement and it is not necessary to walk its
2530
operands.
2531
 
2532
If @code{CALLBACK_STMT} is @code{NULL} or it returns false, @code{CALLBACK_OP} is
2533
called on each operand of the statement via @code{walk_gimple_op}.  If
2534
@code{walk_gimple_op} returns non-@code{NULL} for any operand, the remaining
2535
operands are not scanned.
2536
 
2537
The return value is that returned by the last call to
2538
@code{walk_gimple_op}, or @code{NULL_TREE} if no @code{CALLBACK_OP} is specified.
2539
@end deftypefn
2540
 
2541
 
2542
@deftypefn {GIMPLE function} tree walk_gimple_op (gimple stmt, @
2543
  walk_tree_fn callback_op, struct walk_stmt_info *wi)
2544
Use this function to walk the operands of statement @code{STMT}.  Every
2545
operand is walked via @code{walk_tree} with optional state information
2546
in @code{WI}.
2547
 
2548
@code{CALLBACK_OP} is called on each operand of @code{STMT} via @code{walk_tree}.
2549
Additional parameters to @code{walk_tree} must be stored in @code{WI}.  For
2550
each operand @code{OP}, @code{walk_tree} is called as:
2551
 
2552
@smallexample
2553
walk_tree (&@code{OP}, @code{CALLBACK_OP}, @code{WI}, @code{PSET})
2554
@end smallexample
2555
 
2556
If @code{CALLBACK_OP} returns non-@code{NULL} for an operand, the remaining
2557
operands are not scanned.  The return value is that returned by
2558
the last call to @code{walk_tree}, or @code{NULL_TREE} if no @code{CALLBACK_OP} is
2559
specified.
2560
@end deftypefn
2561
 
2562
 
2563
@deftypefn {GIMPLE function} tree walk_gimple_seq (gimple_seq seq, @
2564
  walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info *wi)
2565
This function walks all the statements in the sequence @code{SEQ}
2566
calling @code{walk_gimple_stmt} on each one.  @code{WI} is as in
2567
@code{walk_gimple_stmt}.  If @code{walk_gimple_stmt} returns non-@code{NULL}, the walk
2568
is stopped and the value returned.  Otherwise, all the statements
2569
are walked and @code{NULL_TREE} returned.
2570
@end deftypefn

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.