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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [doc/] [gimple.texi] - Blame information for rev 327

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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