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