GCC Middle and Back End API Reference
gimple.h
Go to the documentation of this file.
1/* Gimple IR definitions.
2
3 Copyright (C) 2007-2025 Free Software Foundation, Inc.
4 Contributed by Aldy Hernandez <aldyh@redhat.com>
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
10Software Foundation; either version 3, or (at your option) any later
11version.
12
13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
17
18You should have received a copy of the GNU General Public License
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
21
22#ifndef GCC_GIMPLE_H
23#define GCC_GIMPLE_H
24
25#include "tree-ssa-alias.h"
26#include "gimple-expr.h"
27
29
31#define DEFGSCODE(SYM, STRING, STRUCT) SYM,
32#include "gimple.def"
33#undef DEFGSCODE
34 LAST_AND_UNUSED_GIMPLE_CODE
35};
36
37extern const char *const gimple_code_name[];
38extern const unsigned char gimple_rhs_class_table[];
39
40/* Error out if a gimple tuple is addressed incorrectly. */
41#if defined ENABLE_GIMPLE_CHECKING
42#define gcc_gimple_checking_assert(EXPR) gcc_assert (EXPR)
43extern void gimple_check_failed (const gimple *, const char *, int, \
44 const char *, enum gimple_code, \
45 enum tree_code) ATTRIBUTE_NORETURN \
46 ATTRIBUTE_COLD;
47
48#define GIMPLE_CHECK(GS, CODE) \
49 do { \
50 const gimple *__gs = (GS); \
51 if (gimple_code (__gs) != (CODE)) \
52 gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__, \
53 (CODE), ERROR_MARK); \
54 } while (0)
55template <typename T>
56inline T
57GIMPLE_CHECK2(const gimple *gs,
58#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
59 const char *file = __builtin_FILE (),
60 int line = __builtin_LINE (),
61 const char *fun = __builtin_FUNCTION ())
62#else
63 const char *file = __FILE__,
64 int line = __LINE__,
65 const char *fun = NULL)
66#endif
67{
68 T ret = dyn_cast <T> (gs);
69 if (!ret)
70 gimple_check_failed (gs, file, line, fun,
71 std::remove_pointer<T>::type::code_, ERROR_MARK);
72 return ret;
73}
74template <typename T>
75inline T
77#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
78 const char *file = __builtin_FILE (),
79 int line = __builtin_LINE (),
80 const char *fun = __builtin_FUNCTION ())
81#else
82 const char *file = __FILE__,
83 int line = __LINE__,
84 const char *fun = NULL)
85#endif
86{
87 T ret = dyn_cast <T> (gs);
88 if (!ret)
89 gimple_check_failed (gs, file, line, fun,
90 std::remove_pointer<T>::type::code_, ERROR_MARK);
91 return ret;
92}
93#else /* not ENABLE_GIMPLE_CHECKING */
94#define gcc_gimple_checking_assert(EXPR) ((void)(0 && (EXPR)))
95#define GIMPLE_CHECK(GS, CODE) (void)0
96template <typename T>
97inline T
99{
100 return as_a <T> (gs);
101}
102template <typename T>
103inline T
105{
106 return as_a <T> (gs);
107}
108#endif
109
110/* Class of GIMPLE expressions suitable for the RHS of assignments. See
111 get_gimple_rhs_class. */
113{
114 GIMPLE_INVALID_RHS, /* The expression cannot be used on the RHS. */
115 GIMPLE_TERNARY_RHS, /* The expression is a ternary operation. */
116 GIMPLE_BINARY_RHS, /* The expression is a binary operation. */
117 GIMPLE_UNARY_RHS, /* The expression is a unary operation. */
118 GIMPLE_SINGLE_RHS /* The expression is a single object (an SSA
119 name, a _DECL, a _REF, etc. */
120};
121
122/* Specific flags for individual GIMPLE statements. These flags are
123 always stored in gimple.subcode and they may only be
124 defined for statement codes that do not use subcodes.
125
126 Values for the masks can overlap as long as the overlapping values
127 are never used in the same statement class.
128
129 The maximum mask value that can be defined is 1 << 15 (i.e., each
130 statement code can hold up to 16 bitflags).
131
132 Keep this list sorted. */
134 GF_ASM_BASIC = 1 << 0,
149 GF_CALL_XTHROW = 1 << 13,
153 GF_OMP_FOR_KIND_MASK = (1 << 3) - 1,
176 /* A 'GF_OMP_TARGET_KIND_OACC_PARALLEL' representing an OpenACC 'kernels'
177 decomposed part, parallelized. */
179 /* A 'GF_OMP_TARGET_KIND_OACC_PARALLEL' representing an OpenACC 'kernels'
180 decomposed part, "gang-single". */
182 /* A 'GF_OMP_TARGET_KIND_OACC_DATA' representing an OpenACC 'kernels'
183 decomposed parts' 'data' construct. */
186
187 /* True on an GIMPLE_OMP_RETURN statement if the return does not require
188 a thread synchronization via some sort of barrier. The exact barrier
189 that would otherwise be emitted is dependent on the OMP statement with
190 which this return is associated. */
192
199};
200
201/* This subcode tells apart different kinds of stmts that are not used
202 for codegen, but rather to retain debug information. */
209
210/* Masks for selecting a pass local flag (PLF) to work on. These
211 masks are used by gimple_set_plf and gimple_plf. */
213 GF_PLF_1 = 1 << 0,
214 GF_PLF_2 = 1 << 1
215};
216
217/* Data structure definitions for GIMPLE tuples. NOTE: word markers
218 are for 64 bit hosts. */
219
220struct GTY((desc ("gimple_statement_structure (&%h)"), tag ("GSS_BASE"),
221 chain_next ("%h.next"), variable_size))
222 gimple
223{
224 /* [ WORD 1 ]
225 Main identifying code for a tuple. */
226 ENUM_BITFIELD(gimple_code) code : 8;
228 /* Nonzero if a warning should not be emitted on this tuple. */
229 unsigned int no_warning : 1;
230
231 /* Nonzero if this tuple has been visited. Passes are responsible
232 for clearing this bit before using it. */
233 unsigned int visited : 1;
234
235 /* Nonzero if this tuple represents a non-temporal move; currently
236 only stores are supported. */
237 unsigned int nontemporal_move : 1;
238
239 /* Pass local flags. These flags are free for any pass to use as
240 they see fit. Passes should not assume that these flags contain
241 any useful value when the pass starts. Any initial state that
242 the pass requires should be set on entry to the pass. See
243 gimple_set_plf and gimple_plf for usage. */
244 unsigned int plf : 2;
245
246 /* Nonzero if this statement has been modified and needs to have its
247 operands rescanned. */
248 unsigned modified : 1;
250 /* Nonzero if this statement contains volatile operands. */
251 unsigned has_volatile_ops : 1;
253 /* Padding to get subcode to 16 bit alignment. */
254 unsigned pad : 1;
255
256 /* The SUBCODE field can be used for tuple-specific flags for tuples
257 that do not require subcodes. Note that SUBCODE should be at
258 least as wide as tree codes, as several tuples store tree codes
259 in there. */
260 unsigned int subcode : 16;
261
262 /* UID of this statement. This is used by passes that want to assign IDs
263 to statements. It must be assigned and used by each pass. By default
264 it should be assumed to contain garbage. */
265 unsigned uid;
266
267 /* [ WORD 2 ]
268 Number of operands in this tuple. */
269 unsigned num_ops;
270
271 /* Unused 32 bits padding on 64-bit hosts. */
272
273 /* [ WORD 3 ]
274 Locus information for debug info. */
275 location_t location;
276
277 /* [ WORD 4 ]
278 Basic block holding this statement. */
280
281 /* [ WORD 5-6 ]
282 Linked lists of gimple statements. The next pointers form
283 a NULL terminated list, the prev pointers are a cyclic list.
284 A gimple statement is hence also a double-ended list of
285 statements, with the pointer itself being the first element,
286 and the prev pointer being the last. */
287 gimple *next;
288 gimple *GTY((skip)) prev;
289};
290
291
292/* Base structure for tuples with operands. */
294/* This gimple subclass has no tag value. */
295struct GTY(())
297{
298 /* [ WORD 1-6 ] : base class */
299
300 /* [ WORD 7 ]
301 SSA operand vectors. NOTE: It should be possible to
302 amalgamate these vectors with the operand vector OP. However,
303 the SSA operand vectors are organized differently and contain
304 more information (like immediate use chaining). */
305 struct use_optype_d GTY((skip (""))) *use_ops;
306};
307
309/* Statements that take register operands. */
310
311struct GTY((tag("GSS_WITH_OPS")))
313{
314 /* [ WORD 1-7 ] : base class */
315
316 /* [ WORD 8 ]
317 Operand vector. NOTE! This must always be the last field
318 of this structure. In particular, this means that this
319 structure cannot be embedded inside another one. */
320 tree GTY((length ("%h.num_ops"))) op[1];
321};
323
324/* Base for statements that take both memory and register operands. */
325
326struct GTY((tag("GSS_WITH_MEM_OPS_BASE")))
328{
329 /* [ WORD 1-7 ] : base class */
331 /* [ WORD 8-9 ]
332 Virtual operands for this statement. The GC will pick them
333 up via the ssa_names array. */
334 tree GTY((skip (""))) vdef;
335 tree GTY((skip (""))) vuse;
337
338
339/* Statements that take both memory and register operands. */
340
341struct GTY((tag("GSS_WITH_MEM_OPS")))
344{
345 /* [ WORD 1-9 ] : base class */
346
347 /* [ WORD 10 ]
348 Operand vector. NOTE! This must always be the last field
349 of this structure. In particular, this means that this
350 structure cannot be embedded inside another one. */
351 tree GTY((length ("%h.num_ops"))) op[1];
352};
353
354
355/* Call statements that take both memory and register operands. */
357struct GTY((tag("GSS_CALL")))
359{
360 /* [ WORD 1-9 ] : base class */
362 /* [ WORD 10-13 ] */
365
366 /* [ WORD 14 ] */
367 union GTY ((desc ("%1.subcode & GF_CALL_INTERNAL"))) {
368 tree GTY ((tag ("0"))) fntype;
369 enum internal_fn GTY ((tag ("GF_CALL_INTERNAL"))) internal_fn;
370 } u;
372 /* [ WORD 15 ]
373 Operand vector. NOTE! This must always be the last field
374 of this structure. In particular, this means that this
375 structure cannot be embedded inside another one. */
376 tree GTY((length ("%h.num_ops"))) op[1];
378 static const enum gimple_code code_ = GIMPLE_CALL;
379};
380
381
382/* OMP statements. */
383
384struct GTY((tag("GSS_OMP")))
386{
387 /* [ WORD 1-6 ] : base class */
389 /* [ WORD 7 ] */
391};
392
393
394/* GIMPLE_BIND */
395
396struct GTY((tag("GSS_BIND")))
397 gbind : public gimple
398{
399 /* [ WORD 1-6 ] : base class */
400
401 /* [ WORD 7 ]
402 Variables declared in this scope. */
403 tree vars;
404
405 /* [ WORD 8 ]
406 This is different than the BLOCK field in gimple,
407 which is analogous to TREE_BLOCK (i.e., the lexical block holding
408 this statement). This field is the equivalent of BIND_EXPR_BLOCK
409 in tree land (i.e., the lexical scope defined by this bind). See
410 gimple-low.cc. */
411 tree block;
412
413 /* [ WORD 9 ] */
414 gimple_seq body;
415};
417
418/* GIMPLE_CATCH */
420struct GTY((tag("GSS_CATCH")))
421 gcatch : public gimple
422{
423 /* [ WORD 1-6 ] : base class */
424
425 /* [ WORD 7 ] */
426 tree types;
427
428 /* [ WORD 8 ] */
429 gimple_seq handler;
430};
432
433/* GIMPLE_EH_FILTER */
434
435struct GTY((tag("GSS_EH_FILTER")))
436 geh_filter : public gimple
437{
438 /* [ WORD 1-6 ] : base class */
439
440 /* [ WORD 7 ]
441 Filter types. */
442 tree types;
443
444 /* [ WORD 8 ]
445 Failure actions. */
447};
448
449/* GIMPLE_EH_ELSE */
451struct GTY((tag("GSS_EH_ELSE")))
452 geh_else : public gimple
453{
454 /* [ WORD 1-6 ] : base class */
456 /* [ WORD 7,8 ] */
457 gimple_seq n_body, e_body;
458};
459
460/* GIMPLE_EH_MUST_NOT_THROW */
461
462struct GTY((tag("GSS_EH_MNT")))
463 geh_mnt : public gimple
464{
465 /* [ WORD 1-6 ] : base class */
467 /* [ WORD 7 ] Abort function decl. */
468 tree fndecl;
470
471/* GIMPLE_PHI */
473struct GTY((tag("GSS_PHI")))
474 gphi : public gimple
475{
476 /* [ WORD 1-6 ] : base class */
477
478 /* [ WORD 7 ] */
479 unsigned capacity;
480 unsigned nargs;
481
482 /* [ WORD 8 ] */
483 tree result;
485 /* [ WORD 9-14 ] */
486 struct phi_arg_d GTY ((length ("%h.nargs"))) args[1];
488
489
490/* GIMPLE_RESX, GIMPLE_EH_DISPATCH */
491
492struct GTY((tag("GSS_EH_CTRL")))
494{
495 /* [ WORD 1-6 ] : base class */
496
497 /* [ WORD 7 ]
498 Exception region number. */
499 int region;
500};
501
502struct GTY((tag("GSS_EH_CTRL")))
504{
505 /* No extra fields; adds invariant:
506 stmt->code == GIMPLE_RESX. */
507};
509struct GTY((tag("GSS_EH_CTRL")))
511{
512 /* No extra fields; adds invariant:
513 stmt->code == GIMPLE_EH_DISPATH. */
514};
515
517/* GIMPLE_TRY */
518
519struct GTY((tag("GSS_TRY")))
520 gtry : public gimple
521{
522 /* [ WORD 1-6 ] : base class */
524 /* [ WORD 7 ]
525 Expression to evaluate. */
527
528 /* [ WORD 8 ]
529 Cleanup expression. */
530 gimple_seq cleanup;
532
533/* Kind of GIMPLE_TRY statements. */
535{
536 /* A try/catch. */
537 GIMPLE_TRY_CATCH = 1 << 0,
538
539 /* A try/finally. */
540 GIMPLE_TRY_FINALLY = 1 << 1,
543 /* Analogous to TRY_CATCH_IS_CLEANUP. */
545};
546
547/* GIMPLE_WITH_CLEANUP_EXPR */
549struct GTY((tag("GSS_WCE")))
551{
552 /* [ WORD 1-6 ] : base class */
553
554 /* Subcode: CLEANUP_EH_ONLY. True if the cleanup should only be
555 executed if an exception is thrown, not on normal exit of its
556 scope. This flag is analogous to the CLEANUP_EH_ONLY flag
557 in TARGET_EXPRs. */
559 /* [ WORD 7 ]
560 Cleanup expression. */
561 gimple_seq cleanup;
562};
563
564
565/* GIMPLE_ASM */
566
567struct GTY((tag("GSS_ASM")))
569{
570 /* [ WORD 1-9 ] : base class */
571
572 /* [ WORD 10 ]
573 __asm__ statement. */
574 const char *string;
575
576 /* [ WORD 11 ]
577 Number of inputs, outputs, clobbers, labels. */
578 unsigned char ni;
579 unsigned char no;
580 unsigned char nc;
581 unsigned char nl;
582
583 /* [ WORD 12 ]
584 Operand vector. NOTE! This must always be the last field
585 of this structure. In particular, this means that this
586 structure cannot be embedded inside another one. */
587 tree GTY((length ("%h.num_ops"))) op[1];
588};
589
590/* GIMPLE_OMP_CRITICAL */
591
592struct GTY((tag("GSS_OMP_CRITICAL")))
594{
595 /* [ WORD 1-7 ] : base class */
597 /* [ WORD 8 ] */
598 tree clauses;
600 /* [ WORD 9 ]
601 Critical section name. */
602 tree name;
603};
605
606struct GTY(()) gimple_omp_for_iter {
607 /* Condition code. */
608 enum tree_code cond;
610 /* Index variable. */
611 tree index;
612
613 /* Initial value. */
614 tree initial;
615
616 /* Final value. */
617 tree final;
618
619 /* Increment. */
620 tree incr;
621};
622
623/* GIMPLE_OMP_FOR */
624
625struct GTY((tag("GSS_OMP_FOR")))
627{
628 /* [ WORD 1-7 ] : base class */
629
630 /* [ WORD 8 ] */
633 /* [ WORD 9 ]
634 Number of elements in iter array. */
635 size_t collapse;
637 /* [ WORD 10 ] */
638 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
639
640 /* [ WORD 11 ]
641 Pre-body evaluated before the loop body begins. */
642 gimple_seq pre_body;
643};
645
646/* GIMPLE_OMP_PARALLEL, GIMPLE_OMP_TARGET, GIMPLE_OMP_TASK, GIMPLE_OMP_TEAMS */
647
648struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
650{
651 /* [ WORD 1-7 ] : base class */
652
653 /* [ WORD 8 ]
654 Clauses. */
656
657 /* [ WORD 9 ]
658 Child function holding the body of the parallel region. */
661 /* [ WORD 10 ]
662 Shared data argument. */
664};
665
666/* GIMPLE_OMP_PARALLEL or GIMPLE_TASK */
667struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
669{
670 /* No extra fields; adds invariant:
671 stmt->code == GIMPLE_OMP_PARALLEL
672 || stmt->code == GIMPLE_OMP_TASK
673 || stmt->code == GIMPLE_OMP_TEAMS. */
675
676/* GIMPLE_OMP_PARALLEL */
677struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
680 /* No extra fields; adds invariant:
681 stmt->code == GIMPLE_OMP_PARALLEL. */
682};
683
684/* GIMPLE_OMP_TARGET */
685struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
687{
688 /* No extra fields; adds invariant:
689 stmt->code == GIMPLE_OMP_TARGET. */
690};
691
692/* GIMPLE_OMP_TASK */
693
694struct GTY((tag("GSS_OMP_TASK")))
696{
697 /* [ WORD 1-10 ] : base class */
698
699 /* [ WORD 11 ]
700 Child function holding firstprivate initialization if needed. */
702
703 /* [ WORD 12-13 ]
704 Size and alignment in bytes of the argument data block. */
705 tree arg_size;
706 tree arg_align;
708
709
710/* GIMPLE_OMP_SECTION */
711/* Uses struct gimple_statement_omp. */
713
714/* GIMPLE_OMP_SECTIONS */
716struct GTY((tag("GSS_OMP_SECTIONS")))
718{
719 /* [ WORD 1-7 ] : base class */
720
721 /* [ WORD 8 ] */
723
724 /* [ WORD 9 ]
725 The control variable used for deciding which of the sections to
726 execute. */
727 tree control;
728};
729
730/* GIMPLE_OMP_CONTINUE.
731
732 Note: This does not inherit from gimple_statement_omp, because we
733 do not need the body field. */
734
735struct GTY((tag("GSS_OMP_CONTINUE")))
737{
738 /* [ WORD 1-6 ] : base class */
739
740 /* [ WORD 7 ] */
741 tree control_def;
743 /* [ WORD 8 ] */
744 tree control_use;
745};
746
747/* GIMPLE_OMP_SINGLE, GIMPLE_OMP_ORDERED, GIMPLE_OMP_TASKGROUP,
748 GIMPLE_OMP_SCAN, GIMPLE_OMP_MASKED, GIMPLE_OMP_SCOPE, GIMPLE_OMP_DISPATCH,
749 GIMPLE_OMP_INTEROP. */
750
751struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
753{
754 /* [ WORD 1-7 ] : base class */
755
756 /* [ WORD 8 ] */
758};
760struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
762{
763 /* No extra fields; adds invariant:
764 stmt->code == GIMPLE_OMP_SINGLE. */
765};
766
767struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
769{
770 /* No extra fields; adds invariant:
771 stmt->code == GIMPLE_OMP_TEAMS. */
772};
773
774struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
776{
777 /* No extra fields; adds invariant:
778 stmt->code == GIMPLE_OMP_ORDERED. */
779};
780
781struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
783{
784 /* No extra fields; adds invariant:
785 stmt->code == GIMPLE_OMP_SCAN. */
786};
787
788
789/* GIMPLE_OMP_ATOMIC_LOAD.
790 Note: This is based on gimple, not g_s_omp, because g_s_omp
791 contains a sequence, which we don't need here. */
792
793struct GTY((tag("GSS_OMP_ATOMIC_LOAD")))
795{
796 /* [ WORD 1-6 ] : base class */
797
798 /* [ WORD 7-8 ] */
799 tree rhs, lhs;
800};
801
802/* GIMPLE_OMP_ATOMIC_STORE.
803 See note on GIMPLE_OMP_ATOMIC_LOAD. */
804
805struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
807{
808 /* [ WORD 1-6 ] : base class */
809
810 /* [ WORD 7 ] */
811 tree val;
814struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
817{
818 /* No extra fields; adds invariant:
819 stmt->code == GIMPLE_OMP_ATOMIC_STORE. */
820};
822struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
825{
826 /* No extra fields; adds invariant:
827 stmt->code == GIMPLE_OMP_RETURN. */
829
830/* Assumptions. */
832struct GTY((tag("GSS_ASSUME")))
834{
835 /* [ WORD 1-6 ] : base class */
836
837 /* [ WORD 7 ] */
838 tree guard;
839
840 /* [ WORD 8 ] */
844/* GIMPLE_TRANSACTION. */
845
846/* Bits to be stored in the GIMPLE_TRANSACTION subcode. */
848/* The __transaction_atomic was declared [[outer]] or it is
849 __transaction_relaxed. */
850#define GTMA_IS_OUTER (1u << 0)
851#define GTMA_IS_RELAXED (1u << 1)
852#define GTMA_DECLARATION_MASK (GTMA_IS_OUTER | GTMA_IS_RELAXED)
853
854/* The transaction is seen to not have an abort. */
855#define GTMA_HAVE_ABORT (1u << 2)
856/* The transaction is seen to have loads or stores. */
857#define GTMA_HAVE_LOAD (1u << 3)
858#define GTMA_HAVE_STORE (1u << 4)
859/* The transaction MAY enter serial irrevocable mode in its dynamic scope. */
860#define GTMA_MAY_ENTER_IRREVOCABLE (1u << 5)
861/* The transaction WILL enter serial irrevocable mode.
862 An irrevocable block post-dominates the entire transaction, such
863 that all invocations of the transaction will go serial-irrevocable.
864 In such case, we don't bother instrumenting the transaction, and
865 tell the runtime that it should begin the transaction in
866 serial-irrevocable mode. */
867#define GTMA_DOES_GO_IRREVOCABLE (1u << 6)
868/* The transaction contains no instrumentation code whatsover, most
869 likely because it is guaranteed to go irrevocable upon entry. */
870#define GTMA_HAS_NO_INSTRUMENTATION (1u << 7)
871
872struct GTY((tag("GSS_TRANSACTION")))
874{
875 /* [ WORD 1-9 ] : base class */
877 /* [ WORD 10 ] */
878 gimple_seq body;
879
880 /* [ WORD 11-13 ] */
881 tree label_norm;
882 tree label_uninst;
883 tree label_over;
884};
886#define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP) SYM,
888#include "gsstruct.def"
890};
891#undef DEFGSSTRUCT
892
893/* A statement with the invariant that
894 stmt->code == GIMPLE_COND
895 i.e. a conditional jump statement. */
896
897struct GTY((tag("GSS_WITH_OPS")))
899{
900 /* no additional fields; this uses the layout for GSS_WITH_OPS. */
901 static const enum gimple_code code_ = GIMPLE_COND;
902};
904/* A statement with the invariant that
905 stmt->code == GIMPLE_DEBUG
906 i.e. a debug statement. */
907
908struct GTY((tag("GSS_WITH_OPS")))
910{
911 /* no additional fields; this uses the layout for GSS_WITH_OPS. */
912};
914/* A statement with the invariant that
915 stmt->code == GIMPLE_GOTO
916 i.e. a goto statement. */
917
918struct GTY((tag("GSS_WITH_OPS")))
920{
921 /* no additional fields; this uses the layout for GSS_WITH_OPS. */
922};
923
924/* A statement with the invariant that
925 stmt->code == GIMPLE_LABEL
926 i.e. a label statement. */
927
928struct GTY((tag("GSS_WITH_OPS")))
930{
931 /* no additional fields; this uses the layout for GSS_WITH_OPS. */
932};
933
934/* A statement with the invariant that
935 stmt->code == GIMPLE_SWITCH
936 i.e. a switch statement. */
938struct GTY((tag("GSS_WITH_OPS")))
940{
941 /* no additional fields; this uses the layout for GSS_WITH_OPS. */
942};
943
944/* A statement with the invariant that
945 stmt->code == GIMPLE_ASSIGN
946 i.e. an assignment statement. */
947
948struct GTY((tag("GSS_WITH_MEM_OPS")))
950{
951 static const enum gimple_code code_ = GIMPLE_ASSIGN;
952 /* no additional fields; this uses the layout for GSS_WITH_MEM_OPS. */
954
955/* A statement with the invariant that
956 stmt->code == GIMPLE_RETURN
957 i.e. a return statement. */
958
959struct GTY((tag("GSS_WITH_MEM_OPS")))
962 /* no additional fields; this uses the layout for GSS_WITH_MEM_OPS. */
963};
964
965template <>
966template <>
967inline bool
970 return gs->code == GIMPLE_ASM;
971}
972
973template <>
974template <>
975inline bool
978 return gs->code == GIMPLE_ASSIGN;
979}
980
981template <>
982template <>
983inline bool
986 return gs->code == GIMPLE_ASSIGN;
987}
988
989template <>
990template <>
991inline bool
994 return gs->code == GIMPLE_BIND;
995}
996
997template <>
998template <>
999inline bool
1002 return gs->code == GIMPLE_CALL;
1003}
1004
1005template <>
1006template <>
1007inline bool
1010 return gs->code == GIMPLE_CATCH;
1011}
1012
1013template <>
1014template <>
1015inline bool
1018 return gs->code == GIMPLE_COND;
1019}
1020
1021template <>
1022template <>
1023inline bool
1026 return gs->code == GIMPLE_COND;
1027}
1028
1029template <>
1030template <>
1031inline bool
1034 return gs->code == GIMPLE_DEBUG;
1035}
1036
1037template <>
1038template <>
1039inline bool
1042 return gs->code == GIMPLE_DEBUG;
1043}
1044
1045template <>
1046template <>
1047inline bool
1050 return gs->code == GIMPLE_GOTO;
1051}
1052
1053template <>
1054template <>
1055inline bool
1058 return gs->code == GIMPLE_GOTO;
1059}
1060
1061template <>
1062template <>
1063inline bool
1066 return gs->code == GIMPLE_LABEL;
1067}
1068
1069template <>
1070template <>
1071inline bool
1074 return gs->code == GIMPLE_LABEL;
1075}
1076
1077template <>
1078template <>
1079inline bool
1082 return gs->code == GIMPLE_RESX;
1083}
1084
1085template <>
1086template <>
1087inline bool
1090 return gs->code == GIMPLE_EH_DISPATCH;
1091}
1092
1093template <>
1094template <>
1095inline bool
1098 return gs->code == GIMPLE_EH_ELSE;
1099}
1100
1101template <>
1102template <>
1103inline bool
1106 return gs->code == GIMPLE_EH_ELSE;
1107}
1108
1109template <>
1110template <>
1111inline bool
1114 return gs->code == GIMPLE_EH_FILTER;
1115}
1116
1117template <>
1118template <>
1119inline bool
1122 return gs->code == GIMPLE_EH_MUST_NOT_THROW;
1123}
1124
1125template <>
1126template <>
1127inline bool
1130 return gs->code == GIMPLE_EH_MUST_NOT_THROW;
1131}
1132
1133template <>
1134template <>
1135inline bool
1138 return gs->code == GIMPLE_OMP_ATOMIC_LOAD;
1139}
1140
1141template <>
1142template <>
1143inline bool
1146 return gs->code == GIMPLE_OMP_ATOMIC_STORE;
1147}
1148
1149template <>
1150template <>
1151inline bool
1154 return gs->code == GIMPLE_OMP_RETURN;
1155}
1156
1157template <>
1158template <>
1159inline bool
1161{
1162 return gs->code == GIMPLE_OMP_CONTINUE;
1164
1165template <>
1166template <>
1167inline bool
1169{
1170 return gs->code == GIMPLE_OMP_CRITICAL;
1172
1173template <>
1174template <>
1175inline bool
1177{
1178 return gs->code == GIMPLE_OMP_ORDERED;
1180
1181template <>
1182template <>
1183inline bool
1185{
1186 return gs->code == GIMPLE_OMP_SCAN;
1188
1189template <>
1190template <>
1191inline bool
1193{
1194 return gs->code == GIMPLE_OMP_FOR;
1196
1197template <>
1198template <>
1199inline bool
1201{
1202 return (gs->code == GIMPLE_OMP_PARALLEL
1203 || gs->code == GIMPLE_OMP_TASK
1204 || gs->code == GIMPLE_OMP_TEAMS);
1205}
1206
1207template <>
1208template <>
1209inline bool
1212 return gs->code == GIMPLE_OMP_PARALLEL;
1213}
1214
1215template <>
1216template <>
1217inline bool
1220 return gs->code == GIMPLE_OMP_TARGET;
1221}
1222
1223template <>
1224template <>
1225inline bool
1228 return gs->code == GIMPLE_OMP_SECTIONS;
1229}
1230
1231template <>
1232template <>
1233inline bool
1236 return gs->code == GIMPLE_OMP_SINGLE;
1237}
1238
1239template <>
1240template <>
1241inline bool
1244 return gs->code == GIMPLE_OMP_TEAMS;
1245}
1246
1247template <>
1248template <>
1249inline bool
1252 return gs->code == GIMPLE_OMP_TASK;
1253}
1254
1255template <>
1256template <>
1257inline bool
1260 return gs->code == GIMPLE_PHI;
1261}
1262
1263template <>
1264template <>
1265inline bool
1268 return gs->code == GIMPLE_RETURN;
1269}
1270
1271template <>
1272template <>
1273inline bool
1276 return gs->code == GIMPLE_SWITCH;
1277}
1278
1279template <>
1280template <>
1281inline bool
1284 return gs->code == GIMPLE_SWITCH;
1285}
1286
1287template <>
1288template <>
1289inline bool
1292 return gs->code == GIMPLE_ASSUME;
1293}
1294
1295template <>
1296template <>
1297inline bool
1300 return gs->code == GIMPLE_TRANSACTION;
1301}
1302
1303template <>
1304template <>
1305inline bool
1308 return gs->code == GIMPLE_TRY;
1309}
1310
1311template <>
1312template <>
1313inline bool
1316 return gs->code == GIMPLE_TRY;
1317}
1318
1319template <>
1320template <>
1321inline bool
1324 return gs->code == GIMPLE_WITH_CLEANUP_EXPR;
1325}
1326
1327template <>
1328template <>
1329inline bool
1332 return gs->code == GIMPLE_ASM;
1333}
1334
1335template <>
1336template <>
1337inline bool
1340 return gs->code == GIMPLE_BIND;
1341}
1342
1343template <>
1344template <>
1345inline bool
1348 return gs->code == GIMPLE_CALL;
1349}
1350
1351template <>
1352template <>
1353inline bool
1356 return gs->code == GIMPLE_CATCH;
1357}
1358
1359template <>
1360template <>
1361inline bool
1364 return gs->code == GIMPLE_RESX;
1365}
1366
1367template <>
1368template <>
1369inline bool
1372 return gs->code == GIMPLE_EH_DISPATCH;
1373}
1374
1375template <>
1376template <>
1377inline bool
1380 return gs->code == GIMPLE_EH_FILTER;
1381}
1382
1383template <>
1384template <>
1385inline bool
1388 return gs->code == GIMPLE_OMP_ATOMIC_LOAD;
1389}
1390
1391template <>
1392template <>
1393inline bool
1396 return gs->code == GIMPLE_OMP_ATOMIC_STORE;
1397}
1398
1399template <>
1400template <>
1401inline bool
1404 return gs->code == GIMPLE_OMP_RETURN;
1405}
1406
1407template <>
1408template <>
1409inline bool
1411{
1412 return gs->code == GIMPLE_OMP_CONTINUE;
1414
1415template <>
1416template <>
1417inline bool
1419{
1420 return gs->code == GIMPLE_OMP_CRITICAL;
1422
1423template <>
1424template <>
1425inline bool
1427{
1428 return gs->code == GIMPLE_OMP_ORDERED;
1430
1431template <>
1432template <>
1433inline bool
1435{
1436 return gs->code == GIMPLE_OMP_SCAN;
1438
1439template <>
1440template <>
1441inline bool
1443{
1444 return gs->code == GIMPLE_OMP_FOR;
1446
1447template <>
1448template <>
1449inline bool
1451{
1452 return (gs->code == GIMPLE_OMP_PARALLEL
1453 || gs->code == GIMPLE_OMP_TASK
1454 || gs->code == GIMPLE_OMP_TEAMS);
1455}
1456
1457template <>
1458template <>
1459inline bool
1462 return gs->code == GIMPLE_OMP_PARALLEL;
1463}
1464
1465template <>
1466template <>
1467inline bool
1470 return gs->code == GIMPLE_OMP_TARGET;
1471}
1472
1473template <>
1474template <>
1475inline bool
1478 return gs->code == GIMPLE_OMP_SECTIONS;
1479}
1480
1481template <>
1482template <>
1483inline bool
1486 return gs->code == GIMPLE_OMP_SINGLE;
1487}
1488
1489template <>
1490template <>
1491inline bool
1493{
1494 return gs->code == GIMPLE_OMP_TEAMS;
1495}
1496
1497template <>
1498template <>
1499inline bool
1501{
1502 return gs->code == GIMPLE_OMP_TASK;
1504
1505template <>
1506template <>
1507inline bool
1508is_a_helper <const gphi *>::test (const gimple *gs)
1509{
1510 return gs->code == GIMPLE_PHI;
1511}
1513template <>
1514template <>
1515inline bool
1518 return gs->code == GIMPLE_RETURN;
1519}
1520
1521template <>
1522template <>
1523inline bool
1525{
1526 return gs->code == GIMPLE_ASSUME;
1527}
1528
1529template <>
1530template <>
1531inline bool
1533{
1534 return gs->code == GIMPLE_TRANSACTION;
1535}
1536
1537/* Offset in bytes to the location of the operand vector.
1538 Zero if there is no operand vector for this tuple structure. */
1539extern size_t const gimple_ops_offset_[];
1541/* Map GIMPLE codes to GSS codes. */
1543
1544/* This variable holds the currently expanded gimple statement for purposes
1545 of comminucating the profile info to the builtin expanders. */
1547
1548size_t gimple_size (enum gimple_code code, unsigned num_ops = 0);
1549void gimple_init (gimple *g, enum gimple_code code, unsigned num_ops);
1554gcall *gimple_build_call (tree, unsigned, ...);
1555gcall *gimple_build_call_valist (tree, unsigned, va_list);
1556gcall *gimple_build_call_internal (enum internal_fn, unsigned, ...);
1570gimple *gimple_build_nop (void);
1580 enum gimple_try_flags);
1594 tree, tree);
1613 enum omp_memory_order);
1617extern void gimple_seq_add_stmt (gimple_seq *, gimple *);
1622 location_t);
1623extern void annotate_all_with_location (gimple_seq, location_t);
1626bool gimple_call_same_target_p (const gimple *, const gimple *);
1627int gimple_call_flags (const gimple *);
1628int gimple_call_arg_flags (const gcall *, unsigned);
1629int gimple_call_retslot_flags (const gcall *);
1631int gimple_call_return_flags (const gcall *);
1637bool gimple_assign_load_p (const gimple *);
1641 tree, tree, tree);
1642tree gimple_get_lhs (const gimple *);
1643void gimple_set_lhs (gimple *, tree);
1645void gimple_move_vops (gimple *, gimple *);
1646bool gimple_has_side_effects (const gimple *);
1647bool gimple_could_trap_p_1 (const gimple *, bool, bool);
1648bool gimple_could_trap_p (const gimple *);
1650extern void dump_gimple_statistics (void);
1651unsigned get_gimple_rhs_num_ops (enum tree_code);
1661extern bool gimple_call_builtin_p (const gimple *);
1662extern bool gimple_call_builtin_p (const gimple *, enum built_in_class);
1663extern bool gimple_call_builtin_p (const gimple *, enum built_in_function);
1665extern void dump_decl_set (FILE *, bitmap);
1666extern bool nonfreeing_call_p (gimple *);
1667extern bool nonbarrier_call_p (gimple *);
1668extern bool infer_nonnull_range (gimple *, tree);
1673extern void gimple_seq_set_location (gimple_seq, location_t);
1674extern void gimple_seq_discard (gimple_seq);
1675extern void maybe_remove_unused_call_args (struct function *, gimple *);
1676extern bool gimple_inexpensive_call_p (gcall *);
1677extern bool stmt_can_terminate_bb_p (gimple *);
1680
1681/* Return the disposition for a warning (or all warnings by default)
1682 for a statement. */
1683extern bool warning_suppressed_p (const gimple *, opt_code = all_warnings)
1684 ATTRIBUTE_NONNULL (1);
1685/* Set the disposition for a warning (or all warnings by default)
1686 at a location to enabled by default. */
1687extern void suppress_warning (gimple *, opt_code = all_warnings,
1688 bool = true) ATTRIBUTE_NONNULL (1);
1689
1690/* Copy the warning disposition mapping from one statement to another. */
1691extern void copy_warning (gimple *, const gimple *)
1692 ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2);
1693/* Copy the warning disposition mapping from an expression to a statement. */
1694extern void copy_warning (gimple *, const_tree)
1695 ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2);
1696/* Copy the warning disposition mapping from a statement to an expression. */
1697extern void copy_warning (tree, const gimple *)
1698 ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2);
1699
1700/* Formal (expression) temporary table handling: multiple occurrences of
1701 the same scalar expression are evaluated into the same temporary. */
1702
1703typedef struct gimple_temp_hash_elt
1704{
1705 tree val; /* Key */
1706 tree temp; /* Value */
1707} elt_t;
1708
1709/* Get the number of the next statement uid to be allocated. */
1710inline unsigned int
1711gimple_stmt_max_uid (struct function *fn)
1712{
1713 return fn->last_stmt_uid;
1714}
1716/* Set the number of the next statement uid to be allocated. */
1717inline void
1718set_gimple_stmt_max_uid (struct function *fn, unsigned int maxid)
1719{
1720 fn->last_stmt_uid = maxid;
1721}
1722
1723/* Set the number of the next statement uid to be allocated. */
1724inline unsigned int
1726{
1727 return fn->last_stmt_uid++;
1728}
1729
1730/* Return the first node in GIMPLE sequence S. */
1731
1732inline gimple_seq_node
1735 return s;
1736}
1737
1738
1739/* Return the first statement in GIMPLE sequence S. */
1740
1741inline gimple *
1745 return n;
1746}
1747
1748/* Return the first statement in GIMPLE sequence S as a gbind *,
1749 verifying that it has code GIMPLE_BIND in a checked build. */
1750
1751inline gbind *
1756}
1757
1758
1759/* Return the last node in GIMPLE sequence S. */
1761inline gimple_seq_node
1763{
1764 return s ? s->prev : NULL;
1765}
1766
1767
1768/* Return the last statement in GIMPLE sequence S. */
1769
1770inline gimple *
1775}
1776
1778/* Set the last node in GIMPLE sequence *PS to LAST. */
1779
1780inline void
1782{
1783 (*ps)->prev = last;
1784}
1786
1787/* Set the first node in GIMPLE sequence *PS to FIRST. */
1788
1789inline void
1791{
1792 *ps = first;
1793}
1794
1796/* Return true if GIMPLE sequence S is empty. */
1797
1798inline bool
1800{
1801 return s == NULL;
1802}
1803
1804/* Allocate a new sequence and initialize its first element with STMT. */
1805
1806inline gimple_seq
1808{
1809 gimple_seq seq = NULL;
1810 gimple_seq_add_stmt (&seq, stmt);
1811 return seq;
1812}
1813
1815/* Returns the sequence of statements in BB. */
1816
1817inline gimple_seq
1819{
1820 return (!(bb->flags & BB_RTL)) ? bb->il.gimple.seq : NULL;
1821}
1822
1823inline gimple_seq *
1825{
1826 return (!(bb->flags & BB_RTL)) ? &bb->il.gimple.seq : NULL;
1827}
1828
1829/* Sets the sequence of statements in BB to SEQ. */
1830
1831inline void
1833{
1834 gcc_checking_assert (!(bb->flags & BB_RTL));
1835 bb->il.gimple.seq = seq;
1836}
1837
1838
1839/* Return the code for GIMPLE statement G. */
1840
1841inline enum gimple_code
1842gimple_code (const gimple *g)
1843{
1844 return g->code;
1845}
1846
1847
1848/* Return the GSS code used by a GIMPLE code. */
1849
1851gss_for_code (enum gimple_code code)
1852{
1853 gcc_gimple_checking_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE);
1854 return gss_for_code_[code];
1855}
1856
1857
1858/* Return which GSS code is used by GS. */
1859
1861gimple_statement_structure (gimple *gs)
1862{
1864}
1865
1866
1867/* Return true if statement G has sub-statements. This is only true for
1868 High GIMPLE statements. */
1869
1870inline bool
1873 switch (gimple_code (g))
1874 {
1875 case GIMPLE_ASSUME:
1876 case GIMPLE_BIND:
1877 case GIMPLE_CATCH:
1878 case GIMPLE_EH_FILTER:
1879 case GIMPLE_EH_ELSE:
1880 case GIMPLE_TRY:
1881 case GIMPLE_OMP_FOR:
1882 case GIMPLE_OMP_MASTER:
1883 case GIMPLE_OMP_MASKED:
1884 case GIMPLE_OMP_TASKGROUP:
1885 case GIMPLE_OMP_ORDERED:
1886 case GIMPLE_OMP_SECTION:
1887 case GIMPLE_OMP_STRUCTURED_BLOCK:
1888 case GIMPLE_OMP_PARALLEL:
1889 case GIMPLE_OMP_TASK:
1890 case GIMPLE_OMP_SCOPE:
1891 case GIMPLE_OMP_DISPATCH:
1892 case GIMPLE_OMP_SECTIONS:
1893 case GIMPLE_OMP_SINGLE:
1894 case GIMPLE_OMP_TARGET:
1895 case GIMPLE_OMP_TEAMS:
1896 case GIMPLE_OMP_CRITICAL:
1897 case GIMPLE_WITH_CLEANUP_EXPR:
1898 case GIMPLE_TRANSACTION:
1899 return true;
1901 default:
1902 return false;
1903 }
1904}
1905
1906
1907/* Return the basic block holding statement G. */
1909inline basic_block
1910gimple_bb (const gimple *g)
1911{
1912 return g->bb;
1913}
1914
1915
1916/* Return the lexical scope block holding statement G. */
1917
1918inline tree
1920{
1921 return LOCATION_BLOCK (g->location);
1922}
1923
1924/* Forward declare. */
1925inline void gimple_set_location (gimple *, location_t);
1926
1927/* Set BLOCK to be the lexical scope block holding statement G. */
1929inline void
1930gimple_set_block (gimple *g, tree block)
1931{
1932 gimple_set_location (g, set_block (g->location, block));
1933}
1934
1935/* Return location information for statement G. */
1936
1937inline location_t
1938gimple_location (const gimple *g)
1939{
1940 return g->location;
1941}
1942
1943/* Return location information for statement G if g is not NULL.
1944 Otherwise, UNKNOWN_LOCATION is returned. */
1945
1946inline location_t
1947gimple_location_safe (const gimple *g)
1948{
1949 return g ? gimple_location (g) : UNKNOWN_LOCATION;
1950}
1952/* Set location information for statement G. */
1953
1954inline void
1955gimple_set_location (gimple *g, location_t location)
1956{
1957 /* Copy the no-warning data to the statement location. */
1958 if (g->location != UNKNOWN_LOCATION)
1959 copy_warning (location, g->location);
1960 g->location = location;
1961}
1962
1963/* Return address of the location information for statement G. */
1964
1965inline location_t *
1966gimple_location_ptr (gimple *g)
1967{
1968 return &g->location;
1970
1971
1972/* Return true if G contains location information. */
1973
1974inline bool
1975gimple_has_location (const gimple *g)
1976{
1979
1980
1981/* Return non-artificial location information for statement G. */
1982
1983inline location_t
1984gimple_nonartificial_location (const gimple *g)
1985{
1986 location_t *ploc = NULL;
1987
1988 if (tree block = gimple_block (g))
1989 ploc = block_nonartificial_location (block);
1990
1991 return ploc ? *ploc : gimple_location (g);
1992}
1993
1994
1995/* Return the file name of the location of STMT. */
1996
1997inline const char *
1998gimple_filename (const gimple *stmt)
1999{
2000 return LOCATION_FILE (gimple_location (stmt));
2001}
2002
2003
2004/* Return the line number of the location of STMT. */
2005
2006inline int
2007gimple_lineno (const gimple *stmt)
2008{
2009 return LOCATION_LINE (gimple_location (stmt));
2010}
2011
2012
2013/* Determine whether SEQ is a singleton. */
2014
2015inline bool
2017{
2018 return ((gimple_seq_first (seq) != NULL)
2019 && (gimple_seq_first (seq) == gimple_seq_last (seq)));
2020}
2021
2022/* Return true if no warnings should be emitted for statement STMT. */
2023
2024inline bool
2025gimple_no_warning_p (const gimple *stmt)
2026{
2027 return stmt->no_warning;
2028}
2029
2030/* Set the no_warning flag of STMT to NO_WARNING. */
2031
2032inline void
2033gimple_set_no_warning (gimple *stmt, bool no_warning)
2034{
2035 stmt->no_warning = (unsigned) no_warning;
2036}
2037
2038/* Set the visited status on statement STMT to VISITED_P.
2040 Please note that this 'visited' property of the gimple statement is
2041 supposed to be undefined at pass boundaries. This means that a
2042 given pass should not assume it contains any useful value when the
2043 pass starts and thus can set it to any value it sees fit.
2044
2045 You can learn more about the visited property of the gimple
2046 statement by reading the comments of the 'visited' data member of
2047 struct gimple.
2048 */
2049
2050inline void
2051gimple_set_visited (gimple *stmt, bool visited_p)
2052{
2053 stmt->visited = (unsigned) visited_p;
2054}
2055
2056
2057/* Return the visited status for statement STMT.
2058
2059 Please note that this 'visited' property of the gimple statement is
2060 supposed to be undefined at pass boundaries. This means that a
2061 given pass should not assume it contains any useful value when the
2062 pass starts and thus can set it to any value it sees fit.
2063
2064 You can learn more about the visited property of the gimple
2065 statement by reading the comments of the 'visited' data member of
2066 struct gimple. */
2067
2068inline bool
2070{
2071 return stmt->visited;
2072}
2074
2075/* Set pass local flag PLF on statement STMT to VAL_P.
2076
2077 Please note that this PLF property of the gimple statement is
2078 supposed to be undefined at pass boundaries. This means that a
2079 given pass should not assume it contains any useful value when the
2080 pass starts and thus can set it to any value it sees fit.
2081
2082 You can learn more about the PLF property by reading the comment of
2083 the 'plf' data member of struct gimple_statement_structure. */
2084
2085inline void
2086gimple_set_plf (gimple *stmt, enum plf_mask plf, bool val_p)
2088 if (val_p)
2089 stmt->plf |= (unsigned int) plf;
2090 else
2091 stmt->plf &= ~((unsigned int) plf);
2092}
2093
2094
2095/* Return the value of pass local flag PLF on statement STMT.
2097 Please note that this 'plf' property of the gimple statement is
2098 supposed to be undefined at pass boundaries. This means that a
2099 given pass should not assume it contains any useful value when the
2100 pass starts and thus can set it to any value it sees fit.
2101
2102 You can learn more about the plf property by reading the comment of
2103 the 'plf' data member of struct gimple_statement_structure. */
2104
2105inline unsigned int
2106gimple_plf (gimple *stmt, enum plf_mask plf)
2107{
2108 return stmt->plf & ((unsigned int) plf);
2109}
2110
2111
2112/* Set the UID of statement.
2113
2114 Please note that this UID property is supposed to be undefined at
2115 pass boundaries. This means that a given pass should not assume it
2116 contains any useful value when the pass starts and thus can set it
2117 to any value it sees fit. */
2118
2119inline void
2120gimple_set_uid (gimple *g, unsigned uid)
2121{
2122 g->uid = uid;
2123}
2124
2125
2126/* Return the UID of statement.
2127
2128 Please note that this UID property is supposed to be undefined at
2129 pass boundaries. This means that a given pass should not assume it
2130 contains any useful value when the pass starts and thus can set it
2131 to any value it sees fit. */
2132
2133inline unsigned
2134gimple_uid (const gimple *g)
2135{
2136 return g->uid;
2137}
2139
2140/* Make statement G a singleton sequence. */
2141
2142inline void
2144{
2145 g->next = NULL;
2146 g->prev = g;
2147}
2148
2149
2150/* Return true if GIMPLE statement G has register or memory operands. */
2151
2152inline bool
2153gimple_has_ops (const gimple *g)
2155 return gimple_code (g) >= GIMPLE_COND && gimple_code (g) <= GIMPLE_RETURN;
2156}
2157
2158template <>
2159template <>
2160inline bool
2162{
2163 return gimple_has_ops (gs);
2164}
2165
2166template <>
2167template <>
2168inline bool
2170{
2171 return gimple_has_ops (gs);
2172}
2173
2174/* Return true if GIMPLE statement G has memory operands. */
2175
2176inline bool
2177gimple_has_mem_ops (const gimple *g)
2179 return gimple_code (g) >= GIMPLE_ASSIGN && gimple_code (g) <= GIMPLE_RETURN;
2180}
2181
2182template <>
2183template <>
2184inline bool
2186{
2187 return gimple_has_mem_ops (gs);
2188}
2189
2190template <>
2191template <>
2192inline bool
2194{
2195 return gimple_has_mem_ops (gs);
2196}
2197
2198/* Return the set of USE operands for statement G. */
2199
2200inline struct use_optype_d *
2201gimple_use_ops (const gimple *g)
2203 const gimple_statement_with_ops *ops_stmt =
2205 if (!ops_stmt)
2206 return NULL;
2207 return ops_stmt->use_ops;
2208}
2209
2210
2211/* Set USE to be the set of USE operands for statement G. */
2212
2213inline void
2215{
2216 gimple_statement_with_ops *ops_stmt =
2218 ops_stmt->use_ops = use;
2219}
2220
2221
2222/* Return the single VUSE operand of the statement G. */
2223
2224inline tree
2225gimple_vuse (const gimple *g)
2227 const gimple_statement_with_memory_ops *mem_ops_stmt =
2229 if (!mem_ops_stmt)
2230 return NULL_TREE;
2231 return mem_ops_stmt->vuse;
2232}
2233
2234/* Return the single VDEF operand of the statement G. */
2235
2236inline tree
2237gimple_vdef (const gimple *g)
2238{
2239 const gimple_statement_with_memory_ops *mem_ops_stmt =
2241 if (!mem_ops_stmt)
2242 return NULL_TREE;
2243 return mem_ops_stmt->vdef;
2244}
2245
2246/* Return the single VUSE operand of the statement G. */
2247
2248inline tree *
2250{
2251 gimple_statement_with_memory_ops *mem_ops_stmt =
2253 if (!mem_ops_stmt)
2254 return NULL;
2255 return &mem_ops_stmt->vuse;
2256}
2257
2258/* Return the single VDEF operand of the statement G. */
2259
2260inline tree *
2262{
2263 gimple_statement_with_memory_ops *mem_ops_stmt =
2265 if (!mem_ops_stmt)
2266 return NULL;
2267 return &mem_ops_stmt->vdef;
2269
2270/* Set the single VUSE operand of the statement G. */
2271
2272inline void
2273gimple_set_vuse (gimple *g, tree vuse)
2274{
2275 gimple_statement_with_memory_ops *mem_ops_stmt =
2277 mem_ops_stmt->vuse = vuse;
2278}
2279
2280/* Set the single VDEF operand of the statement G. */
2281
2282inline void
2284{
2285 gimple_statement_with_memory_ops *mem_ops_stmt =
2287 mem_ops_stmt->vdef = vdef;
2288}
2290
2291/* Return true if statement G has operands and the modified field has
2292 been set. */
2293
2294inline bool
2295gimple_modified_p (const gimple *g)
2296{
2297 return (gimple_has_ops (g)) ? (bool) g->modified : false;
2298}
2299
2300
2301/* Set the MODIFIED flag to MODIFIEDP, iff the gimple statement G has
2302 a MODIFIED field. */
2303
2304inline void
2305gimple_set_modified (gimple *s, bool modifiedp)
2307 if (gimple_has_ops (s))
2308 s->modified = (unsigned) modifiedp;
2309}
2310
2311
2312/* Return true if statement STMT contains volatile operands. */
2313
2314inline bool
2315gimple_has_volatile_ops (const gimple *stmt)
2317 if (gimple_has_mem_ops (stmt))
2318 return stmt->has_volatile_ops;
2319 else
2320 return false;
2321}
2322
2323
2324/* Set the HAS_VOLATILE_OPS flag to VOLATILEP. */
2325
2326inline void
2328{
2329 if (gimple_has_mem_ops (stmt))
2330 stmt->has_volatile_ops = (unsigned) volatilep;
2331}
2332
2333/* Return true if STMT is in a transaction. */
2334
2335inline bool
2336gimple_in_transaction (const gimple *stmt)
2337{
2339}
2340
2341/* Return true if statement STMT may access memory. */
2342
2343inline bool
2344gimple_references_memory_p (gimple *stmt)
2345{
2346 return gimple_has_mem_ops (stmt) && gimple_vuse (stmt);
2347}
2349
2350/* Return the subcode for OMP statement S. */
2351
2352inline unsigned
2353gimple_omp_subcode (const gimple *s)
2354{
2355 gcc_gimple_checking_assert (gimple_code (s) >= GIMPLE_OMP_ATOMIC_LOAD
2356 && gimple_code (s) <= GIMPLE_OMP_ORDERED);
2357 return s->subcode;
2358}
2360/* Set the subcode for OMP statement S to SUBCODE. */
2361
2362inline void
2363gimple_omp_set_subcode (gimple *s, unsigned int subcode)
2364{
2365 /* We only have 16 bits for the subcode. Assert that we are not
2366 overflowing it. */
2367 gcc_gimple_checking_assert (subcode < (1 << 16));
2368 s->subcode = subcode;
2369}
2371/* Set the nowait flag on OMP_RETURN statement S. */
2372
2373inline void
2375{
2376 GIMPLE_CHECK (s, GIMPLE_OMP_RETURN);
2378}
2379
2380
2381/* Return true if OMP return statement G has the GF_OMP_RETURN_NOWAIT
2382 flag set. */
2383
2384inline bool
2386{
2387 GIMPLE_CHECK (g, GIMPLE_OMP_RETURN);
2388 return (gimple_omp_subcode (g) & GF_OMP_RETURN_NOWAIT) != 0;
2389}
2390
2391
2392/* Set the LHS of OMP return. */
2393
2394inline void
2396{
2397 gimple_statement_omp_return *omp_return_stmt =
2399 omp_return_stmt->val = lhs;
2400}
2401
2402
2403/* Get the LHS of OMP return. */
2404
2405inline tree
2407{
2408 const gimple_statement_omp_return *omp_return_stmt =
2410 return omp_return_stmt->val;
2411}
2412
2414/* Return a pointer to the LHS of OMP return. */
2415
2416inline tree *
2418{
2419 gimple_statement_omp_return *omp_return_stmt =
2421 return &omp_return_stmt->val;
2422}
2423
2425/* Return true if OMP section statement G has the GF_OMP_SECTION_LAST
2426 flag set. */
2427
2428inline bool
2430{
2431 GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
2432 return (gimple_omp_subcode (g) & GF_OMP_SECTION_LAST) != 0;
2433}
2434
2436/* Set the GF_OMP_SECTION_LAST flag on G. */
2437
2438inline void
2440{
2441 GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
2442 g->subcode |= GF_OMP_SECTION_LAST;
2443}
2444
2445
2446/* Return true if OMP ordered construct is stand-alone
2447 (G has the GF_OMP_ORDERED_STANDALONE flag set). */
2448
2449inline bool
2451{
2452 GIMPLE_CHECK (g, GIMPLE_OMP_ORDERED);
2454}
2455
2456
2457/* Set the GF_OMP_ORDERED_STANDALONE flag on G. */
2458
2459inline void
2461{
2462 GIMPLE_CHECK (g, GIMPLE_OMP_ORDERED);
2463 g->subcode |= GF_OMP_ORDERED_STANDALONE;
2464}
2465
2466
2467/* Return true if OMP parallel statement G has the
2468 GF_OMP_PARALLEL_COMBINED flag set. */
2469
2470inline bool
2471gimple_omp_parallel_combined_p (const gimple *g)
2473 GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
2475}
2476
2477
2478/* Set the GF_OMP_PARALLEL_COMBINED field in G depending on the boolean
2479 value of COMBINED_P. */
2480
2481inline void
2482gimple_omp_parallel_set_combined_p (gimple *g, bool combined_p)
2484 GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
2485 if (combined_p)
2486 g->subcode |= GF_OMP_PARALLEL_COMBINED;
2487 else
2488 g->subcode &= ~GF_OMP_PARALLEL_COMBINED;
2489}
2490
2491
2492/* Return true if OMP atomic load/store statement G has the
2493 GF_OMP_ATOMIC_NEED_VALUE flag set. */
2495inline bool
2497{
2498 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2499 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2501}
2502
2503
2504/* Set the GF_OMP_ATOMIC_NEED_VALUE flag on G. */
2505
2506inline void
2508{
2509 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2510 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2511 g->subcode |= GF_OMP_ATOMIC_NEED_VALUE;
2512}
2513
2514
2515/* Return true if OMP atomic load/store statement G has the
2516 GF_OMP_ATOMIC_WEAK flag set. */
2517
2518inline bool
2520{
2521 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2522 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2523 return (gimple_omp_subcode (g) & GF_OMP_ATOMIC_WEAK) != 0;
2524}
2525
2526
2527/* Set the GF_OMP_ATOMIC_WEAK flag on G. */
2528
2529inline void
2531{
2532 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2533 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2534 g->subcode |= GF_OMP_ATOMIC_WEAK;
2535}
2537
2538/* Return the memory order of the OMP atomic load/store statement G. */
2539
2540inline enum omp_memory_order
2542{
2543 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2544 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2545 return (enum omp_memory_order)
2547}
2548
2549
2550/* Set the memory order on G. */
2551
2552inline void
2554{
2555 if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
2556 GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
2557 g->subcode = ((g->subcode & ~GF_OMP_ATOMIC_MEMORY_ORDER)
2559}
2560
2561
2562/* Return the number of operands for statement GS. */
2563
2564inline unsigned
2565gimple_num_ops (const gimple *gs)
2566{
2567 return gs->num_ops;
2568}
2569
2570
2571/* Set the number of operands for statement GS. */
2572
2573inline void
2574gimple_set_num_ops (gimple *gs, unsigned num_ops)
2575{
2576 gs->num_ops = num_ops;
2577}
2578
2579
2580/* Return the array of operands for statement GS. */
2582inline tree *
2583gimple_ops (gimple *gs)
2584{
2585 size_t off;
2586
2587 /* All the tuples have their operand vector at the very bottom
2588 of the structure. Note that those structures that do not
2589 have an operand vector have a zero offset. */
2591 gcc_gimple_checking_assert (off != 0);
2592
2593 return (tree *) ((char *) gs + off);
2594}
2596
2597/* Return operand I for statement GS. */
2598
2599inline tree
2600gimple_op (const gimple *gs, unsigned i)
2601{
2602 if (gimple_has_ops (gs))
2603 {
2605 return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
2606 }
2607 else
2608 return NULL_TREE;
2609}
2610
2611/* Return a pointer to operand I for statement GS. */
2613inline tree *
2614gimple_op_ptr (gimple *gs, unsigned i)
2615{
2616 if (gimple_has_ops (gs))
2617 {
2619 return gimple_ops (gs) + i;
2620 }
2621 else
2622 return NULL;
2623}
2624
2625/* Set operand I of statement GS to OP. */
2626
2627inline void
2628gimple_set_op (gimple *gs, unsigned i, tree op)
2629{
2631
2632 /* Note. It may be tempting to assert that OP matches
2633 is_gimple_operand, but that would be wrong. Different tuples
2634 accept slightly different sets of tree operands. Each caller
2635 should perform its own validation. */
2636 gimple_ops (gs)[i] = op;
2637}
2638
2639/* Return true if GS is a GIMPLE_ASSIGN. */
2640
2641inline bool
2642is_gimple_assign (const gimple *gs)
2643{
2644 return gimple_code (gs) == GIMPLE_ASSIGN;
2645}
2646
2647/* Determine if expression CODE is one of the valid expressions that can
2648 be used on the RHS of GIMPLE assignments. */
2649
2650inline enum gimple_rhs_class
2652{
2653 return (enum gimple_rhs_class) gimple_rhs_class_table[(int) code];
2654}
2655
2656/* Return the LHS of assignment statement GS. */
2657
2658inline tree
2659gimple_assign_lhs (const gassign *gs)
2660{
2661 return gs->op[0];
2662}
2664inline tree
2665gimple_assign_lhs (const gimple *gs)
2666{
2667 const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
2668 return gimple_assign_lhs (ass);
2670
2671
2672/* Return a pointer to the LHS of assignment statement GS. */
2673
2674inline tree *
2675gimple_assign_lhs_ptr (gassign *gs)
2676{
2677 return &gs->op[0];
2678}
2679
2680inline tree *
2682{
2684 return gimple_assign_lhs_ptr (ass);
2685}
2687
2688/* Set LHS to be the LHS operand of assignment statement GS. */
2689
2690inline void
2692{
2693 gs->op[0] = lhs;
2694
2695 if (lhs && TREE_CODE (lhs) == SSA_NAME)
2696 SSA_NAME_DEF_STMT (lhs) = gs;
2697}
2698
2699inline void
2700gimple_assign_set_lhs (gimple *gs, tree lhs)
2703 gimple_assign_set_lhs (ass, lhs);
2704}
2705
2706
2707/* Return the first operand on the RHS of assignment statement GS. */
2708
2709inline tree
2710gimple_assign_rhs1 (const gassign *gs)
2711{
2712 return gs->op[1];
2713}
2714
2715inline tree
2716gimple_assign_rhs1 (const gimple *gs)
2717{
2718 const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
2719 return gimple_assign_rhs1 (ass);
2720}
2722
2723/* Return a pointer to the first operand on the RHS of assignment
2724 statement GS. */
2725
2726inline tree *
2728{
2729 return &gs->op[1];
2730}
2731
2732inline tree *
2734{
2736 return gimple_assign_rhs1_ptr (ass);
2737}
2738
2739/* Set RHS to be the first operand on the RHS of assignment statement GS. */
2740
2741inline void
2743{
2744 gs->op[1] = rhs;
2745}
2746
2747inline void
2748gimple_assign_set_rhs1 (gimple *gs, tree rhs)
2751 gimple_assign_set_rhs1 (ass, rhs);
2752}
2753
2754
2755/* Return the second operand on the RHS of assignment statement GS.
2756 If GS does not have two operands, NULL is returned instead. */
2757
2758inline tree
2759gimple_assign_rhs2 (const gassign *gs)
2760{
2761 if (gimple_num_ops (gs) >= 3)
2762 return gs->op[2];
2763 else
2764 return NULL_TREE;
2765}
2767inline tree
2768gimple_assign_rhs2 (const gimple *gs)
2769{
2770 const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
2771 return gimple_assign_rhs2 (ass);
2772}
2773
2774
2775/* Return a pointer to the second operand on the RHS of assignment
2776 statement GS. */
2777
2778inline tree *
2780{
2782 return &gs->op[2];
2783}
2784
2785inline tree *
2787{
2789 return gimple_assign_rhs2_ptr (ass);
2790}
2791
2792
2793/* Set RHS to be the second operand on the RHS of assignment statement GS. */
2794
2795inline void
2797{
2799 gs->op[2] = rhs;
2800}
2801
2802inline void
2804{
2806 return gimple_assign_set_rhs2 (ass, rhs);
2807}
2808
2809/* Return the third operand on the RHS of assignment statement GS.
2810 If GS does not have two operands, NULL is returned instead. */
2811
2812inline tree
2813gimple_assign_rhs3 (const gassign *gs)
2815 if (gimple_num_ops (gs) >= 4)
2816 return gs->op[3];
2817 else
2818 return NULL_TREE;
2819}
2820
2821inline tree
2822gimple_assign_rhs3 (const gimple *gs)
2823{
2825 return gimple_assign_rhs3 (ass);
2826}
2827
2828/* Return a pointer to the third operand on the RHS of assignment
2829 statement GS. */
2830
2831inline tree *
2832gimple_assign_rhs3_ptr (gimple *gs)
2836 return &ass->op[3];
2837}
2838
2839
2840/* Set RHS to be the third operand on the RHS of assignment statement GS. */
2842inline void
2844{
2846 gs->op[3] = rhs;
2847}
2848
2849inline void
2850gimple_assign_set_rhs3 (gimple *gs, tree rhs)
2851{
2852 gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
2854}
2855
2856
2857/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
2858 which expect to see only two operands. */
2859
2860inline void
2861gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
2862 tree op1, tree op2)
2863{
2864 gimple_assign_set_rhs_with_ops (gsi, code, op1, op2, NULL);
2865}
2867/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
2868 which expect to see only one operands. */
2869
2870inline void
2872 tree op1)
2873{
2874 gimple_assign_set_rhs_with_ops (gsi, code, op1, NULL, NULL);
2875}
2876
2877/* Returns true if GS is a nontemporal move. */
2878
2879inline bool
2881{
2882 return gs->nontemporal_move;
2883}
2884
2885/* Sets nontemporal move flag of GS to NONTEMPORAL. */
2886
2887inline void
2888gimple_assign_set_nontemporal_move (gimple *gs, bool nontemporal)
2890 GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
2891 gs->nontemporal_move = nontemporal;
2892}
2893
2894
2895/* Return the code of the expression computed on the rhs of assignment
2896 statement GS. In case that the RHS is a single object, returns the
2897 tree code of the object. */
2898
2899inline enum tree_code
2900gimple_assign_rhs_code (const gassign *gs)
2902 enum tree_code code = (enum tree_code) gs->subcode;
2903 /* While we initially set subcode to the TREE_CODE of the rhs for
2904 GIMPLE_SINGLE_RHS assigns we do not update that subcode to stay
2905 in sync when we rewrite stmts into SSA form or do SSA propagations. */
2907 code = TREE_CODE (gs->op[1]);
2908
2909 return code;
2911
2912inline enum tree_code
2913gimple_assign_rhs_code (const gimple *gs)
2914{
2915 const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
2916 return gimple_assign_rhs_code (ass);
2917}
2918
2920/* Set CODE to be the code for the expression computed on the RHS of
2921 assignment S. */
2922
2923inline void
2925{
2926 GIMPLE_CHECK (s, GIMPLE_ASSIGN);
2927 s->subcode = code;
2928}
2929
2930
2931/* Return the gimple rhs class of the code of the expression computed on
2932 the rhs of assignment statement GS.
2933 This will never return GIMPLE_INVALID_RHS. */
2934
2937{
2939}
2940
2941/* Return true if GS is an assignment with a singleton RHS, i.e.,
2942 there is no operator associated with the assignment itself.
2943 Unlike gimple_assign_copy_p, this predicate returns true for
2944 any RHS operand, including those that perform an operation
2945 and do not have the semantics of a copy, such as COND_EXPR. */
2946
2947inline bool
2949{
2950 return (is_gimple_assign (gs)
2952}
2954/* Return true if GS performs a store to its lhs. */
2955
2956inline bool
2957gimple_store_p (const gimple *gs)
2958{
2959 tree lhs = gimple_get_lhs (gs);
2960 return lhs && !is_gimple_reg (lhs);
2962
2963/* Return true if S is a type-cast assignment. */
2964
2965inline bool
2966gimple_assign_cast_p (const gimple *s)
2968 if (is_gimple_assign (s))
2969 {
2971 return CONVERT_EXPR_CODE_P (sc)
2972 || sc == VIEW_CONVERT_EXPR
2973 || sc == FIX_TRUNC_EXPR;
2974 }
2975
2976 return false;
2978
2979/* Return true if S is a clobber statement. */
2980
2981inline bool
2982gimple_clobber_p (const gimple *s)
2984 return gimple_assign_single_p (s)
2986}
2987
2988/* Return true if S is a clobber statement. */
2989
2990inline bool
2991gimple_clobber_p (const gimple *s, enum clobber_kind kind)
2992{
2994 && CLOBBER_KIND (gimple_assign_rhs1 (s)) == kind;
2995}
2996
2997/* Return true if GS is a GIMPLE_CALL. */
2998
2999inline bool
3000is_gimple_call (const gimple *gs)
3002 return gimple_code (gs) == GIMPLE_CALL;
3003}
3004
3005/* Return the LHS of call statement GS. */
3006
3007inline tree
3008gimple_call_lhs (const gcall *gs)
3009{
3010 return gs->op[0];
3011}
3013inline tree
3014gimple_call_lhs (const gimple *gs)
3015{
3016 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3017 return gimple_call_lhs (gc);
3019
3020
3021/* Return a pointer to the LHS of call statement GS. */
3022
3023inline tree *
3024gimple_call_lhs_ptr (gcall *gs)
3025{
3026 return &gs->op[0];
3028
3029inline tree *
3030gimple_call_lhs_ptr (gimple *gs)
3031{
3032 gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
3033 return gimple_call_lhs_ptr (gc);
3034}
3036
3037/* Set LHS to be the LHS operand of call statement GS. */
3038
3039inline void
3041{
3042 gs->op[0] = lhs;
3043 if (lhs && TREE_CODE (lhs) == SSA_NAME)
3044 SSA_NAME_DEF_STMT (lhs) = gs;
3045}
3047inline void
3049{
3050 gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
3051 gimple_call_set_lhs (gc, lhs);
3052}
3054
3055/* Return true if call GS calls an internal-only function, as enumerated
3056 by internal_fn. */
3057
3058inline bool
3059gimple_call_internal_p (const gcall *gs)
3060{
3061 return (gs->subcode & GF_CALL_INTERNAL) != 0;
3063
3064inline bool
3065gimple_call_internal_p (const gimple *gs)
3066{
3067 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3069}
3070
3071/* Return true if call GS is marked as nocf_check. */
3072
3073inline bool
3074gimple_call_nocf_check_p (const gcall *gs)
3075{
3076 return (gs->subcode & GF_CALL_NOCF_CHECK) != 0;
3078
3079/* Mark statement GS as nocf_check call. */
3080
3081inline void
3082gimple_call_set_nocf_check (gcall *gs, bool nocf_check)
3083{
3084 if (nocf_check)
3086 else
3087 gs->subcode &= ~GF_CALL_NOCF_CHECK;
3089
3090/* Return the target of internal call GS. */
3091
3092inline enum internal_fn
3093gimple_call_internal_fn (const gcall *gs)
3094{
3096 return gs->u.internal_fn;
3098
3099inline enum internal_fn
3100gimple_call_internal_fn (const gimple *gs)
3101{
3102 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3103 return gimple_call_internal_fn (gc);
3104}
3105
3106/* Return true, if this internal gimple call is unique. */
3108inline bool
3110{
3111 return gimple_call_internal_fn (gs) == IFN_UNIQUE;
3112}
3114inline bool
3116{
3117 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3119}
3120
3121/* Return true if GS is an internal function FN. */
3122
3123inline bool
3125{
3126 return (is_gimple_call (gs)
3128 && gimple_call_internal_fn (gs) == fn);
3129}
3130
3131/* If CTRL_ALTERING_P is true, mark GIMPLE_CALL S to be a stmt
3132 that could alter control flow. */
3133
3134inline void
3135gimple_call_set_ctrl_altering (gcall *s, bool ctrl_altering_p)
3136{
3137 if (ctrl_altering_p)
3139 else
3141}
3142
3143inline void
3144gimple_call_set_ctrl_altering (gimple *s, bool ctrl_altering_p)
3145{
3146 gcall *gc = GIMPLE_CHECK2<gcall *> (s);
3147 gimple_call_set_ctrl_altering (gc, ctrl_altering_p);
3148}
3149
3150/* Return true if call GS calls an func whose GF_CALL_CTRL_ALTERING
3151 flag is set. Such call could not be a stmt in the middle of a bb. */
3152
3153inline bool
3155{
3156 return (gs->subcode & GF_CALL_CTRL_ALTERING) != 0;
3158
3159inline bool
3160gimple_call_ctrl_altering_p (const gimple *gs)
3161{
3162 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3163 return gimple_call_ctrl_altering_p (gc);
3164}
3165
3166
3167/* Return the function type of the function called by GS. */
3168
3169inline tree
3170gimple_call_fntype (const gcall *gs)
3171{
3172 if (gimple_call_internal_p (gs))
3174 return gs->u.fntype;
3175}
3176
3177inline tree
3178gimple_call_fntype (const gimple *gs)
3179{
3180 const gcall *call_stmt = GIMPLE_CHECK2<const gcall *> (gs);
3181 return gimple_call_fntype (call_stmt);
3182}
3184/* Set the type of the function called by CALL_STMT to FNTYPE. */
3185
3186inline void
3187gimple_call_set_fntype (gcall *call_stmt, tree fntype)
3188{
3190 call_stmt->u.fntype = fntype;
3191}
3192
3194/* Return the tree node representing the function called by call
3195 statement GS. */
3196
3197inline tree
3198gimple_call_fn (const gcall *gs)
3199{
3200 return gs->op[1];
3202
3203inline tree
3204gimple_call_fn (const gimple *gs)
3205{
3206 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3207 return gimple_call_fn (gc);
3208}
3209
3210/* Return a pointer to the tree node representing the function called by call
3211 statement GS. */
3212
3213inline tree *
3215{
3216 return &gs->op[1];
3217}
3218
3219inline tree *
3220gimple_call_fn_ptr (gimple *gs)
3221{
3222 gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
3224}
3225
3226
3227/* Set FN to be the function called by call statement GS. */
3228
3229inline void
3231{
3233 gs->op[1] = fn;
3234}
3235
3236
3237/* Set FNDECL to be the function called by call statement GS. */
3238
3239inline void
3241{
3243 gs->op[1] = build1_loc (gimple_location (gs), ADDR_EXPR,
3245}
3246
3247inline void
3248gimple_call_set_fndecl (gimple *gs, tree decl)
3249{
3250 gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
3251 gimple_call_set_fndecl (gc, decl);
3252}
3253
3254
3255/* Set internal function FN to be the function called by call statement CALL_STMT. */
3256
3257inline void
3258gimple_call_set_internal_fn (gcall *call_stmt, enum internal_fn fn)
3259{
3261 call_stmt->u.internal_fn = fn;
3262}
3263
3264
3265/* If a given GIMPLE_CALL's callee is a FUNCTION_DECL, return it.
3266 Otherwise return NULL. This function is analogous to
3267 get_callee_fndecl in tree land. */
3268
3269inline tree
3270gimple_call_fndecl (const gcall *gs)
3273}
3274
3275inline tree
3276gimple_call_fndecl (const gimple *gs)
3277{
3278 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3280}
3281
3282
3283/* Return the type returned by call statement GS. */
3284
3285inline tree
3286gimple_call_return_type (const gcall *gs)
3287{
3289
3290 if (type == NULL_TREE)
3291 return TREE_TYPE (gimple_call_lhs (gs));
3292
3293 /* The type returned by a function is the type of its
3294 function type. */
3295 return TREE_TYPE (type);
3296}
3297
3298
3299/* Return the static chain for call statement GS. */
3300
3301inline tree
3302gimple_call_chain (const gcall *gs)
3303{
3304 return gs->op[2];
3305}
3306
3307inline tree
3308gimple_call_chain (const gimple *gs)
3309{
3310 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3312}
3313
3314
3315/* Return a pointer to the static chain for call statement CALL_STMT. */
3316
3317inline tree *
3318gimple_call_chain_ptr (gcall *call_stmt)
3319{
3320 return &call_stmt->op[2];
3321}
3323/* Set CHAIN to be the static chain for call statement CALL_STMT. */
3324
3325inline void
3327{
3328 call_stmt->op[2] = chain;
3330
3331
3332/* Return the number of arguments used by call statement GS. */
3333
3334inline unsigned
3335gimple_call_num_args (const gcall *gs)
3336{
3337 return gimple_num_ops (gs) - 3;
3338}
3340inline unsigned
3341gimple_call_num_args (const gimple *gs)
3342{
3343 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3344 return gimple_call_num_args (gc);
3345}
3347
3348/* Return the argument at position INDEX for call statement GS. */
3349
3350inline tree
3351gimple_call_arg (const gcall *gs, unsigned index)
3352{
3353 gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
3354 return gs->op[index + 3];
3355}
3356
3357inline tree
3358gimple_call_arg (const gimple *gs, unsigned index)
3359{
3360 const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
3361 return gimple_call_arg (gc, index);
3362}
3363
3364
3365/* Return a pointer to the argument at position INDEX for call
3366 statement GS. */
3367
3368inline tree *
3369gimple_call_arg_ptr (gcall *gs, unsigned index)
3371 gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
3372 return &gs->op[index + 3];
3373}
3374
3375inline tree *
3376gimple_call_arg_ptr (gimple *gs, unsigned index)
3377{
3379 return gimple_call_arg_ptr (gc, index);
3380}
3381
3382
3383/* Set ARG to be the argument at position INDEX for call statement GS. */
3384
3385inline void
3386gimple_call_set_arg (gcall *gs, unsigned index, tree arg)
3387{
3388 gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
3389 gs->op[index + 3] = arg;
3391
3392inline void
3393gimple_call_set_arg (gimple *gs, unsigned index, tree arg)
3394{
3395 gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
3396 gimple_call_set_arg (gc, index, arg);
3397}
3398
3399
3400/* If TAIL_P is true, mark call statement S as being a tail call
3401 (i.e., a call just before the exit of a function). These calls are
3402 candidate for tail call optimization. */
3403
3404inline void
3405gimple_call_set_tail (gcall *s, bool tail_p)
3406{
3407 if (tail_p)
3409 else
3411}
3413
3414/* Return true if GIMPLE_CALL S is marked as a tail call. */
3415
3416inline bool
3417gimple_call_tail_p (const gcall *s)
3418{
3419 return (s->subcode & GF_CALL_TAILCALL) != 0;
3420}
3421
3422/* Mark (or clear) call statement S as requiring tail call optimization. */
3423
3424inline void
3425gimple_call_set_must_tail (gcall *s, bool must_tail_p)
3426{
3427 if (must_tail_p)
3429 else
3431}
3432
3433/* Return true if call statement has been marked as requiring
3434 tail call optimization. */
3435
3436inline bool
3438{
3439 return (s->subcode & GF_CALL_MUST_TAIL_CALL) != 0;
3440}
3441
3442/* If RETURN_SLOT_OPT_P is true mark GIMPLE_CALL S as valid for return
3443 slot optimization. This transformation uses the target of the call
3444 expansion as the return slot for calls that return in memory. */
3445
3446inline void
3447gimple_call_set_return_slot_opt (gcall *s, bool return_slot_opt_p)
3448{
3449 if (return_slot_opt_p)
3451 else
3453}
3454
3455
3456/* Return true if S is marked for return slot optimization. */
3458inline bool
3460{
3461 return (s->subcode & GF_CALL_RETURN_SLOT_OPT) != 0;
3462}
3463
3464
3465/* If FROM_THUNK_P is true, mark GIMPLE_CALL S as being the jump from a
3466 thunk to the thunked-to function. */
3468inline void
3469gimple_call_set_from_thunk (gcall *s, bool from_thunk_p)
3470{
3471 if (from_thunk_p)
3473 else
3475}
3476
3477
3478/* Return true if GIMPLE_CALL S is a jump from a thunk. */
3479
3480inline bool
3482{
3483 return (s->subcode & GF_CALL_FROM_THUNK) != 0;
3484}
3485
3486
3487/* If FROM_NEW_OR_DELETE_P is true, mark GIMPLE_CALL S as being a call
3488 to operator new or delete created from a new or delete expression. */
3490inline void
3491gimple_call_set_from_new_or_delete (gcall *s, bool from_new_or_delete_p)
3492{
3493 if (from_new_or_delete_p)
3495 else
3497}
3498
3499
3500/* Return true if GIMPLE_CALL S is a call to operator new or delete from
3501 from a new or delete expression. */
3502
3503inline bool
3504gimple_call_from_new_or_delete (const gcall *s)
3505{
3507}
3508
3509
3510/* If PASS_ARG_PACK_P is true, GIMPLE_CALL S is a stdarg call that needs the
3511 argument pack in its argument list. */
3512
3513inline void
3514gimple_call_set_va_arg_pack (gcall *s, bool pass_arg_pack_p)
3515{
3516 if (pass_arg_pack_p)
3518 else
3520}
3521
3522
3523/* Return true if GIMPLE_CALL S is a stdarg call that needs the
3524 argument pack in its argument list. */
3525
3526inline bool
3528{
3529 return (s->subcode & GF_CALL_VA_ARG_PACK) != 0;
3530}
3531
3532
3533/* Return true if S is a noreturn call. */
3534
3535inline bool
3536gimple_call_noreturn_p (const gcall *s)
3537{
3538 return (gimple_call_flags (s) & ECF_NORETURN) != 0;
3540
3541inline bool
3542gimple_call_noreturn_p (const gimple *s)
3543{
3544 const gcall *gc = GIMPLE_CHECK2<const gcall *> (s);
3545 return gimple_call_noreturn_p (gc);
3546}
3547
3548
3549/* If NOTHROW_P is true, GIMPLE_CALL S is a call that is known to not throw
3550 even if the called function can throw in other cases. */
3551
3552inline void
3553gimple_call_set_nothrow (gcall *s, bool nothrow_p)
3554{
3555 if (nothrow_p)
3557 else
3559}
3560
3561/* Return true if S is a nothrow call. */
3562
3563inline bool
3565{
3566 return (gimple_call_flags (s) & ECF_NOTHROW) != 0;
3568
3569/* If EXPECTED_THROW_P is true, GIMPLE_CALL S is a call that is known
3570 to be more likely to throw than to run forever, terminate the
3571 program or return by other means. */
3572
3573static inline void
3574gimple_call_set_expected_throw (gcall *s, bool expected_throw_p)
3575{
3576 if (expected_throw_p)
3578 else
3580}
3581
3582/* Return true if S is a call that is more likely to end by
3583 propagating an exception than by other means. */
3584
3585static inline bool
3587{
3588 return (gimple_call_flags (s) & ECF_XTHROW) != 0;
3589}
3590
3591/* If FOR_VAR is true, GIMPLE_CALL S is a call to builtin_alloca that
3592 is known to be emitted for VLA objects. Those are wrapped by
3593 stack_save/stack_restore calls and hence can't lead to unbounded
3594 stack growth even when they occur in loops. */
3595
3596inline void
3597gimple_call_set_alloca_for_var (gcall *s, bool for_var)
3598{
3599 if (for_var)
3601 else
3603}
3604
3605/* Return true of S is a call to builtin_alloca emitted for VLA objects. */
3607inline bool
3609{
3610 return (s->subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
3611}
3612
3613inline bool
3615{
3616 const gcall *gc = GIMPLE_CHECK2<gcall *> (s);
3617 return (gc->subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
3618}
3619
3620/* If BY_DESCRIPTOR_P is true, GIMPLE_CALL S is an indirect call for which
3621 pointers to nested function are descriptors instead of trampolines. */
3622
3623inline void
3624gimple_call_set_by_descriptor (gcall *s, bool by_descriptor_p)
3625{
3626 if (by_descriptor_p)
3628 else
3630}
3632/* Return true if S is a by-descriptor call. */
3633
3634inline bool
3636{
3637 return (s->subcode & GF_CALL_BY_DESCRIPTOR) != 0;
3638}
3639
3640/* Copy all the GF_CALL_* flags from ORIG_CALL to DEST_CALL. */
3642inline void
3643gimple_call_copy_flags (gcall *dest_call, gcall *orig_call)
3644{
3645 dest_call->subcode = orig_call->subcode;
3646}
3647
3648
3649/* Return a pointer to the points-to solution for the set of call-used
3650 variables of the call CALL_STMT. */
3651
3652inline struct pt_solution *
3653gimple_call_use_set (gcall *call_stmt)
3655 return &call_stmt->call_used;
3656}
3657
3658/* As above, but const. */
3659
3660inline const pt_solution *
3661gimple_call_use_set (const gcall *call_stmt)
3662{
3663 return &call_stmt->call_used;
3664}
3665
3666/* Return a pointer to the points-to solution for the set of call-used
3667 variables of the call CALL_STMT. */
3668
3669inline struct pt_solution *
3671{
3672 return &call_stmt->call_clobbered;
3673}
3674
3675/* As above, but const. */
3676
3677inline const pt_solution *
3678gimple_call_clobber_set (const gcall *call_stmt)
3680 return &call_stmt->call_clobbered;
3681}
3682
3683
3684/* Returns true if this is a GIMPLE_ASSIGN or a GIMPLE_CALL with a
3685 non-NULL lhs. */
3686
3687inline bool
3688gimple_has_lhs (const gimple *stmt)
3689{
3690 if (is_gimple_assign (stmt))
3691 return true;
3692 if (const gcall *call = dyn_cast <const gcall *> (stmt))
3693 return gimple_call_lhs (call) != NULL_TREE;
3694 return false;
3696
3697
3698/* Return the code of the predicate computed by conditional statement GS. */
3699
3700inline enum tree_code
3701gimple_cond_code (const gcond *gs)
3702{
3703 return (enum tree_code) gs->subcode;
3705
3706inline enum tree_code
3707gimple_cond_code (const gimple *gs)
3708{
3709 const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
3710 return gimple_cond_code (gc);
3711}
3712
3714/* Set CODE to be the predicate code for the conditional statement GS. */
3715
3716inline void
3717gimple_cond_set_code (gcond *gs, enum tree_code code)
3718{
3719 gs->subcode = code;
3720}
3721
3722
3723/* Return the LHS of the predicate computed by conditional statement GS. */
3724
3725inline tree
3726gimple_cond_lhs (const gcond *gs)
3727{
3728 return gs->op[0];
3730
3731inline tree
3732gimple_cond_lhs (const gimple *gs)
3733{
3734 const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
3735 return gimple_cond_lhs (gc);
3736}
3737
3738/* Return the pointer to the LHS of the predicate computed by conditional
3739 statement GS. */
3740
3741inline tree *
3743{
3744 return &gs->op[0];
3745}
3746
3747/* Set LHS to be the LHS operand of the predicate computed by
3748 conditional statement GS. */
3750inline void
3752{
3753 gs->op[0] = lhs;
3754}
3755
3756
3757/* Return the RHS operand of the predicate computed by conditional GS. */
3758
3759inline tree
3760gimple_cond_rhs (const gcond *gs)
3761{
3762 return gs->op[1];
3763}
3764
3765inline tree
3766gimple_cond_rhs (const gimple *gs)
3767{
3768 const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
3769 return gimple_cond_rhs (gc);
3770}
3771
3772/* Return the pointer to the RHS operand of the predicate computed by
3773 conditional GS. */
3774
3775inline tree *
3776gimple_cond_rhs_ptr (gcond *gs)
3777{
3778 return &gs->op[1];
3780
3781
3782/* Set RHS to be the RHS operand of the predicate computed by
3783 conditional statement GS. */
3784
3785inline void
3786gimple_cond_set_rhs (gcond *gs, tree rhs)
3787{
3788 gs->op[1] = rhs;
3789}
3790
3791
3792/* Return the label used by conditional statement GS when its
3793 predicate evaluates to true. */
3794
3795inline tree
3796gimple_cond_true_label (const gcond *gs)
3797{
3798 return gs->op[2];
3800
3801
3802/* Set LABEL to be the label used by conditional statement GS when its
3803 predicate evaluates to true. */
3804
3805inline void
3806gimple_cond_set_true_label (gcond *gs, tree label)
3807{
3808 gs->op[2] = label;
3809}
3811
3812/* Set LABEL to be the label used by conditional statement GS when its
3813 predicate evaluates to false. */
3814
3815inline void
3817{
3818 gs->op[3] = label;
3819}
3820
3821
3822/* Return the label used by conditional statement GS when its
3823 predicate evaluates to false. */
3824
3825inline tree
3826gimple_cond_false_label (const gcond *gs)
3827{
3828 return gs->op[3];
3829}
3830
3831
3832/* Set the conditional COND_STMT to be of the form 'if (1 == 0)'. */
3833
3834inline void
3836{
3839 gs->subcode = NE_EXPR;
3840}
3841
3842
3843/* Set the conditional COND_STMT to be of the form 'if (1 == 1)'. */
3844
3845inline void
3846gimple_cond_make_true (gcond *gs)
3847{
3850 gs->subcode = NE_EXPR;
3851}
3852
3853/* Check if conditional statemente GS is of the form 'if (1 == 1)',
3854 'if (0 == 0)', 'if (1 != 0)' or 'if (0 != 1)' */
3855
3856inline bool
3857gimple_cond_true_p (const gcond *gs)
3858{
3860 tree rhs = gimple_cond_rhs (gs);
3861 enum tree_code code = gimple_cond_code (gs);
3862
3863 if (lhs != boolean_true_node && lhs != boolean_false_node)
3864 return false;
3865
3866 if (rhs != boolean_true_node && rhs != boolean_false_node)
3867 return false;
3868
3869 if (code == NE_EXPR && lhs != rhs)
3870 return true;
3871
3872 if (code == EQ_EXPR && lhs == rhs)
3873 return true;
3874
3875 return false;
3876}
3877
3878/* Check if conditional statement GS is of the form 'if (1 != 1)',
3879 'if (0 != 0)', 'if (1 == 0)' or 'if (0 == 1)' */
3880
3881inline bool
3882gimple_cond_false_p (const gcond *gs)
3883{
3884 tree lhs = gimple_cond_lhs (gs);
3885 tree rhs = gimple_cond_rhs (gs);
3886 enum tree_code code = gimple_cond_code (gs);
3887
3889 return false;
3890
3892 return false;
3893
3894 if (code == NE_EXPR && lhs == rhs)
3895 return true;
3896
3897 if (code == EQ_EXPR && lhs != rhs)
3898 return true;
3899
3900 return false;
3901}
3903/* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS. */
3904
3905inline void
3906gimple_cond_set_condition (gcond *stmt, enum tree_code code, tree lhs,
3907 tree rhs)
3908{
3909 gimple_cond_set_code (stmt, code);
3910 gimple_cond_set_lhs (stmt, lhs);
3912}
3913
3914
3915/* Return the tree code for the expression computed by STMT. This is
3916 only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN. For
3917 GIMPLE_CALL, return CALL_EXPR as the expression code for
3918 consistency. This is useful when the caller needs to deal with the
3919 three kinds of computation that GIMPLE supports. */
3920
3921inline enum tree_code
3922gimple_expr_code (const gimple *stmt)
3923{
3924 if (const gassign *ass = dyn_cast<const gassign *> (stmt))
3925 return gimple_assign_rhs_code (ass);
3926 if (const gcond *cond = dyn_cast<const gcond *> (stmt))
3927 return gimple_cond_code (cond);
3928 else
3929 {
3931 return CALL_EXPR;
3932 }
3933}
3934
3935
3936/* Return the LABEL_DECL node used by GIMPLE_LABEL statement GS. */
3937
3938inline tree
3939gimple_label_label (const glabel *gs)
3941 return gs->op[0];
3942}
3943
3944
3945/* Set LABEL to be the LABEL_DECL node used by GIMPLE_LABEL statement
3946 GS. */
3947
3948inline void
3949gimple_label_set_label (glabel *gs, tree label)
3951 gs->op[0] = label;
3952}
3953
3954
3955/* Return the destination of the unconditional jump GS. */
3956
3957inline tree
3958gimple_goto_dest (const gimple *gs)
3959{
3960 GIMPLE_CHECK (gs, GIMPLE_GOTO);
3961 return gimple_op (gs, 0);
3962}
3963
3964
3965/* Set DEST to be the destination of the unconditonal jump GS. */
3966
3967inline void
3969{
3970 gs->op[0] = dest;
3971}
3972
3973
3974/* Return the variables declared in the GIMPLE_BIND statement GS. */
3976inline tree
3977gimple_bind_vars (const gbind *bind_stmt)
3978{
3979 return bind_stmt->vars;
3980}
3981
3982
3983/* Set VARS to be the set of variables declared in the GIMPLE_BIND
3984 statement GS. */
3985
3986inline void
3987gimple_bind_set_vars (gbind *bind_stmt, tree vars)
3988{
3989 bind_stmt->vars = vars;
3990}
3991
3992
3993/* Append VARS to the set of variables declared in the GIMPLE_BIND
3994 statement GS. */
3995
3996inline void
3997gimple_bind_append_vars (gbind *bind_stmt, tree vars)
3998{
3999 bind_stmt->vars = chainon (bind_stmt->vars, vars);
4000}
4001
4002
4004gimple_bind_body_ptr (gbind *bind_stmt)
4005{
4006 return &bind_stmt->body;
4007}
4008
4009/* Return the GIMPLE sequence contained in the GIMPLE_BIND statement GS. */
4010
4011inline gimple_seq
4012gimple_bind_body (const gbind *gs)
4014 return *gimple_bind_body_ptr (const_cast <gbind *> (gs));
4015}
4016
4017
4018/* Set SEQ to be the GIMPLE sequence contained in the GIMPLE_BIND
4019 statement GS. */
4020
4021inline void
4022gimple_bind_set_body (gbind *bind_stmt, gimple_seq seq)
4023{
4024 bind_stmt->body = seq;
4025}
4026
4027
4028/* Append a statement to the end of a GIMPLE_BIND's body. */
4029
4030inline void
4031gimple_bind_add_stmt (gbind *bind_stmt, gimple *stmt)
4032{
4033 gimple_seq_add_stmt (&bind_stmt->body, stmt);
4034}
4035
4036
4037/* Append a sequence of statements to the end of a GIMPLE_BIND's body. */
4038
4039inline void
4040gimple_bind_add_seq (gbind *bind_stmt, gimple_seq seq)
4041{
4042 gimple_seq_add_seq (&bind_stmt->body, seq);
4043}
4044
4045
4046/* Return the TREE_BLOCK node associated with GIMPLE_BIND statement
4047 GS. This is analogous to the BIND_EXPR_BLOCK field in trees. */
4048
4049inline tree
4050gimple_bind_block (const gbind *bind_stmt)
4051{
4052 return bind_stmt->block;
4053}
4054
4055
4056/* Set BLOCK to be the TREE_BLOCK node associated with GIMPLE_BIND
4057 statement GS. */
4059inline void
4060gimple_bind_set_block (gbind *bind_stmt, tree block)
4061{
4063 || TREE_CODE (block) == BLOCK);
4064 bind_stmt->block = block;
4065}
4066
4068/* Return the number of input operands for GIMPLE_ASM ASM_STMT. */
4069
4070inline unsigned
4071gimple_asm_ninputs (const gasm *asm_stmt)
4072{
4073 return asm_stmt->ni;
4074}
4075
4076
4077/* Return the number of output operands for GIMPLE_ASM ASM_STMT. */
4079inline unsigned
4080gimple_asm_noutputs (const gasm *asm_stmt)
4081{
4082 return asm_stmt->no;
4083}
4084
4085
4086/* Return the number of clobber operands for GIMPLE_ASM ASM_STMT. */
4088inline unsigned
4089gimple_asm_nclobbers (const gasm *asm_stmt)
4090{
4091 return asm_stmt->nc;
4092}
4093
4094/* Return the number of label operands for GIMPLE_ASM ASM_STMT. */
4095
4096inline unsigned
4097gimple_asm_nlabels (const gasm *asm_stmt)
4099 return asm_stmt->nl;
4100}
4101
4102/* Return input operand INDEX of GIMPLE_ASM ASM_STMT. */
4103
4104inline tree
4105gimple_asm_input_op (const gasm *asm_stmt, unsigned index)
4106{
4107 gcc_gimple_checking_assert (index < asm_stmt->ni);
4108 return asm_stmt->op[index + asm_stmt->no];
4109}
4110
4111/* Set IN_OP to be input operand INDEX in GIMPLE_ASM ASM_STMT. */
4112
4113inline void
4114gimple_asm_set_input_op (gasm *asm_stmt, unsigned index, tree in_op)
4115{
4116 gcc_gimple_checking_assert (index < asm_stmt->ni
4117 && TREE_CODE (in_op) == TREE_LIST);
4118 asm_stmt->op[index + asm_stmt->no] = in_op;
4119}
4120
4121
4122/* Return output operand INDEX of GIMPLE_ASM ASM_STMT. */
4123
4124inline tree
4125gimple_asm_output_op (const gasm *asm_stmt, unsigned index)
4126{
4127 gcc_gimple_checking_assert (index < asm_stmt->no);
4128 return asm_stmt->op[index];
4129}
4130
4131/* Set OUT_OP to be output operand INDEX in GIMPLE_ASM ASM_STMT. */
4132
4133inline void
4134gimple_asm_set_output_op (gasm *asm_stmt, unsigned index, tree out_op)
4135{
4136 gcc_gimple_checking_assert (index < asm_stmt->no
4137 && TREE_CODE (out_op) == TREE_LIST);
4138 asm_stmt->op[index] = out_op;
4139}
4140
4141
4142/* Return clobber operand INDEX of GIMPLE_ASM ASM_STMT. */
4143
4144inline tree
4145gimple_asm_clobber_op (const gasm *asm_stmt, unsigned index)
4146{
4147 gcc_gimple_checking_assert (index < asm_stmt->nc);
4148 return asm_stmt->op[index + asm_stmt->ni + asm_stmt->no];
4149}
4150
4151
4152/* Set CLOBBER_OP to be clobber operand INDEX in GIMPLE_ASM ASM_STMT. */
4153
4154inline void
4155gimple_asm_set_clobber_op (gasm *asm_stmt, unsigned index, tree clobber_op)
4157 gcc_gimple_checking_assert (index < asm_stmt->nc
4158 && TREE_CODE (clobber_op) == TREE_LIST);
4159 asm_stmt->op[index + asm_stmt->ni + asm_stmt->no] = clobber_op;
4160}
4161
4162/* Return label operand INDEX of GIMPLE_ASM ASM_STMT. */
4163
4164inline tree
4165gimple_asm_label_op (const gasm *asm_stmt, unsigned index)
4166{
4167 gcc_gimple_checking_assert (index < asm_stmt->nl);
4168 return asm_stmt->op[index + asm_stmt->no + asm_stmt->ni + asm_stmt->nc];
4169}
4170
4171/* Set LABEL_OP to be label operand INDEX in GIMPLE_ASM ASM_STMT. */
4172
4173inline void
4174gimple_asm_set_label_op (gasm *asm_stmt, unsigned index, tree label_op)
4175{
4176 gcc_gimple_checking_assert (index < asm_stmt->nl
4177 && TREE_CODE (label_op) == TREE_LIST);
4178 asm_stmt->op[index + asm_stmt->no + asm_stmt->ni + asm_stmt->nc] = label_op;
4179}
4180
4181/* Return the string representing the assembly instruction in
4182 GIMPLE_ASM ASM_STMT. */
4183
4184inline const char *
4185gimple_asm_string (const gasm *asm_stmt)
4186{
4187 return asm_stmt->string;
4188}
4189
4191/* Return true if ASM_STMT is marked volatile. */
4192
4193inline bool
4194gimple_asm_volatile_p (const gasm *asm_stmt)
4195{
4196 return (asm_stmt->subcode & GF_ASM_VOLATILE) != 0;
4197}
4198
4199
4200/* If VOLATILE_P is true, mark asm statement ASM_STMT as volatile. */
4201
4202inline void
4203gimple_asm_set_volatile (gasm *asm_stmt, bool volatile_p)
4204{
4205 if (volatile_p)
4206 asm_stmt->subcode |= GF_ASM_VOLATILE;
4207 else
4208 asm_stmt->subcode &= ~GF_ASM_VOLATILE;
4209}
4210
4212/* Return true if ASM_STMT is marked inline. */
4213
4214inline bool
4215gimple_asm_inline_p (const gasm *asm_stmt)
4216{
4217 return (asm_stmt->subcode & GF_ASM_INLINE) != 0;
4218}
4219
4221/* If INLINE_P is true, mark asm statement ASM_STMT as inline. */
4222
4223inline void
4224gimple_asm_set_inline (gasm *asm_stmt, bool inline_p)
4225{
4226 if (inline_p)
4227 asm_stmt->subcode |= GF_ASM_INLINE;
4228 else
4229 asm_stmt->subcode &= ~GF_ASM_INLINE;
4231
4232
4233/* Mark whether asm ASM_STMT is a basic asm or an extended asm, based on
4234 BASIC_P. */
4235
4236inline void
4237gimple_asm_set_basic (gasm *asm_stmt, bool basic_p)
4238{
4239 if (basic_p)
4240 asm_stmt->subcode |= GF_ASM_BASIC;
4241 else
4242 asm_stmt->subcode &= ~GF_ASM_BASIC;
4243}
4244
4245
4246/* Return true if asm ASM_STMT is a basic asm rather than an extended asm. */
4247
4248inline bool
4249gimple_asm_basic_p (const gasm *asm_stmt)
4250{
4251 return (asm_stmt->subcode & GF_ASM_BASIC) != 0;
4252}
4253
4254
4255/* Return the types handled by GIMPLE_CATCH statement CATCH_STMT. */
4256
4257inline tree
4258gimple_catch_types (const gcatch *catch_stmt)
4259{
4260 return catch_stmt->types;
4261}
4262
4263
4264/* Return a pointer to the types handled by GIMPLE_CATCH statement CATCH_STMT. */
4265
4266inline tree *
4268{
4269 return &catch_stmt->types;
4270}
4271
4272
4273/* Return a pointer to the GIMPLE sequence representing the body of
4274 the handler of GIMPLE_CATCH statement CATCH_STMT. */
4275
4276inline gimple_seq *
4277gimple_catch_handler_ptr (gcatch *catch_stmt)
4279 return &catch_stmt->handler;
4280}
4281
4282
4283/* Return the GIMPLE sequence representing the body of the handler of
4284 GIMPLE_CATCH statement CATCH_STMT. */
4285
4286inline gimple_seq
4287gimple_catch_handler (const gcatch *catch_stmt)
4288{
4289 return *gimple_catch_handler_ptr (const_cast <gcatch *> (catch_stmt));
4290}
4291
4292
4293/* Set T to be the set of types handled by GIMPLE_CATCH CATCH_STMT. */
4294
4295inline void
4296gimple_catch_set_types (gcatch *catch_stmt, tree t)
4297{
4298 catch_stmt->types = t;
4299}
4301
4302/* Set HANDLER to be the body of GIMPLE_CATCH CATCH_STMT. */
4303
4304inline void
4305gimple_catch_set_handler (gcatch *catch_stmt, gimple_seq handler)
4306{
4307 catch_stmt->handler = handler;
4308}
4309
4311/* Return the types handled by GIMPLE_EH_FILTER statement GS. */
4312
4313inline tree
4315{
4316 const geh_filter *eh_filter_stmt = as_a <const geh_filter *> (gs);
4317 return eh_filter_stmt->types;
4318}
4319
4321/* Return a pointer to the types handled by GIMPLE_EH_FILTER statement
4322 GS. */
4323
4324inline tree *
4326{
4327 geh_filter *eh_filter_stmt = as_a <geh_filter *> (gs);
4328 return &eh_filter_stmt->types;
4330
4331
4332/* Return a pointer to the sequence of statement to execute when
4333 GIMPLE_EH_FILTER statement fails. */
4334
4335inline gimple_seq *
4338 geh_filter *eh_filter_stmt = as_a <geh_filter *> (gs);
4339 return &eh_filter_stmt->failure;
4340}
4341
4342
4343/* Return the sequence of statement to execute when GIMPLE_EH_FILTER
4344 statement fails. */
4345
4348{
4349 return *gimple_eh_filter_failure_ptr (const_cast <gimple *> (gs));
4350}
4351
4353/* Set TYPES to be the set of types handled by GIMPLE_EH_FILTER
4354 EH_FILTER_STMT. */
4355
4356inline void
4357gimple_eh_filter_set_types (geh_filter *eh_filter_stmt, tree types)
4359 eh_filter_stmt->types = types;
4360}
4361
4362
4363/* Set FAILURE to be the sequence of statements to execute on failure
4364 for GIMPLE_EH_FILTER EH_FILTER_STMT. */
4365
4366inline void
4369{
4370 eh_filter_stmt->failure = failure;
4371}
4372
4373/* Get the function decl to be called by the MUST_NOT_THROW region. */
4374
4375inline tree
4377{
4378 return eh_mnt_stmt->fndecl;
4379}
4380
4381/* Set the function decl to be called by GS to DECL. */
4382
4383inline void
4384gimple_eh_must_not_throw_set_fndecl (geh_mnt *eh_mnt_stmt,
4385 tree decl)
4386{
4387 eh_mnt_stmt->fndecl = decl;
4388}
4389
4390/* GIMPLE_EH_ELSE accessors. */
4391
4392inline gimple_seq *
4393gimple_eh_else_n_body_ptr (geh_else *eh_else_stmt)
4394{
4395 return &eh_else_stmt->n_body;
4396}
4398inline gimple_seq
4399gimple_eh_else_n_body (const geh_else *eh_else_stmt)
4400{
4401 return *gimple_eh_else_n_body_ptr (const_cast <geh_else *> (eh_else_stmt));
4402}
4403
4404inline gimple_seq *
4405gimple_eh_else_e_body_ptr (geh_else *eh_else_stmt)
4406{
4407 return &eh_else_stmt->e_body;
4408}
4410inline gimple_seq
4411gimple_eh_else_e_body (const geh_else *eh_else_stmt)
4412{
4413 return *gimple_eh_else_e_body_ptr (const_cast <geh_else *> (eh_else_stmt));
4414}
4415
4416inline void
4417gimple_eh_else_set_n_body (geh_else *eh_else_stmt, gimple_seq seq)
4418{
4419 eh_else_stmt->n_body = seq;
4421
4422inline void
4423gimple_eh_else_set_e_body (geh_else *eh_else_stmt, gimple_seq seq)
4424{
4425 eh_else_stmt->e_body = seq;
4426}
4427
4428/* GIMPLE_TRY accessors. */
4429
4430/* Return the kind of try block represented by GIMPLE_TRY GS. This is
4431 either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY. */
4432
4433inline enum gimple_try_flags
4434gimple_try_kind (const gimple *gs)
4435{
4436 GIMPLE_CHECK (gs, GIMPLE_TRY);
4437 return (enum gimple_try_flags) (gs->subcode & GIMPLE_TRY_KIND);
4438}
4439
4441/* Set the kind of try block represented by GIMPLE_TRY GS. */
4442
4443inline void
4445{
4447 || kind == GIMPLE_TRY_FINALLY);
4448 if (gimple_try_kind (gs) != kind)
4449 gs->subcode = (unsigned int) kind;
4450}
4452
4453/* Return the GIMPLE_TRY_CATCH_IS_CLEANUP flag. */
4454
4455inline bool
4457{
4459 return (gs->subcode & GIMPLE_TRY_CATCH_IS_CLEANUP) != 0;
4461
4462
4463/* Return a pointer to the sequence of statements used as the
4464 body for GIMPLE_TRY GS. */
4465
4466inline gimple_seq *
4467gimple_try_eval_ptr (gimple *gs)
4468{
4469 gtry *try_stmt = as_a <gtry *> (gs);
4470 return &try_stmt->eval;
4471}
4472
4473
4474/* Return the sequence of statements used as the body for GIMPLE_TRY GS. */
4475
4476inline gimple_seq
4477gimple_try_eval (const gimple *gs)
4478{
4479 return *gimple_try_eval_ptr (const_cast <gimple *> (gs));
4480}
4481
4482
4483/* Return a pointer to the sequence of statements used as the cleanup body for
4484 GIMPLE_TRY GS. */
4485
4486inline gimple_seq *
4488{
4489 gtry *try_stmt = as_a <gtry *> (gs);
4490 return &try_stmt->cleanup;
4491}
4492
4494/* Return the sequence of statements used as the cleanup body for
4495 GIMPLE_TRY GS. */
4496
4497inline gimple_seq
4498gimple_try_cleanup (const gimple *gs)
4499{
4500 return *gimple_try_cleanup_ptr (const_cast <gimple *> (gs));
4501}
4502
4504/* Set the GIMPLE_TRY_CATCH_IS_CLEANUP flag. */
4505
4506inline void
4507gimple_try_set_catch_is_cleanup (gtry *g, bool catch_is_cleanup)
4508{
4510 if (catch_is_cleanup)
4511 g->subcode |= GIMPLE_TRY_CATCH_IS_CLEANUP;
4512 else
4513 g->subcode &= ~GIMPLE_TRY_CATCH_IS_CLEANUP;
4514}
4515
4516
4517/* Set EVAL to be the sequence of statements to use as the body for
4518 GIMPLE_TRY TRY_STMT. */
4519
4520inline void
4521gimple_try_set_eval (gtry *try_stmt, gimple_seq eval)
4523 try_stmt->eval = eval;
4524}
4525
4526
4527/* Set CLEANUP to be the sequence of statements to use as the cleanup
4528 body for GIMPLE_TRY TRY_STMT. */
4529
4530inline void
4531gimple_try_set_cleanup (gtry *try_stmt, gimple_seq cleanup)
4533 try_stmt->cleanup = cleanup;
4534}
4535
4536
4537/* Return a pointer to the cleanup sequence for cleanup statement GS. */
4538
4539inline gimple_seq *
4540gimple_wce_cleanup_ptr (gimple *gs)
4541{
4543 return &wce_stmt->cleanup;
4544}
4545
4546
4547/* Return the cleanup sequence for cleanup statement GS. */
4548
4549inline gimple_seq
4550gimple_wce_cleanup (gimple *gs)
4551{
4552 return *gimple_wce_cleanup_ptr (gs);
4553}
4555
4556/* Set CLEANUP to be the cleanup sequence for GS. */
4557
4558inline void
4560{
4562 wce_stmt->cleanup = cleanup;
4563}
4565
4566/* Return the CLEANUP_EH_ONLY flag for a WCE tuple. */
4567
4568inline bool
4571 GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
4572 return gs->subcode != 0;
4573}
4574
4575
4576/* Set the CLEANUP_EH_ONLY flag for a WCE tuple. */
4577
4578inline void
4580{
4581 GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
4582 gs->subcode = (unsigned int) eh_only_p;
4583}
4584
4586/* Return the maximum number of arguments supported by GIMPLE_PHI GS. */
4587
4588inline unsigned
4589gimple_phi_capacity (const gimple *gs)
4590{
4591 const gphi *phi_stmt = as_a <const gphi *> (gs);
4592 return phi_stmt->capacity;
4593}
4595
4596/* Return the number of arguments in GIMPLE_PHI GS. This must always
4597 be exactly the number of incoming edges for the basic block holding
4598 GS. */
4599
4600inline unsigned
4601gimple_phi_num_args (const gimple *gs)
4602{
4603 const gphi *phi_stmt = as_a <const gphi *> (gs);
4604 return phi_stmt->nargs;
4605}
4607
4608/* Return the SSA name created by GIMPLE_PHI GS. */
4609
4610inline tree
4611gimple_phi_result (const gphi *gs)
4612{
4613 return gs->result;
4614}
4615
4616inline tree
4617gimple_phi_result (const gimple *gs)
4618{
4619 const gphi *phi_stmt = as_a <const gphi *> (gs);
4620 return gimple_phi_result (phi_stmt);
4621}
4622
4623/* Return a pointer to the SSA name created by GIMPLE_PHI GS. */
4624
4625inline tree *
4626gimple_phi_result_ptr (gphi *gs)
4628 return &gs->result;
4629}
4630
4631inline tree *
4632gimple_phi_result_ptr (gimple *gs)
4633{
4634 gphi *phi_stmt = as_a <gphi *> (gs);
4635 return gimple_phi_result_ptr (phi_stmt);
4636}
4638/* Set RESULT to be the SSA name created by GIMPLE_PHI PHI. */
4639
4640inline void
4641gimple_phi_set_result (gphi *phi, tree result)
4642{
4643 phi->result = result;
4644 if (result && TREE_CODE (result) == SSA_NAME)
4645 SSA_NAME_DEF_STMT (result) = phi;
4646}
4648
4649/* Return the PHI argument corresponding to incoming edge INDEX for
4650 GIMPLE_PHI GS. */
4651
4652inline struct phi_arg_d *
4653gimple_phi_arg (gphi *gs, unsigned index)
4654{
4655 gcc_gimple_checking_assert (index < gs->nargs);
4656 return &(gs->args[index]);
4657}
4658
4659inline const phi_arg_d *
4660gimple_phi_arg (const gphi *gs, unsigned index)
4661{
4662 gcc_gimple_checking_assert (index < gs->nargs);
4663 return &(gs->args[index]);
4664}
4666inline const phi_arg_d *
4667gimple_phi_arg (const gimple *gs, unsigned index)
4668{
4669 const gphi *phi_stmt = as_a <const gphi *> (gs);
4670 return gimple_phi_arg (phi_stmt, index);
4672
4673inline struct phi_arg_d *
4674gimple_phi_arg (gimple *gs, unsigned index)
4675{
4676 gphi *phi_stmt = as_a <gphi *> (gs);
4677 return gimple_phi_arg (phi_stmt, index);
4678}
4679
4680/* Set PHIARG to be the argument corresponding to incoming edge INDEX
4681 for GIMPLE_PHI PHI. */
4682
4683inline void
4684gimple_phi_set_arg (gphi *phi, unsigned index, struct phi_arg_d * phiarg)
4685{
4686 gcc_gimple_checking_assert (index < phi->nargs);
4687 phi->args[index] = *phiarg;
4688}
4689
4690/* Return the PHI nodes for basic block BB, or NULL if there are no
4691 PHI nodes. */
4692
4693inline gimple_seq
4695{
4696 gcc_checking_assert (!(bb->flags & BB_RTL));
4697 return bb->il.gimple.phi_nodes;
4698}
4699
4700/* Return a pointer to the PHI nodes for basic block BB. */
4701
4702inline gimple_seq *
4705 gcc_checking_assert (!(bb->flags & BB_RTL));
4706 return &bb->il.gimple.phi_nodes;
4707}
4708
4709/* Return the tree operand for argument I of PHI node GS. */
4710
4711inline tree
4712gimple_phi_arg_def (const gphi *gs, size_t index)
4713{
4714 return gimple_phi_arg (gs, index)->def;
4715}
4716
4717inline tree
4718gimple_phi_arg_def (const gimple *gs, size_t index)
4719{
4720 return gimple_phi_arg (gs, index)->def;
4721}
4722
4723/* Return the tree operand for the argument associated with
4724 edge E of PHI node GS. */
4725
4726inline tree
4727gimple_phi_arg_def_from_edge (const gphi *gs, const_edge e)
4729 gcc_checking_assert (e->dest == gimple_bb (gs));
4730 return gimple_phi_arg (gs, e->dest_idx)->def;
4731}
4732
4733inline tree
4734gimple_phi_arg_def_from_edge (const gimple *gs, const_edge e)
4735{
4737 return gimple_phi_arg (gs, e->dest_idx)->def;
4738}
4739
4740/* Return a pointer to the tree operand for argument I of phi node PHI. */
4741
4742inline tree *
4743gimple_phi_arg_def_ptr (gphi *phi, size_t index)
4745 return &gimple_phi_arg (phi, index)->def;
4746}
4747
4748/* Return the edge associated with argument I of phi node PHI. */
4749
4750inline edge
4751gimple_phi_arg_edge (const gphi *phi, size_t i)
4753 return EDGE_PRED (gimple_bb (phi), i);
4754}
4755
4756/* Return the source location of gimple argument I of phi node PHI. */
4757
4758inline location_t
4759gimple_phi_arg_location (const gphi *phi, size_t i)
4760{
4761 return gimple_phi_arg (phi, i)->locus;
4762}
4763
4764/* Return the source location of the argument on edge E of phi node PHI. */
4765
4766inline location_t
4768{
4769 return gimple_phi_arg (phi, e->dest_idx)->locus;
4770}
4771
4772/* Set the source location of gimple argument I of phi node PHI to LOC. */
4773
4774inline void
4775gimple_phi_arg_set_location (gphi *phi, size_t i, location_t loc)
4776{
4777 gimple_phi_arg (phi, i)->locus = loc;
4778}
4780/* Return address of source location of gimple argument I of phi node PHI. */
4781
4782inline location_t *
4783gimple_phi_arg_location_ptr (gphi *phi, size_t i)
4784{
4785 return &gimple_phi_arg (phi, i)->locus;
4786}
4787
4788/* Return TRUE if argument I of phi node PHI has a location record. */
4789
4790inline bool
4792{
4794}
4795
4796/* Return the number of arguments that can be accessed by gimple_arg. */
4797
4798inline unsigned
4800{
4801 if (auto phi = dyn_cast<const gphi *> (gs))
4802 return gimple_phi_num_args (phi);
4803 if (auto call = dyn_cast<const gcall *> (gs))
4804 return gimple_call_num_args (call);
4805 return gimple_num_ops (as_a <const gassign *> (gs)) - 1;
4806}
4808/* GS must be an assignment, a call, or a PHI.
4809 If it's an assignment, return rhs operand I.
4810 If it's a call, return function argument I.
4811 If it's a PHI, return the value of PHI argument I. */
4812
4813inline tree
4814gimple_arg (const gimple *gs, unsigned int i)
4815{
4816 if (auto phi = dyn_cast<const gphi *> (gs))
4817 return gimple_phi_arg_def (phi, i);
4818 if (auto call = dyn_cast<const gcall *> (gs))
4819 return gimple_call_arg (call, i);
4820 return gimple_op (as_a <const gassign *> (gs), i + 1);
4821}
4822
4823/* Return a pointer to gimple_arg (GS, I). */
4825inline tree *
4826gimple_arg_ptr (gimple *gs, unsigned int i)
4827{
4828 if (auto phi = dyn_cast<gphi *> (gs))
4829 return gimple_phi_arg_def_ptr (phi, i);
4830 if (auto call = dyn_cast<gcall *> (gs))
4831 return gimple_call_arg_ptr (call, i);
4832 return gimple_op_ptr (as_a <gassign *> (gs), i + 1);
4833}
4834
4835/* Return the region number for GIMPLE_RESX RESX_STMT. */
4836
4837inline int
4838gimple_resx_region (const gresx *resx_stmt)
4839{
4840 return resx_stmt->region;
4841}
4842
4843/* Set REGION to be the region number for GIMPLE_RESX RESX_STMT. */
4844
4845inline void
4846gimple_resx_set_region (gresx *resx_stmt, int region)
4848 resx_stmt->region = region;
4849}
4850
4851/* Return the region number for GIMPLE_EH_DISPATCH EH_DISPATCH_STMT. */
4852
4853inline int
4854gimple_eh_dispatch_region (const geh_dispatch *eh_dispatch_stmt)
4855{
4856 return eh_dispatch_stmt->region;
4857}
4858
4859/* Set REGION to be the region number for GIMPLE_EH_DISPATCH
4860 EH_DISPATCH_STMT. */
4861
4862inline void
4863gimple_eh_dispatch_set_region (geh_dispatch *eh_dispatch_stmt, int region)
4864{
4865 eh_dispatch_stmt->region = region;
4866}
4867
4868/* Return the number of labels associated with the switch statement GS. */
4869
4870inline unsigned
4871gimple_switch_num_labels (const gswitch *gs)
4872{
4873 unsigned num_ops;
4874 GIMPLE_CHECK (gs, GIMPLE_SWITCH);
4875 num_ops = gimple_num_ops (gs);
4877 return num_ops - 1;
4878}
4879
4880
4881/* Set NLABELS to be the number of labels for the switch statement GS. */
4882
4883inline void
4884gimple_switch_set_num_labels (gswitch *g, unsigned nlabels)
4886 GIMPLE_CHECK (g, GIMPLE_SWITCH);
4887 gimple_set_num_ops (g, nlabels + 1);
4888}
4889
4890
4891/* Return the index variable used by the switch statement GS. */
4892
4893inline tree
4894gimple_switch_index (const gswitch *gs)
4895{
4896 return gs->op[0];
4897}
4898
4899
4900/* Return a pointer to the index variable for the switch statement GS. */
4901
4902inline tree *
4903gimple_switch_index_ptr (gswitch *gs)
4904{
4905 return &gs->op[0];
4907
4908
4909/* Set INDEX to be the index variable for switch statement GS. */
4910
4911inline void
4912gimple_switch_set_index (gswitch *gs, tree index)
4913{
4915 gs->op[0] = index;
4916}
4917
4918
4919/* Return the label numbered INDEX. The default label is 0, followed by any
4920 labels in a switch statement. */
4921
4922inline tree
4923gimple_switch_label (const gswitch *gs, unsigned index)
4925 gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 1);
4926 return gs->op[index + 1];
4927}
4928
4929/* Set the label number INDEX to LABEL. 0 is always the default label. */
4930
4931inline void
4932gimple_switch_set_label (gswitch *gs, unsigned index, tree label)
4933{
4935 && (label == NULL_TREE
4936 || TREE_CODE (label) == CASE_LABEL_EXPR));
4937 gs->op[index + 1] = label;
4938}
4939
4940/* Return the default label for a switch statement. */
4941
4942inline tree
4943gimple_switch_default_label (const gswitch *gs)
4944{
4945 tree label = gimple_switch_label (gs, 0);
4946 gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
4947 return label;
4948}
4949
4950/* Set the default label for a switch statement. */
4952inline void
4954{
4955 gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
4956 gimple_switch_set_label (gs, 0, label);
4957}
4958
4959/* Return true if GS is a GIMPLE_DEBUG statement. */
4960
4961inline bool
4963{
4964 return gimple_code (gs) == GIMPLE_DEBUG;
4965}
4966
4967
4968/* Return the first nondebug statement in GIMPLE sequence S. */
4969
4970inline gimple *
4972{
4974 while (n && is_gimple_debug (n))
4975 n = n->next;
4976 return n;
4977}
4978
4979
4980/* Return the last nondebug statement in GIMPLE sequence S. */
4981
4982inline gimple *
4986 for (n = gimple_seq_last (s);
4987 n && is_gimple_debug (n);
4988 n = n->prev)
4989 if (n == s)
4990 return NULL;
4991 return n;
4992}
4993
4995/* Return true if S is a GIMPLE_DEBUG BIND statement. */
4996
4997inline bool
4998gimple_debug_bind_p (const gimple *s)
4999{
5000 if (is_gimple_debug (s))
5001 return s->subcode == GIMPLE_DEBUG_BIND;
5002
5003 return false;
5004}
5006/* Return the variable bound in a GIMPLE_DEBUG bind statement. */
5007
5008inline tree
5010{
5011 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5013 return gimple_op (dbg, 0);
5015
5016/* Return the value bound to the variable in a GIMPLE_DEBUG bind
5017 statement. */
5018
5019inline tree
5021{
5022 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5024 return gimple_op (dbg, 1);
5025}
5026
5027/* Return a pointer to the value bound to the variable in a
5028 GIMPLE_DEBUG bind statement. */
5029
5030inline tree *
5032{
5033 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5035 return gimple_op_ptr (dbg, 1);
5036}
5037
5038/* Set the variable bound in a GIMPLE_DEBUG bind statement. */
5039
5040inline void
5041gimple_debug_bind_set_var (gimple *dbg, tree var)
5042{
5043 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5045 gimple_set_op (dbg, 0, var);
5046}
5047
5048/* Set the value bound to the variable in a GIMPLE_DEBUG bind
5049 statement. */
5050
5051inline void
5052gimple_debug_bind_set_value (gimple *dbg, tree value)
5053{
5054 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5056 gimple_set_op (dbg, 1, value);
5057}
5058
5059/* The second operand of a GIMPLE_DEBUG_BIND, when the value was
5060 optimized away. */
5061#define GIMPLE_DEBUG_BIND_NOVALUE NULL_TREE /* error_mark_node */
5062
5063/* Remove the value bound to the variable in a GIMPLE_DEBUG bind
5064 statement. */
5066inline void
5068{
5069 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5072}
5073
5074/* Return true if the GIMPLE_DEBUG bind statement is bound to a
5075 value. */
5077inline bool
5079{
5080 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5082 return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE;
5083}
5084
5085#undef GIMPLE_DEBUG_BIND_NOVALUE
5087/* Return true if S is a GIMPLE_DEBUG SOURCE BIND statement. */
5088
5089inline bool
5091{
5092 if (is_gimple_debug (s))
5093 return s->subcode == GIMPLE_DEBUG_SOURCE_BIND;
5094
5095 return false;
5096}
5098/* Return the variable bound in a GIMPLE_DEBUG source bind statement. */
5099
5100inline tree
5102{
5103 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5105 return gimple_op (dbg, 0);
5106}
5108/* Return the value bound to the variable in a GIMPLE_DEBUG source bind
5109 statement. */
5110
5111inline tree
5113{
5114 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5116 return gimple_op (dbg, 1);
5117}
5119/* Return a pointer to the value bound to the variable in a
5120 GIMPLE_DEBUG source bind statement. */
5121
5122inline tree *
5124{
5125 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5127 return gimple_op_ptr (dbg, 1);
5128}
5130/* Set the variable bound in a GIMPLE_DEBUG source bind statement. */
5131
5132inline void
5134{
5135 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5137 gimple_set_op (dbg, 0, var);
5138}
5139
5140/* Set the value bound to the variable in a GIMPLE_DEBUG source bind
5141 statement. */
5142
5143inline void
5145{
5146 GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
5148 gimple_set_op (dbg, 1, value);
5149}
5150
5151/* Return true if S is a GIMPLE_DEBUG BEGIN_STMT statement. */
5152
5153inline bool
5154gimple_debug_begin_stmt_p (const gimple *s)
5155{
5156 if (is_gimple_debug (s))
5157 return s->subcode == GIMPLE_DEBUG_BEGIN_STMT;
5159 return false;
5160}
5161
5162/* Return true if S is a GIMPLE_DEBUG INLINE_ENTRY statement. */
5163
5164inline bool
5165gimple_debug_inline_entry_p (const gimple *s)
5167 if (is_gimple_debug (s))
5169
5170 return false;
5171}
5172
5173/* Return true if S is a GIMPLE_DEBUG non-binding marker statement. */
5175inline bool
5177{
5178 if (is_gimple_debug (s))
5179 return s->subcode == GIMPLE_DEBUG_BEGIN_STMT
5181
5182 return false;
5184
5185/* Return the line number for EXPR, or return -1 if we have no line
5186 number information for it. */
5187inline int
5188get_lineno (const gimple *stmt)
5189{
5190 location_t loc;
5191
5192 if (!stmt)
5193 return -1;
5194
5195 loc = gimple_location (stmt);
5196 if (loc == UNKNOWN_LOCATION)
5197 return -1;
5198
5199 return LOCATION_LINE (loc);
5200}
5201
5202/* Return a pointer to the body for the OMP statement GS. */
5204inline gimple_seq *
5206{
5207 return &static_cast <gimple_statement_omp *> (gs)->body;
5208}
5209
5210/* Return the body for the OMP statement GS. */
5211
5213gimple_omp_body (const gimple *gs)
5214{
5215 return *gimple_omp_body_ptr (const_cast <gimple *> (gs));
5216}
5217
5218/* Set BODY to be the body for the OMP statement GS. */
5219
5220inline void
5221gimple_omp_set_body (gimple *gs, gimple_seq body)
5223 static_cast <gimple_statement_omp *> (gs)->body = body;
5224}
5225
5226
5227/* Return the name associated with OMP_CRITICAL statement CRIT_STMT. */
5228
5229inline tree
5230gimple_omp_critical_name (const gomp_critical *crit_stmt)
5231{
5232 return crit_stmt->name;
5233}
5234
5235
5236/* Return a pointer to the name associated with OMP critical statement
5237 CRIT_STMT. */
5238
5239inline tree *
5240gimple_omp_critical_name_ptr (gomp_critical *crit_stmt)
5242 return &crit_stmt->name;
5243}
5244
5245
5246/* Set NAME to be the name associated with OMP critical statement
5247 CRIT_STMT. */
5248
5249inline void
5250gimple_omp_critical_set_name (gomp_critical *crit_stmt, tree name)
5252 crit_stmt->name = name;
5253}
5254
5255
5256/* Return the clauses associated with OMP_CRITICAL statement CRIT_STMT. */
5257
5258inline tree
5259gimple_omp_critical_clauses (const gomp_critical *crit_stmt)
5260{
5261 return crit_stmt->clauses;
5262}
5263
5264
5265/* Return a pointer to the clauses associated with OMP critical statement
5266 CRIT_STMT. */
5267
5268inline tree *
5269gimple_omp_critical_clauses_ptr (gomp_critical *crit_stmt)
5271 return &crit_stmt->clauses;
5272}
5273
5274
5275/* Set CLAUSES to be the clauses associated with OMP critical statement
5276 CRIT_STMT. */
5277
5278inline void
5279gimple_omp_critical_set_clauses (gomp_critical *crit_stmt, tree clauses)
5281 crit_stmt->clauses = clauses;
5282}
5283
5284
5285/* Return the clauses associated with OMP_ORDERED statement ORD_STMT. */
5286
5287inline tree
5288gimple_omp_ordered_clauses (const gomp_ordered *ord_stmt)
5289{
5290 return ord_stmt->clauses;
5291}
5292
5293
5294/* Return a pointer to the clauses associated with OMP ordered statement
5295 ORD_STMT. */
5296
5297inline tree *
5298gimple_omp_ordered_clauses_ptr (gomp_ordered *ord_stmt)
5300 return &ord_stmt->clauses;
5301}
5302
5303
5304/* Set CLAUSES to be the clauses associated with OMP ordered statement
5305 ORD_STMT. */
5306
5307inline void
5308gimple_omp_ordered_set_clauses (gomp_ordered *ord_stmt, tree clauses)
5309{
5310 ord_stmt->clauses = clauses;
5312
5313
5314/* Return the clauses associated with OMP_SCAN statement SCAN_STMT. */
5315
5316inline tree
5317gimple_omp_scan_clauses (const gomp_scan *scan_stmt)
5318{
5319 return scan_stmt->clauses;
5320}
5321
5323/* Return a pointer to the clauses associated with OMP scan statement
5324 ORD_STMT. */
5325
5326inline tree *
5328{
5329 return &scan_stmt->clauses;
5330}
5331
5332
5333/* Set CLAUSES to be the clauses associated with OMP scan statement
5334 ORD_STMT. */
5335
5336inline void
5337gimple_omp_scan_set_clauses (gomp_scan *scan_stmt, tree clauses)
5338{
5339 scan_stmt->clauses = clauses;
5340}
5341
5342
5343/* Return the clauses associated with OMP_TASKGROUP statement GS. */
5344
5345inline tree
5347{
5348 GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
5349 return
5350 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5351}
5352
5353
5354/* Return a pointer to the clauses associated with OMP taskgroup statement
5355 GS. */
5357inline tree *
5359{
5360 GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
5361 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5362}
5363
5364
5365/* Set CLAUSES to be the clauses associated with OMP taskgroup statement
5366 GS. */
5368inline void
5370{
5371 GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
5372 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5373 = clauses;
5374}
5375
5376
5377/* Return the clauses associated with OMP_MASKED statement GS. */
5378
5379inline tree
5381{
5382 GIMPLE_CHECK (gs, GIMPLE_OMP_MASKED);
5383 return
5384 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5385}
5386
5387
5388/* Return a pointer to the clauses associated with OMP masked statement
5389 GS. */
5391inline tree *
5393{
5394 GIMPLE_CHECK (gs, GIMPLE_OMP_MASKED);
5395 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5396}
5397
5398
5399/* Set CLAUSES to be the clauses associated with OMP masked statement
5400 GS. */
5401
5402inline void
5404{
5405 GIMPLE_CHECK (gs, GIMPLE_OMP_MASKED);
5406 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5407 = clauses;
5408}
5409
5411/* Return the clauses associated with OMP_SCOPE statement GS. */
5412
5413inline tree
5415{
5416 GIMPLE_CHECK (gs, GIMPLE_OMP_SCOPE);
5417 return
5418 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5419}
5421
5422/* Return a pointer to the clauses associated with OMP scope statement
5423 GS. */
5424
5425inline tree *
5427{
5428 GIMPLE_CHECK (gs, GIMPLE_OMP_SCOPE);
5429 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5430}
5431
5432
5433/* Set CLAUSES to be the clauses associated with OMP scope statement
5434 GS. */
5435
5436inline void
5437gimple_omp_scope_set_clauses (gimple *gs, tree clauses)
5439 GIMPLE_CHECK (gs, GIMPLE_OMP_SCOPE);
5440 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5441 = clauses;
5442}
5443
5444/* Return the clauses associated with OMP_DISPATCH statement GS. */
5445
5446inline tree
5447gimple_omp_dispatch_clauses (const gimple *gs)
5449 GIMPLE_CHECK (gs, GIMPLE_OMP_DISPATCH);
5450 return static_cast<const gimple_statement_omp_single_layout *> (gs)->clauses;
5451}
5452
5453/* Return a pointer to the clauses associated with OMP dispatch statement
5454 GS. */
5455
5456inline tree *
5458{
5459 GIMPLE_CHECK (gs, GIMPLE_OMP_DISPATCH);
5460 return &static_cast<gimple_statement_omp_single_layout *> (gs)->clauses;
5461}
5462
5463/* Set CLAUSES to be the clauses associated with OMP dispatch statement
5464 GS. */
5465
5466inline void
5468{
5469 GIMPLE_CHECK (gs, GIMPLE_OMP_DISPATCH);
5470 static_cast<gimple_statement_omp_single_layout *> (gs)->clauses = clauses;
5471}
5472
5473/* Return the clauses associated with OMP_INTEROP statement GS. */
5474
5475inline tree
5476gimple_omp_interop_clauses (const gimple *gs)
5477{
5478 GIMPLE_CHECK (gs, GIMPLE_OMP_INTEROP);
5479 return static_cast<const gimple_statement_omp_single_layout *> (gs)->clauses;
5480}
5481
5482/* Return a pointer to the clauses associated with OMP_INTEROP statement GS. */
5483
5484inline tree *
5486{
5487 GIMPLE_CHECK (gs, GIMPLE_OMP_INTEROP);
5488 return &static_cast<gimple_statement_omp_single_layout *> (gs)->clauses;
5490
5491/* Set CLAUSES to be the clauses associated with OMP interop statement
5492 GS. */
5493
5494inline void
5495gimple_omp_interop_set_clauses (gimple *gs, tree clauses)
5496{
5497 GIMPLE_CHECK (gs, GIMPLE_OMP_INTEROP);
5498 static_cast<gimple_statement_omp_single_layout *> (gs)->clauses = clauses;
5499}
5500
5501/* Return the kind of the OMP_FOR statemement G. */
5503inline int
5505{
5506 GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
5508}
5509
5510
5511/* Set the kind of the OMP_FOR statement G. */
5512
5513inline void
5515{
5516 g->subcode = (g->subcode & ~GF_OMP_FOR_KIND_MASK)
5517 | (kind & GF_OMP_FOR_KIND_MASK);
5518}
5519
5520
5521/* Return true if OMP_FOR statement G has the
5522 GF_OMP_FOR_COMBINED flag set. */
5523
5524inline bool
5526{
5527 GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
5528 return (gimple_omp_subcode (g) & GF_OMP_FOR_COMBINED) != 0;
5529}
5530
5531
5532/* Set the GF_OMP_FOR_COMBINED field in the OMP_FOR statement G depending on
5533 the boolean value of COMBINED_P. */
5534
5535inline void
5537{
5538 if (combined_p)
5539 g->subcode |= GF_OMP_FOR_COMBINED;
5540 else
5541 g->subcode &= ~GF_OMP_FOR_COMBINED;
5542}
5543
5544
5545/* Return true if the OMP_FOR statement G has the
5546 GF_OMP_FOR_COMBINED_INTO flag set. */
5548inline bool
5550{
5551 GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
5553}
5554
5555
5556/* Set the GF_OMP_FOR_COMBINED_INTO field in the OMP_FOR statement G depending
5557 on the boolean value of COMBINED_P. */
5558
5559inline void
5561{
5562 if (combined_p)
5563 g->subcode |= GF_OMP_FOR_COMBINED_INTO;
5564 else
5565 g->subcode &= ~GF_OMP_FOR_COMBINED_INTO;
5566}
5568
5569/* Return the clauses associated with the OMP_FOR statement GS. */
5570
5571inline tree
5573{
5574 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5575 return omp_for_stmt->clauses;
5576}
5577
5579/* Return a pointer to the clauses associated with the OMP_FOR statement
5580 GS. */
5581
5582inline tree *
5584{
5585 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5586 return &omp_for_stmt->clauses;
5587}
5588
5589
5590/* Set CLAUSES to be the list of clauses associated with the OMP_FOR statement
5591 GS. */
5592
5593inline void
5595{
5596 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5597 omp_for_stmt->clauses = clauses;
5598}
5599
5600
5601/* Get the collapse count of the OMP_FOR statement GS. */
5602
5603inline size_t
5605{
5606 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5607 return omp_for_stmt->collapse;
5608}
5609
5610
5611/* Return the condition code associated with the OMP_FOR statement GS. */
5613inline enum tree_code
5614gimple_omp_for_cond (const gimple *gs, size_t i)
5615{
5616 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5618 return omp_for_stmt->iter[i].cond;
5619}
5620
5621
5622/* Set COND to be the condition code for the OMP_FOR statement GS. */
5624inline void
5625gimple_omp_for_set_cond (gimple *gs, size_t i, enum tree_code cond)
5626{
5627 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5629 && i < omp_for_stmt->collapse);
5630 omp_for_stmt->iter[i].cond = cond;
5631}
5632
5633
5634/* Return the index variable for the OMP_FOR statement GS. */
5635
5636inline tree
5637gimple_omp_for_index (const gimple *gs, size_t i)
5638{
5639 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5641 return omp_for_stmt->iter[i].index;
5642}
5643
5644
5645/* Return a pointer to the index variable for the OMP_FOR statement GS. */
5646
5647inline tree *
5648gimple_omp_for_index_ptr (gimple *gs, size_t i)
5649{
5650 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5652 return &omp_for_stmt->iter[i].index;
5653}
5654
5655
5656/* Set INDEX to be the index variable for the OMP_FOR statement GS. */
5657
5658inline void
5659gimple_omp_for_set_index (gimple *gs, size_t i, tree index)
5660{
5661 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5663 omp_for_stmt->iter[i].index = index;
5664}
5665
5666
5667/* Return the initial value for the OMP_FOR statement GS. */
5668
5669inline tree
5670gimple_omp_for_initial (const gimple *gs, size_t i)
5671{
5672 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5674 return omp_for_stmt->iter[i].initial;
5675}
5676
5677
5678/* Return a pointer to the initial value for the OMP_FOR statement GS. */
5679
5680inline tree *
5682{
5683 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5685 return &omp_for_stmt->iter[i].initial;
5686}
5687
5688
5689/* Set INITIAL to be the initial value for the OMP_FOR statement GS. */
5690
5691inline void
5692gimple_omp_for_set_initial (gimple *gs, size_t i, tree initial)
5693{
5694 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5696 omp_for_stmt->iter[i].initial = initial;
5697}
5698
5699
5700/* Return the final value for the OMP_FOR statement GS. */
5701
5702inline tree
5703gimple_omp_for_final (const gimple *gs, size_t i)
5704{
5705 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5707 return omp_for_stmt->iter[i].final;
5708}
5709
5710
5711/* Return a pointer to the final value for the OMP_FOR statement GS. */
5712
5713inline tree *
5714gimple_omp_for_final_ptr (gimple *gs, size_t i)
5715{
5716 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5718 return &omp_for_stmt->iter[i].final;
5719}
5720
5721
5722/* Set FINAL to be the final value for the OMP_FOR statement GS. */
5724inline void
5725gimple_omp_for_set_final (gimple *gs, size_t i, tree final)
5726{
5727 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5729 omp_for_stmt->iter[i].final = final;
5730}
5731
5732
5733/* Return the increment value for the OMP_FOR statement GS. */
5735inline tree
5736gimple_omp_for_incr (const gimple *gs, size_t i)
5737{
5738 const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
5740 return omp_for_stmt->iter[i].incr;
5741}
5742
5743
5744/* Return a pointer to the increment value for the OMP_FOR statement GS. */
5745
5746inline tree *
5747gimple_omp_for_incr_ptr (gimple *gs, size_t i)
5748{
5749 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5751 return &omp_for_stmt->iter[i].incr;
5752}
5754
5755/* Set INCR to be the increment value for the OMP_FOR statement GS. */
5756
5757inline void
5758gimple_omp_for_set_incr (gimple *gs, size_t i, tree incr)
5759{
5760 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5762 omp_for_stmt->iter[i].incr = incr;
5764
5765
5766/* Return a pointer to the sequence of statements to execute before the OMP_FOR
5767 statement GS starts. */
5768
5769inline gimple_seq *
5770gimple_omp_for_pre_body_ptr (gimple *gs)
5771{
5772 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5773 return &omp_for_stmt->pre_body;
5774}
5775
5776
5777/* Return the sequence of statements to execute before the OMP_FOR
5778 statement GS starts. */
5779
5780inline gimple_seq
5781gimple_omp_for_pre_body (const gimple *gs)
5783 return *gimple_omp_for_pre_body_ptr (const_cast <gimple *> (gs));
5784}
5785
5786
5787/* Set PRE_BODY to be the sequence of statements to execute before the
5788 OMP_FOR statement GS starts. */
5789
5790inline void
5792{
5793 gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
5794 omp_for_stmt->pre_body = pre_body;
5795}
5796
5797/* Return the clauses associated with OMP_PARALLEL GS. */
5798
5799inline tree
5801{
5802 const gomp_parallel *omp_parallel_stmt = as_a <const gomp_parallel *> (gs);
5803 return omp_parallel_stmt->clauses;
5804}
5805
5806
5807/* Return a pointer to the clauses associated with OMP_PARALLEL_STMT. */
5808
5809inline tree *
5810gimple_omp_parallel_clauses_ptr (gomp_parallel *omp_parallel_stmt)
5812 return &omp_parallel_stmt->clauses;
5813}
5814
5815
5816/* Set CLAUSES to be the list of clauses associated with OMP_PARALLEL_STMT. */
5817
5818inline void
5819gimple_omp_parallel_set_clauses (gomp_parallel *omp_parallel_stmt,
5820 tree clauses)
5821{
5822 omp_parallel_stmt->clauses = clauses;
5823}
5824
5825
5826/* Return the child function used to hold the body of OMP_PARALLEL_STMT. */
5827
5828inline tree
5830{
5831 return omp_parallel_stmt->child_fn;
5832}
5833
5834/* Return a pointer to the child function used to hold the body of
5835 OMP_PARALLEL_STMT. */
5836
5837inline tree *
5839{
5840 return &omp_parallel_stmt->child_fn;
5841}
5842
5843
5844/* Set CHILD_FN to be the child function for OMP_PARALLEL_STMT. */
5845
5846inline void
5847gimple_omp_parallel_set_child_fn (gomp_parallel *omp_parallel_stmt,
5848 tree child_fn)
5849{
5850 omp_parallel_stmt->child_fn = child_fn;
5851}
5852
5853
5854/* Return the artificial argument used to send variables and values
5855 from the parent to the children threads in OMP_PARALLEL_STMT. */
5856
5857inline tree
5858gimple_omp_parallel_data_arg (const gomp_parallel *omp_parallel_stmt)
5860 return omp_parallel_stmt->data_arg;
5861}
5862
5863
5864/* Return a pointer to the data argument for OMP_PARALLEL_STMT. */
5865
5866inline tree *
5867gimple_omp_parallel_data_arg_ptr (gomp_parallel *omp_parallel_stmt)
5868{
5869 return &omp_parallel_stmt->data_arg;
5871
5872
5873/* Set DATA_ARG to be the data argument for OMP_PARALLEL_STMT. */
5874
5875inline void
5876gimple_omp_parallel_set_data_arg (gomp_parallel *omp_parallel_stmt,
5877 tree data_arg)
5878{
5879 omp_parallel_stmt->data_arg = data_arg;
5880}
5882/* Return the clauses associated with OMP_TASK GS. */
5883
5884inline tree
5886{
5887 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
5888 return omp_task_stmt->clauses;
5889}
5890
5891
5892/* Return a pointer to the clauses associated with OMP_TASK GS. */
5893
5894inline tree *
5896{
5897 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
5898 return &omp_task_stmt->clauses;
5899}
5900
5901
5902/* Set CLAUSES to be the list of clauses associated with OMP_TASK
5903 GS. */
5904
5905inline void
5907{
5908 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
5909 omp_task_stmt->clauses = clauses;
5910}
5911
5912
5913/* Return true if OMP task statement G has the
5914 GF_OMP_TASK_TASKLOOP flag set. */
5915
5916inline bool
5917gimple_omp_task_taskloop_p (const gimple *g)
5918{
5919 GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
5920 return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKLOOP) != 0;
5921}
5922
5923
5924/* Set the GF_OMP_TASK_TASKLOOP field in G depending on the boolean
5925 value of TASKLOOP_P. */
5926
5927inline void
5928gimple_omp_task_set_taskloop_p (gimple *g, bool taskloop_p)
5930 GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
5931 if (taskloop_p)
5932 g->subcode |= GF_OMP_TASK_TASKLOOP;
5933 else
5934 g->subcode &= ~GF_OMP_TASK_TASKLOOP;
5935}
5936
5937
5938/* Return true if OMP task statement G has the
5939 GF_OMP_TASK_TASKWAIT flag set. */
5940
5941inline bool
5943{
5944 GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
5945 return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKWAIT) != 0;
5946}
5947
5948
5949/* Set the GF_OMP_TASK_TASKWAIT field in G depending on the boolean
5950 value of TASKWAIT_P. */
5951
5952inline void
5953gimple_omp_task_set_taskwait_p (gimple *g, bool taskwait_p)
5954{
5955 GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
5956 if (taskwait_p)
5957 g->subcode |= GF_OMP_TASK_TASKWAIT;
5958 else
5959 g->subcode &= ~GF_OMP_TASK_TASKWAIT;
5961
5962
5963/* Return the child function used to hold the body of OMP_TASK GS. */
5964
5965inline tree
5966gimple_omp_task_child_fn (const gimple *gs)
5967{
5968 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
5969 return omp_task_stmt->child_fn;
5971
5972/* Return a pointer to the child function used to hold the body of
5973 OMP_TASK GS. */
5974
5975inline tree *
5977{
5978 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
5979 return &omp_task_stmt->child_fn;
5981
5982
5983/* Set CHILD_FN to be the child function for OMP_TASK GS. */
5984
5985inline void
5986gimple_omp_task_set_child_fn (gimple *gs, tree child_fn)
5987{
5988 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
5989 omp_task_stmt->child_fn = child_fn;
5990}
5992
5993/* Return the artificial argument used to send variables and values
5994 from the parent to the children threads in OMP_TASK GS. */
5995
5996inline tree
5998{
5999 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
6000 return omp_task_stmt->data_arg;
6001}
6002
6004/* Return a pointer to the data argument for OMP_TASK GS. */
6005
6006inline tree *
6008{
6009 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6010 return &omp_task_stmt->data_arg;
6011}
6012
6013
6014/* Set DATA_ARG to be the data argument for OMP_TASK GS. */
6015
6016inline void
6018{
6019 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6020 omp_task_stmt->data_arg = data_arg;
6021}
6022
6023
6024/* Return the clauses associated with OMP_TASK GS. */
6026inline tree
6028{
6029 const gimple_statement_omp_taskreg *omp_taskreg_stmt
6031 return omp_taskreg_stmt->clauses;
6032}
6033
6034
6035/* Return a pointer to the clauses associated with OMP_TASK GS. */
6042 return &omp_taskreg_stmt->clauses;
6043}
6044
6045
6046/* Set CLAUSES to be the list of clauses associated with OMP_TASK
6047 GS. */
6049inline void
6051{
6052 gimple_statement_omp_taskreg *omp_taskreg_stmt
6054 omp_taskreg_stmt->clauses = clauses;
6055}
6056
6057
6058/* Return the child function used to hold the body of OMP_TASK GS. */
6060inline tree
6062{
6063 const gimple_statement_omp_taskreg *omp_taskreg_stmt
6065 return omp_taskreg_stmt->child_fn;
6066}
6067
6068/* Return a pointer to the child function used to hold the body of
6069 OMP_TASK GS. */
6076 return &omp_taskreg_stmt->child_fn;
6077}
6078
6079
6080/* Set CHILD_FN to be the child function for OMP_TASK GS. */
6082inline void
6084{
6085 gimple_statement_omp_taskreg *omp_taskreg_stmt
6087 omp_taskreg_stmt->child_fn = child_fn;
6088}
6089
6090
6091/* Return the artificial argument used to send variables and values
6092 from the parent to the children threads in OMP_TASK GS. */
6093
6094inline tree
6096{
6097 const gimple_statement_omp_taskreg *omp_taskreg_stmt
6099 return omp_taskreg_stmt->data_arg;
6100}
6102
6103/* Return a pointer to the data argument for OMP_TASK GS. */
6104
6105inline tree *
6107{
6108 gimple_statement_omp_taskreg *omp_taskreg_stmt
6110 return &omp_taskreg_stmt->data_arg;
6112
6113
6114/* Set DATA_ARG to be the data argument for OMP_TASK GS. */
6115
6116inline void
6117gimple_omp_taskreg_set_data_arg (gimple *gs, tree data_arg)
6118{
6119 gimple_statement_omp_taskreg *omp_taskreg_stmt
6121 omp_taskreg_stmt->data_arg = data_arg;
6122}
6123
6124
6125/* Return the copy function used to hold the body of OMP_TASK GS. */
6126
6127inline tree
6128gimple_omp_task_copy_fn (const gimple *gs)
6129{
6130 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
6131 return omp_task_stmt->copy_fn;
6132}
6133
6134/* Return a pointer to the copy function used to hold the body of
6135 OMP_TASK GS. */
6136
6137inline tree *
6138gimple_omp_task_copy_fn_ptr (gimple *gs)
6139{
6140 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6141 return &omp_task_stmt->copy_fn;
6142}
6143
6144
6145/* Set CHILD_FN to be the copy function for OMP_TASK GS. */
6146
6147inline void
6149{
6150 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6151 omp_task_stmt->copy_fn = copy_fn;
6152}
6153
6154
6155/* Return size of the data block in bytes in OMP_TASK GS. */
6156
6157inline tree
6158gimple_omp_task_arg_size (const gimple *gs)
6159{
6160 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
6161 return omp_task_stmt->arg_size;
6162}
6163
6164
6165/* Return a pointer to the data block size for OMP_TASK GS. */
6166
6167inline tree *
6169{
6170 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6171 return &omp_task_stmt->arg_size;
6172}
6173
6174
6175/* Set ARG_SIZE to be the data block size for OMP_TASK GS. */
6176
6177inline void
6178gimple_omp_task_set_arg_size (gimple *gs, tree arg_size)
6179{
6180 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6181 omp_task_stmt->arg_size = arg_size;
6182}
6183
6184
6185/* Return align of the data block in bytes in OMP_TASK GS. */
6186
6187inline tree
6188gimple_omp_task_arg_align (const gimple *gs)
6189{
6190 const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
6191 return omp_task_stmt->arg_align;
6192}
6193
6194
6195/* Return a pointer to the data block align for OMP_TASK GS. */
6196
6197inline tree *
6199{
6200 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6201 return &omp_task_stmt->arg_align;
6202}
6203
6204
6205/* Set ARG_SIZE to be the data block align for OMP_TASK GS. */
6206
6207inline void
6208gimple_omp_task_set_arg_align (gimple *gs, tree arg_align)
6209{
6210 gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
6211 omp_task_stmt->arg_align = arg_align;
6212}
6213
6214
6215/* Return the clauses associated with OMP_SINGLE GS. */
6216
6217inline tree
6218gimple_omp_single_clauses (const gimple *gs)
6219{
6220 const gomp_single *omp_single_stmt = as_a <const gomp_single *> (gs);
6221 return omp_single_stmt->clauses;
6222}
6223
6224
6225/* Return a pointer to the clauses associated with OMP_SINGLE GS. */
6226
6227inline tree *
6229{
6230 gomp_single *omp_single_stmt = as_a <gomp_single *> (gs);
6231 return &omp_single_stmt->clauses;
6232}
6233
6234
6235/* Set CLAUSES to be the clauses associated with OMP_SINGLE_STMT. */
6236
6237inline void
6238gimple_omp_single_set_clauses (gomp_single *omp_single_stmt, tree clauses)
6239{
6240 omp_single_stmt->clauses = clauses;
6241}
6242
6243
6244/* Return the clauses associated with OMP_TARGET GS. */
6245
6246inline tree
6247gimple_omp_target_clauses (const gimple *gs)
6248{
6249 const gomp_target *omp_target_stmt = as_a <const gomp_target *> (gs);
6250 return omp_target_stmt->clauses;
6251}
6252
6253
6254/* Return a pointer to the clauses associated with OMP_TARGET GS. */
6255
6256inline tree *
6258{
6259 gomp_target *omp_target_stmt = as_a <gomp_target *> (gs);
6260 return &omp_target_stmt->clauses;
6261}
6262
6263
6264/* Set CLAUSES to be the clauses associated with OMP_TARGET_STMT. */
6265
6266inline void
6267gimple_omp_target_set_clauses (gomp_target *omp_target_stmt,
6268 tree clauses)
6269{
6270 omp_target_stmt->clauses = clauses;
6271}
6272
6273
6274/* Return the kind of the OMP_TARGET G. */
6275
6276inline int
6277gimple_omp_target_kind (const gimple *g)
6278{
6279 GIMPLE_CHECK (g, GIMPLE_OMP_TARGET);
6281}
6282
6283
6284/* Set the kind of the OMP_TARGET G. */
6285
6286inline void
6287gimple_omp_target_set_kind (gomp_target *g, int kind)
6289 g->subcode = (g->subcode & ~GF_OMP_TARGET_KIND_MASK)
6290 | (kind & GF_OMP_TARGET_KIND_MASK);
6291}
6292
6293
6294/* Return the child function used to hold the body of OMP_TARGET_STMT. */
6295
6296inline tree
6298{
6299 return omp_target_stmt->child_fn;
6300}
6301
6302/* Return a pointer to the child function used to hold the body of
6303 OMP_TARGET_STMT. */
6304
6305inline tree *
6306gimple_omp_target_child_fn_ptr (gomp_target *omp_target_stmt)
6308 return &omp_target_stmt->child_fn;
6309}
6310
6311
6312/* Set CHILD_FN to be the child function for OMP_TARGET_STMT. */
6313
6314inline void
6315gimple_omp_target_set_child_fn (gomp_target *omp_target_stmt,
6316 tree child_fn)
6318 omp_target_stmt->child_fn = child_fn;
6319}
6320
6321
6322/* Return the artificial argument used to send variables and values
6323 from the parent to the children threads in OMP_TARGET_STMT. */
6324
6325inline tree
6326gimple_omp_target_data_arg (const gomp_target *omp_target_stmt)
6328 return omp_target_stmt->data_arg;
6329}
6330
6331
6332/* Return a pointer to the data argument for OMP_TARGET GS. */
6333
6334inline tree *
6336{
6337 return &omp_target_stmt->data_arg;
6338}
6339
6340
6341/* Set DATA_ARG to be the data argument for OMP_TARGET_STMT. */
6342
6343inline void
6345 tree data_arg)
6346{
6347 omp_target_stmt->data_arg = data_arg;
6348}
6349
6350
6351/* Return the clauses associated with OMP_TEAMS GS. */
6352
6353inline tree
6355{
6356 const gomp_teams *omp_teams_stmt = as_a <const gomp_teams *> (gs);
6357 return omp_teams_stmt->clauses;
6358}
6359
6360
6361/* Return a pointer to the clauses associated with OMP_TEAMS GS. */
6362
6363inline tree *
6365{
6366 gomp_teams *omp_teams_stmt = as_a <gomp_teams *> (gs);
6367 return &omp_teams_stmt->clauses;
6368}
6369
6370
6371/* Set CLAUSES to be the clauses associated with OMP_TEAMS_STMT. */
6373inline void
6374gimple_omp_teams_set_clauses (gomp_teams *omp_teams_stmt, tree clauses)
6375{
6376 omp_teams_stmt->clauses = clauses;
6377}
6378
6379/* Return the child function used to hold the body of OMP_TEAMS_STMT. */
6380
6381inline tree
6382gimple_omp_teams_child_fn (const gomp_teams *omp_teams_stmt)
6383{
6384 return omp_teams_stmt->child_fn;
6385}
6386
6387/* Return a pointer to the child function used to hold the body of
6388 OMP_TEAMS_STMT. */
6390inline tree *
6392{
6393 return &omp_teams_stmt->child_fn;
6394}
6395
6396
6397/* Set CHILD_FN to be the child function for OMP_TEAMS_STMT. */
6398
6399inline void
6400gimple_omp_teams_set_child_fn (gomp_teams *omp_teams_stmt, tree child_fn)
6401{
6402 omp_teams_stmt->child_fn = child_fn;
6403}
6404
6405
6406/* Return the artificial argument used to send variables and values
6407 from the parent to the children threads in OMP_TEAMS_STMT. */
6409inline tree
6410gimple_omp_teams_data_arg (const gomp_teams *omp_teams_stmt)
6411{
6412 return omp_teams_stmt->data_arg;
6413}
6414
6415
6416/* Return a pointer to the data argument for OMP_TEAMS_STMT. */
6417
6418inline tree *
6420{
6421 return &omp_teams_stmt->data_arg;
6422}
6423
6424
6425/* Set DATA_ARG to be the data argument for OMP_TEAMS_STMT. */
6426
6427inline void
6428gimple_omp_teams_set_data_arg (gomp_teams *omp_teams_stmt, tree data_arg)
6430 omp_teams_stmt->data_arg = data_arg;
6431}
6432
6433/* Return the host flag of an OMP_TEAMS_STMT. */
6434
6435inline bool
6436gimple_omp_teams_host (const gomp_teams *omp_teams_stmt)
6437{
6438 return (gimple_omp_subcode (omp_teams_stmt) & GF_OMP_TEAMS_HOST) != 0;
6439}
6441/* Set host flag of an OMP_TEAMS_STMT to VALUE. */
6442
6443inline void
6444gimple_omp_teams_set_host (gomp_teams *omp_teams_stmt, bool value)
6445{
6446 if (value)
6447 omp_teams_stmt->subcode |= GF_OMP_TEAMS_HOST;
6448 else
6449 omp_teams_stmt->subcode &= ~GF_OMP_TEAMS_HOST;
6450}
6452/* Return the clauses associated with OMP_SECTIONS GS. */
6453
6454inline tree
6456{
6457 const gomp_sections *omp_sections_stmt = as_a <const gomp_sections *> (gs);
6458 return omp_sections_stmt->clauses;
6459}
6460
6461
6462/* Return a pointer to the clauses associated with OMP_SECTIONS GS. */
6463
6464inline tree *
6466{
6467 gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
6468 return &omp_sections_stmt->clauses;
6469}
6470
6471
6472/* Set CLAUSES to be the set of clauses associated with OMP_SECTIONS
6473 GS. */
6474
6475inline void
6477{
6478 gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
6479 omp_sections_stmt->clauses = clauses;
6480}
6482
6483/* Return the control variable associated with the GIMPLE_OMP_SECTIONS
6484 in GS. */
6485
6486inline tree
6488{
6489 const gomp_sections *omp_sections_stmt = as_a <const gomp_sections *> (gs);
6490 return omp_sections_stmt->control;
6491}
6492
6493
6494/* Return a pointer to the clauses associated with the GIMPLE_OMP_SECTIONS
6495 GS. */
6496
6497inline tree *
6500 gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
6501 return &omp_sections_stmt->control;
6502}
6503
6504
6505/* Set CONTROL to be the set of clauses associated with the
6506 GIMPLE_OMP_SECTIONS in GS. */
6507
6508inline void
6510{
6511 gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
6512 omp_sections_stmt->control = control;
6513}
6514
6515
6516/* Set the value being stored in an atomic store. */
6518inline void
6520{
6521 store_stmt->val = val;
6522}
6523
6524
6525/* Return the value being stored in an atomic store. */
6527inline tree
6529{
6530 return store_stmt->val;
6531}
6532
6533
6534/* Return a pointer to the value being stored in an atomic store. */
6536inline tree *
6538{
6539 return &store_stmt->val;
6540}
6541
6542
6543/* Set the LHS of an atomic load. */
6545inline void
6547{
6548 load_stmt->lhs = lhs;
6549}
6550
6551
6552/* Get the LHS of an atomic load. */
6554inline tree
6556{
6557 return load_stmt->lhs;
6558}
6559
6560
6561/* Return a pointer to the LHS of an atomic load. */
6562
6563inline tree *
6565{
6566 return &load_stmt->lhs;
6567}
6568
6570/* Set the RHS of an atomic load. */
6571
6572inline void
6574{
6575 load_stmt->rhs = rhs;
6576}
6577
6579/* Get the RHS of an atomic load. */
6580
6581inline tree
6583{
6584 return load_stmt->rhs;
6585}
6586
6588/* Return a pointer to the RHS of an atomic load. */
6589
6590inline tree *
6592{
6593 return &load_stmt->rhs;
6594}
6595
6597/* Get the definition of the control variable in a GIMPLE_OMP_CONTINUE. */
6598
6599inline tree
6601{
6602 return cont_stmt->control_def;
6603}
6605/* The same as above, but return the address. */
6606
6607inline tree *
6609{
6610 return &cont_stmt->control_def;
6611}
6612
6613/* Set the definition of the control variable in a GIMPLE_OMP_CONTINUE. */
6615inline void
6617{
6618 cont_stmt->control_def = def;
6619}
6620
6622/* Get the use of the control variable in a GIMPLE_OMP_CONTINUE. */
6623
6624inline tree
6626{
6627 return cont_stmt->control_use;
6628}
6629
6630
6631/* The same as above, but return the address. */
6632
6633inline tree *
6635{
6636 return &cont_stmt->control_use;
6637}
6638
6639
6640/* Set the use of the control variable in a GIMPLE_OMP_CONTINUE. */
6641
6642inline void
6644{
6645 cont_stmt->control_use = use;
6646}
6647
6648/* Return the guard associated with the GIMPLE_ASSUME statement GS. */
6649
6650inline tree
6655 return assume_stmt->guard;
6656}
6657
6658/* Set the guard associated with the GIMPLE_ASSUME statement GS. */
6660inline void
6662{
6664 assume_stmt->guard = guard;
6665}
6666
6671 return &assume_stmt->guard;
6672}
6674/* Return the address of the GIMPLE sequence contained in the GIMPLE_ASSUME
6675 statement GS. */
6676
6677inline gimple_seq *
6681 return &assume_stmt->body;
6682}
6683
6684/* Return the GIMPLE sequence contained in the GIMPLE_ASSUME statement GS. */
6686inline gimple_seq
6687gimple_assume_body (const gimple *gs)
6688{
6689 const gimple_statement_assume *assume_stmt
6691 return assume_stmt->body;
6692}
6693
6694/* Return a pointer to the body for the GIMPLE_TRANSACTION statement
6695 TRANSACTION_STMT. */
6696
6698gimple_transaction_body_ptr (gtransaction *transaction_stmt)
6699{
6700 return &transaction_stmt->body;
6701}
6702
6703/* Return the body for the GIMPLE_TRANSACTION statement TRANSACTION_STMT. */
6704
6706gimple_transaction_body (const gtransaction *transaction_stmt)
6707{
6708 return transaction_stmt->body;
6709}
6710
6711/* Return the label associated with a GIMPLE_TRANSACTION. */
6712
6713inline tree
6715{
6716 return transaction_stmt->label_norm;
6717}
6718
6719inline tree *
6720gimple_transaction_label_norm_ptr (gtransaction *transaction_stmt)
6721{
6722 return &transaction_stmt->label_norm;
6724
6725inline tree
6726gimple_transaction_label_uninst (const gtransaction *transaction_stmt)
6727{
6728 return transaction_stmt->label_uninst;
6730
6731inline tree *
6732gimple_transaction_label_uninst_ptr (gtransaction *transaction_stmt)
6733{
6734 return &transaction_stmt->label_uninst;
6736
6737inline tree
6738gimple_transaction_label_over (const gtransaction *transaction_stmt)
6739{
6740 return transaction_stmt->label_over;
6741}
6742
6743inline tree *
6745{
6746 return &transaction_stmt->label_over;
6747}
6748
6749/* Return the subcode associated with a GIMPLE_TRANSACTION. */
6750
6751inline unsigned int
6753{
6754 return transaction_stmt->subcode;
6755}
6756
6757/* Set BODY to be the body for the GIMPLE_TRANSACTION statement
6758 TRANSACTION_STMT. */
6759
6760inline void
6761gimple_transaction_set_body (gtransaction *transaction_stmt,
6762 gimple_seq body)
6763{
6764 transaction_stmt->body = body;
6765}
6766
6767/* Set the label associated with a GIMPLE_TRANSACTION. */
6768
6769inline void
6770gimple_transaction_set_label_norm (gtransaction *transaction_stmt, tree label)
6771{
6772 transaction_stmt->label_norm = label;
6773}
6774
6775inline void
6776gimple_transaction_set_label_uninst (gtransaction *transaction_stmt, tree label)
6778 transaction_stmt->label_uninst = label;
6779}
6780
6781inline void
6782gimple_transaction_set_label_over (gtransaction *transaction_stmt, tree label)
6783{
6784 transaction_stmt->label_over = label;
6785}
6786
6787/* Set the subcode associated with a GIMPLE_TRANSACTION. */
6788
6789inline void
6790gimple_transaction_set_subcode (gtransaction *transaction_stmt,
6791 unsigned int subcode)
6792{
6793 transaction_stmt->subcode = subcode;
6794}
6795
6796/* Return a pointer to the return value for GIMPLE_RETURN GS. */
6797
6798inline tree *
6799gimple_return_retval_ptr (greturn *gs)
6800{
6801 return &gs->op[0];
6802}
6804/* Return the return value for GIMPLE_RETURN GS. */
6805
6806inline tree
6807gimple_return_retval (const greturn *gs)
6808{
6809 return gs->op[0];
6810}
6811
6812
6813/* Set RETVAL to be the return value for GIMPLE_RETURN GS. */
6814
6815inline void
6816gimple_return_set_retval (greturn *gs, tree retval)
6817{
6818 gs->op[0] = retval;
6819}
6820
6821
6822/* Returns true when the gimple statement STMT is any of the OMP types. */
6823
6824#define CASE_GIMPLE_OMP \
6825 case GIMPLE_OMP_PARALLEL: \
6826 case GIMPLE_OMP_TASK: \
6827 case GIMPLE_OMP_FOR: \
6828 case GIMPLE_OMP_SECTIONS: \
6829 case GIMPLE_OMP_SECTIONS_SWITCH: \
6830 case GIMPLE_OMP_SINGLE: \
6831 case GIMPLE_OMP_TARGET: \
6832 case GIMPLE_OMP_TEAMS: \
6833 case GIMPLE_OMP_SCOPE: \
6834 case GIMPLE_OMP_DISPATCH: \
6835 case GIMPLE_OMP_INTEROP: \
6836 case GIMPLE_OMP_SECTION: \
6837 case GIMPLE_OMP_STRUCTURED_BLOCK: \
6838 case GIMPLE_OMP_MASTER: \
6839 case GIMPLE_OMP_MASKED: \
6840 case GIMPLE_OMP_TASKGROUP: \
6841 case GIMPLE_OMP_ORDERED: \
6842 case GIMPLE_OMP_CRITICAL: \
6843 case GIMPLE_OMP_SCAN: \
6844 case GIMPLE_OMP_RETURN: \
6845 case GIMPLE_OMP_ATOMIC_LOAD: \
6846 case GIMPLE_OMP_ATOMIC_STORE: \
6847 case GIMPLE_OMP_CONTINUE
6848
6849inline bool
6850is_gimple_omp (const gimple *stmt)
6851{
6852 switch (gimple_code (stmt))
6853 {
6855 return true;
6856 default:
6857 return false;
6858 }
6859}
6860
6861/* Return true if the OMP gimple statement STMT is any of the OpenACC types
6862 specifically. */
6863
6864inline bool
6865is_gimple_omp_oacc (const gimple *stmt)
6866{
6868 switch (gimple_code (stmt))
6869 {
6870 case GIMPLE_OMP_ATOMIC_LOAD:
6871 case GIMPLE_OMP_ATOMIC_STORE:
6872 case GIMPLE_OMP_CONTINUE:
6873 case GIMPLE_OMP_RETURN:
6874 /* Codes shared between OpenACC and OpenMP cannot be used to disambiguate
6875 the two. */
6876 gcc_unreachable ();
6877
6878 case GIMPLE_OMP_FOR:
6879 switch (gimple_omp_for_kind (stmt))
6880 {
6882 return true;
6883 default:
6884 return false;
6885 }
6886 case GIMPLE_OMP_TARGET:
6887 switch (gimple_omp_target_kind (stmt))
6888 {
6901 return true;
6902 default:
6903 return false;
6904 }
6905 default:
6906 return false;
6907 }
6908}
6909
6910
6911/* Return true if the OMP gimple statement STMT is offloaded. */
6912
6913inline bool
6917 switch (gimple_code (stmt))
6918 {
6919 case GIMPLE_OMP_TARGET:
6920 switch (gimple_omp_target_kind (stmt))
6921 {
6928 return true;
6929 default:
6930 return false;
6931 }
6932 default:
6933 return false;
6934 }
6935}
6936
6937
6938/* Returns TRUE if statement G is a GIMPLE_NOP. */
6939
6940inline bool
6941gimple_nop_p (const gimple *g)
6942{
6943 return gimple_code (g) == GIMPLE_NOP;
6945
6946
6947/* Return true if GS is a GIMPLE_RESX. */
6948
6949inline bool
6950is_gimple_resx (const gimple *gs)
6951{
6952 return gimple_code (gs) == GIMPLE_RESX;
6954
6955
6956/* Enum and arrays used for allocation stats. Keep in sync with
6957 gimple.cc:gimple_alloc_kind_names. */
6959{
6960 gimple_alloc_kind_assign, /* Assignments. */
6961 gimple_alloc_kind_phi, /* PHI nodes. */
6962 gimple_alloc_kind_cond, /* Conditionals. */
6963 gimple_alloc_kind_rest, /* Everything else. */
6965};
6966
6967extern uint64_t gimple_alloc_counts[];
6968extern uint64_t gimple_alloc_sizes[];
6969
6970/* Return the allocation kind for a given stmt CODE. */
6971inline enum gimple_alloc_kind
6973{
6974 switch (code)
6975 {
6976 case GIMPLE_ASSIGN:
6978 case GIMPLE_PHI:
6979 return gimple_alloc_kind_phi;
6980 case GIMPLE_COND:
6982 default:
6984 }
6985}
6986
6987/* Return true if a location should not be emitted for this statement
6988 by annotate_all_with_location. */
6989
6990inline bool
6992{
6993 return gimple_plf (g, GF_PLF_1);
6994}
6995
6996/* Mark statement G so a location will not be emitted by
6997 annotate_one_with_location. */
6998
6999inline void
7001{
7002 /* The PLF flags are initialized to 0 when a new tuple is created,
7003 so no need to initialize it anywhere. */
7004 gimple_set_plf (g, GF_PLF_1, true);
7005}
7006
7007#endif /* GCC_GIMPLE_H */
bool bb_in_transaction(basic_block bb)
Definition basic-block.h:505
#define EDGE_PRED(bb, i)
Definition basic-block.h:307
gimple * currently_expanding_gimple_stmt
Definition cfgexpand.cc:92
gcc::context * g
Definition context.cc:29
struct basic_block_def * basic_block
Definition coretypes.h:355
class edge_def * edge
Definition coretypes.h:352
gimple * gimple_seq
Definition coretypes.h:100
const class edge_def * const_edge
Definition coretypes.h:353
const struct basic_block_def * const_basic_block
Definition coretypes.h:356
const union tree_node * const_tree
Definition coretypes.h:98
#define GTY(x)
Definition coretypes.h:41
class bitmap_head * bitmap
Definition coretypes.h:51
union tree_node * tree
Definition coretypes.h:97
int alias_set_type
Definition coretypes.h:349
void copy_warning(location_t to, location_t from)
Definition diagnostic-spec.cc:206
volatile signed char sc
Definition fp-test.cc:68
static struct token T
Definition gengtype-parse.cc:45
built_in_function
Definition genmatch.cc:1009
combined_fn
Definition genmatch.cc:1020
internal_fn
Definition genmatch.cc:1015
tree_code
Definition genmatch.cc:1002
static struct filedep ** last
Definition genmddeps.cc:33
bool is_gimple_reg(tree t)
Definition gimple-expr.cc:790
tree gimple_call_addr_fndecl(const_tree fn)
Definition gimple-expr.h:164
bool gimple_assign_ssa_name_copy_p(gimple *gs)
Definition gimple.cc:1844
void annotate_all_with_location_after(gimple_seq seq, gimple_stmt_iterator gsi, location_t location)
Definition gimple.cc:1495
bool gimple_call_same_target_p(const gimple *c1, const gimple *c2)
Definition gimple.cc:1579
int gimple_call_retslot_flags(const gcall *stmt)
Definition gimple.cc:1707
gimple * gimple_alloc(enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
Definition gimple.cc:168
gbind * gimple_build_bind(tree vars, gimple_seq body, tree block)
Definition gimple.cc:635
bool gimple_call_builtin_p(const gimple *stmt)
Definition gimple.cc:2951
greturn * gimple_build_return(tree retval)
Definition gimple.cc:220
gdebug * gimple_build_debug_begin_stmt(tree block, location_t location MEM_STAT_DECL)
Definition gimple.cc:922
gimple * gimple_copy(gimple *stmt)
Definition gimple.cc:2041
gdebug * gimple_build_debug_bind(tree var, tree value, gimple *stmt MEM_STAT_DECL)
Definition gimple.cc:880
const unsigned char gimple_rhs_class_table[]
Definition gimple.cc:2527
size_t gimple_size(enum gimple_code code, unsigned num_ops)
Definition gimple.cc:142
gomp_for * gimple_build_omp_for(gimple_seq body, int kind, tree clauses, size_t collapse, gimple_seq pre_body)
Definition gimple.cc:988
const char *const gimple_code_name[]
Definition gimple.cc:96
bool gimple_assign_copy_p(gimple *gs)
Definition gimple.cc:1834
gswitch * gimple_build_switch(tree index, tree default_label, const vec< tree > &args)
Definition gimple.cc:850
gomp_single * gimple_build_omp_single(gimple_seq body, tree clauses)
Definition gimple.cc:1236
int gimple_call_flags(const gimple *stmt)
Definition gimple.cc:1596
gcall * gimple_build_call_from_tree(tree t, tree fnptrtype)
Definition gimple.cc:385
bool gimple_has_side_effects(const gimple *s)
Definition gimple.cc:2327
void gimple_set_lhs(gimple *stmt, tree lhs)
Definition gimple.cc:2022
bool gimple_inexpensive_call_p(gcall *stmt)
Definition gimple.cc:3523
gimple * gimple_build_omp_return(bool wait_p)
Definition gimple.cc:1172
uint64_t gimple_alloc_sizes[(int) gimple_alloc_kind_all]
Definition gimple.cc:110
gomp_parallel * gimple_build_omp_parallel(gimple_seq body, tree clauses, tree child_fn, tree data_arg)
Definition gimple.cc:1014
gimple * gimple_build_omp_masked(gimple_seq body, tree clauses)
Definition gimple.cc:1106
gasm * gimple_build_asm_vec(const char *string, vec< tree, va_gc > *inputs, vec< tree, va_gc > *outputs, vec< tree, va_gc > *clobbers, vec< tree, va_gc > *labels)
Definition gimple.cc:689
EXPORTED_CONST size_t gimple_ops_offset_[]
Definition gimple.cc:84
bool gimple_builtin_call_types_compatible_p(const gimple *stmt, tree fndecl)
Definition gimple.cc:2896
bool gimple_compare_field_offset(tree f1, tree f2)
Definition gimple.cc:2578
geh_dispatch * gimple_build_eh_dispatch(int region)
Definition gimple.cc:866
void gimple_assign_set_rhs_with_ops(gimple_stmt_iterator *gsi, enum tree_code code, tree op1, tree op2, tree op3)
Definition gimple.cc:1965
gassign * gimple_build_assign(tree lhs, tree rhs MEM_STAT_DECL)
Definition gimple.cc:473
uint64_t gimple_alloc_counts[(int) gimple_alloc_kind_all]
Definition gimple.cc:109
gimple * gimple_build_omp_master(gimple_seq body)
Definition gimple.cc:1092
gcall * gimple_call_copy_skip_args(gcall *stmt, bitmap args_to_skip)
Definition gimple.cc:2538
gimple * gimple_build_assume(tree guard, gimple_seq body)
Definition gimple.cc:1361
gimple * gimple_build_omp_sections_switch(void)
Definition gimple.cc:1223
gcond * gimple_build_cond_from_tree(tree cond, tree t_label, tree f_label)
Definition gimple.cc:576
gcall * gimple_build_call_internal(enum internal_fn fn, unsigned nargs,...)
Definition gimple.cc:346
ggoto * gimple_build_goto(tree dest)
Definition gimple.cc:612
gomp_target * gimple_build_omp_target(gimple_seq body, int kind, tree clauses)
Definition gimple.cc:1301
gomp_sections * gimple_build_omp_sections(gimple_seq body, tree clauses)
Definition gimple.cc:1208
void gimple_assign_set_rhs_from_tree(gimple_stmt_iterator *gsi, tree expr)
Definition gimple.cc:1948
gtry * gimple_build_try(gimple_seq eval, gimple_seq cleanup, enum gimple_try_flags kind)
Definition gimple.cc:782
geh_else * gimple_build_eh_else(gimple_seq n_body, gimple_seq e_body)
Definition gimple.cc:766
gomp_task * gimple_build_omp_task(gimple_seq body, tree clauses, tree child_fn, tree data_arg, tree copy_fn, tree arg_size, tree arg_align)
Definition gimple.cc:1039
bool nonfreeing_call_p(gimple *call)
Definition gimple.cc:3057
geh_mnt * gimple_build_eh_must_not_throw(tree decl)
Definition gimple.cc:752
gimple * gimple_build_omp_scope(gimple_seq body, tree clauses)
Definition gimple.cc:1255
gcall * gimple_build_call_valist(tree fn, unsigned nargs, va_list ap)
Definition gimple.cc:309
bool empty_body_p(gimple_seq body)
Definition gimple.cc:1541
int gimple_call_arg_flags(const gcall *stmt, unsigned arg)
Definition gimple.cc:1676
gomp_atomic_load * gimple_build_omp_atomic_load(tree lhs, tree rhs, enum omp_memory_order mo)
Definition gimple.cc:1334
gomp_teams * gimple_build_omp_teams(gimple_seq body, tree clauses)
Definition gimple.cc:1320
location_t gimple_or_expr_nonartificial_location(gimple *stmt, tree expr)
Definition gimple.cc:3537
gcatch * gimple_build_catch(tree types, gimple_seq handler)
Definition gimple.cc:723
void gimple_seq_add_stmt(gimple_seq *seq_p, gimple *gs)
Definition gimple.cc:1408
geh_filter * gimple_build_eh_filter(tree types, gimple_seq failure)
Definition gimple.cc:739
void gimple_cond_set_condition_from_tree(gcond *stmt, tree cond)
Definition gimple.cc:589
gdebug * gimple_build_debug_source_bind(tree var, tree value, gimple *stmt MEM_STAT_DECL)
Definition gimple.cc:900
gomp_continue * gimple_build_omp_continue(tree control_def, tree control_use)
Definition gimple.cc:1140
gimple * gimple_build_omp_section(gimple_seq body)
Definition gimple.cc:1062
void dump_gimple_statistics(void)
Definition gimple.cc:2446
bool gimple_could_trap_p_1(const gimple *s, bool include_mem, bool include_stores)
Definition gimple.cc:2363
gomp_scan * gimple_build_omp_scan(gimple_seq body, tree clauses)
Definition gimple.cc:1189
void gimple_seq_set_location(gimple_seq seq, location_t loc)
Definition gimple.cc:3481
glabel * gimple_build_label(tree label)
Definition gimple.cc:601
void dump_decl_set(FILE *file, bitmap set)
Definition gimple.cc:3033
EXPORTED_CONST enum gimple_statement_structure_enum gss_for_code_[]
Definition gimple.cc:102
bool gimple_assign_load_p(const gimple *gs)
Definition gimple.cc:1880
bool infer_nonnull_range(gimple *stmt, tree op)
Definition gimple.cc:3138
bool infer_nonnull_range_by_dereference(gimple *stmt, tree op)
Definition gimple.cc:3147
void gimple_seq_add_seq(gimple_seq *dst_p, gimple_seq src)
Definition gimple.cc:1440
gcall * gimple_build_call_vec(tree fn, const vec< tree > &args)
Definition gimple.cc:269
void gimple_init(gimple *g, enum gimple_code code, unsigned num_ops)
Definition gimple.cc:153
gimple * gimple_build_omp_structured_block(gimple_seq body)
Definition gimple.cc:1077
tree gimple_call_nonnull_arg(gcall *call)
Definition gimple.cc:1809
gcall * gimple_build_call_internal_vec(enum internal_fn fn, const vec< tree > &args)
Definition gimple.cc:366
tree gimple_get_lhs(const gimple *stmt)
Definition gimple.cc:2003
gcall * gimple_build_call(tree fn, unsigned nargs,...)
Definition gimple.cc:286
bool gimple_call_nonnull_result_p(gcall *call)
Definition gimple.cc:1783
void gimple_seq_discard(gimple_seq seq)
Definition gimple.cc:3490
bool gimple_asm_clobbers_memory_p(const gasm *stmt)
Definition gimple.cc:3012
gimple * gimple_build_wce(gimple_seq cleanup)
Definition gimple.cc:803
void gimple_set_bb(gimple *stmt, basic_block bb)
Definition gimple.cc:1900
bool gimple_could_trap_p(const gimple *s)
Definition gimple.cc:2428
void gimple_call_reset_alias_info(gcall *s)
Definition gimple.cc:233
gimple * gimple_build_omp_dispatch(gimple_seq body, tree clauses)
Definition gimple.cc:1271
gresx * gimple_build_resx(int region)
Definition gimple.cc:816
bool gimple_assign_rhs_could_trap_p(gimple *s)
Definition gimple.cc:2436
gimple * gimple_build_nop(void)
Definition gimple.cc:624
gdebug * gimple_build_debug_inline_entry(tree block, location_t location MEM_STAT_DECL)
Definition gimple.cc:943
gimple * gimple_build_omp_taskgroup(gimple_seq body, tree clauses)
Definition gimple.cc:1123
gomp_ordered * gimple_build_omp_ordered(gimple_seq body, tree clauses)
Definition gimple.cc:1156
int gimple_call_return_flags(const gcall *stmt)
Definition gimple.cc:1763
bool gimple_call_operator_delete_p(const gcall *stmt)
Definition gimple.cc:2939
int gimple_call_static_chain_flags(const gcall *stmt)
Definition gimple.cc:1735
bool infer_nonnull_range_by_attribute(gimple *stmt, tree op, tree *op2)
Definition gimple.cc:3171
gtransaction * gimple_build_transaction(gimple_seq body)
Definition gimple.cc:1373
void preprocess_case_label_vec_for_gimple(vec< tree > &labels, tree index_type, tree *default_casep)
Definition gimple.cc:3314
gcond * gimple_build_cond(enum tree_code pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
Definition gimple.cc:558
void annotate_all_with_location(gimple_seq stmt_p, location_t location)
Definition gimple.cc:1510
gimple_seq gimple_seq_copy(gimple_seq src)
Definition gimple.cc:1559
gomp_critical * gimple_build_omp_critical(gimple_seq body, tree name, tree clauses)
Definition gimple.cc:967
tree gimple_signed_type(tree type)
Definition gimple.cc:2815
void gimple_seq_add_stmt_without_update(gimple_seq *seq_p, gimple *gs)
Definition gimple.cc:1425
gcall * gimple_build_builtin_unreachable(location_t loc)
Definition gimple.cc:457
void sort_case_labels(vec< tree > &label_vec)
Definition gimple.cc:3289
gimple * gimple_build_omp_interop(tree clauses)
Definition gimple.cc:1286
gswitch * gimple_build_switch_nlabels(unsigned nlabels, tree index, tree default_label)
Definition gimple.cc:831
combined_fn gimple_call_combined_fn(const gimple *stmt)
Definition gimple.cc:2992
unsigned get_gimple_rhs_num_ops(enum tree_code code)
Definition gimple.cc:2480
bool gimple_assign_unary_nop_p(gimple *gs)
Definition gimple.cc:1867
void maybe_remove_unused_call_args(struct function *fn, gimple *stmt)
Definition gimple.cc:3508
bool nonbarrier_call_p(gimple *call)
Definition gimple.cc:3103
tree gimple_unsigned_type(tree type)
Definition gimple.cc:2806
void gimple_move_vops(gimple *new_stmt, gimple *old_stmt)
Definition gimple.cc:2311
bool gimple_ior_addresses_taken(bitmap addresses_taken, gimple *stmt)
Definition gimple.cc:2885
alias_set_type gimple_get_alias_set(tree t)
Definition gimple.cc:2825
gomp_atomic_store * gimple_build_omp_atomic_store(tree val, enum omp_memory_order mo)
Definition gimple.cc:1349
void gimple_seq_add_seq_without_update(gimple_seq *dst_p, gimple_seq src)
Definition gimple.cc:1455
gimple * gimple_build_omp_scope(gimple_seq, tree)
Definition gimple.cc:1255
void gimple_omp_target_set_clauses(gomp_target *omp_target_stmt, tree clauses)
Definition gimple.h:6220
gimple_alloc_kind
Definition gimple.h:6912
@ gimple_alloc_kind_assign
Definition gimple.h:6913
@ gimple_alloc_kind_phi
Definition gimple.h:6914
@ gimple_alloc_kind_rest
Definition gimple.h:6916
@ gimple_alloc_kind_all
Definition gimple.h:6917
@ gimple_alloc_kind_cond
Definition gimple.h:6915
gomp_for * gimple_build_omp_for(gimple_seq, int, tree, size_t, gimple_seq)
Definition gimple.cc:988
tree gimple_transaction_label_uninst(const gtransaction *transaction_stmt)
Definition gimple.h:6679
tree gimple_label_label(const glabel *gs)
Definition gimple.h:3892
tree * gimple_omp_task_arg_size_ptr(gimple *gs)
Definition gimple.h:6121
tree gimple_omp_task_arg_size(const gimple *gs)
Definition gimple.h:6111
tree * gimple_omp_scope_clauses_ptr(gimple *gs)
Definition gimple.h:5379
gimple * gimple_seq_node
Definition gimple.h:28
bool gimple_clobber_p(const gimple *s)
Definition gimple.h:2935
void gimple_omp_task_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5859
void gimple_cond_set_code(gcond *gs, enum tree_code code)
Definition gimple.h:3670
bool gimple_compare_field_offset(tree, tree)
Definition gimple.cc:2578
location_t gimple_location(const gimple *g)
Definition gimple.h:1891
tree gimple_omp_interop_clauses(const gimple *gs)
Definition gimple.h:5429
tree * gimple_catch_types_ptr(gcatch *catch_stmt)
Definition gimple.h:4220
tree gimple_omp_for_initial(const gimple *gs, size_t i)
Definition gimple.h:5623
gimple_seq gimple_eh_else_n_body(const geh_else *eh_else_stmt)
Definition gimple.h:4352
bool gimple_seq_singleton_p(gimple_seq seq)
Definition gimple.h:1969
gimple_seq * gimple_omp_for_pre_body_ptr(gimple *gs)
Definition gimple.h:5723
static void gimple_call_set_expected_throw(gcall *s, bool expected_throw_p)
Definition gimple.h:3527
tree * gimple_omp_task_child_fn_ptr(gimple *gs)
Definition gimple.h:5929
void gimple_omp_set_subcode(gimple *s, unsigned int subcode)
Definition gimple.h:2316
gimple_seq gimple_eh_filter_failure(const gimple *gs)
Definition gimple.h:4300
gimple_seq_node gimple_seq_last(gimple_seq s)
Definition gimple.h:1715
tree gimple_bind_block(const gbind *bind_stmt)
Definition gimple.h:4003
void gimple_omp_atomic_store_set_val(gomp_atomic_store *store_stmt, tree val)
Definition gimple.h:6472
tree * gimple_op_ptr(gimple *gs, unsigned i)
Definition gimple.h:2567
gimple * gimple_build_omp_taskgroup(gimple_seq, tree)
Definition gimple.cc:1123
void copy_warning(gimple *, const gimple *) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
Definition warning-control.cc:253
tree gimple_cond_lhs(const gcond *gs)
Definition gimple.h:3679
void gimple_transaction_set_label_norm(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6723
gcond * gimple_build_cond(enum tree_code, tree, tree, tree, tree)
Definition gimple.cc:558
tree gimple_omp_ordered_clauses(const gomp_ordered *ord_stmt)
Definition gimple.h:5241
tree gimple_block(const gimple *g)
Definition gimple.h:1872
void gimple_try_set_eval(gtry *try_stmt, gimple_seq eval)
Definition gimple.h:4474
tree * gimple_omp_taskreg_data_arg_ptr(gimple *gs)
Definition gimple.h:6059
gswitch * gimple_build_switch_nlabels(unsigned, tree, tree)
Definition gimple.cc:831
int gimple_call_static_chain_flags(const gcall *)
Definition gimple.cc:1735
tree * gimple_vdef_ptr(gimple *g)
Definition gimple.h:2214
void gimple_set_bb(gimple *, basic_block)
Definition gimple.cc:1900
bool gimple_omp_task_taskloop_p(const gimple *g)
Definition gimple.h:5870
void gimple_bind_append_vars(gbind *bind_stmt, tree vars)
Definition gimple.h:3950
void gimple_omp_task_set_taskwait_p(gimple *g, bool taskwait_p)
Definition gimple.h:5906
bool infer_nonnull_range_by_dereference(gimple *, tree)
Definition gimple.cc:3147
gresx * gimple_build_resx(int)
Definition gimple.cc:816
tree gimple_omp_task_child_fn(const gimple *gs)
Definition gimple.h:5919
gcall * gimple_build_call_internal(enum internal_fn, unsigned,...)
Definition gimple.cc:346
gimple_seq * gimple_eh_else_n_body_ptr(geh_else *eh_else_stmt)
Definition gimple.h:4346
void gimple_assign_set_rhs2(gassign *gs, tree rhs)
Definition gimple.h:2749
void gimple_assign_set_rhs_from_tree(gimple_stmt_iterator *, tree)
Definition gimple.cc:1948
void gimple_bind_add_seq(gbind *bind_stmt, gimple_seq seq)
Definition gimple.h:3993
bool gimple_call_nothrow_p(gcall *s)
Definition gimple.h:3517
tree * gimple_omp_teams_data_arg_ptr(gomp_teams *omp_teams_stmt)
Definition gimple.h:6372
tree gimple_omp_atomic_load_rhs(const gomp_atomic_load *load_stmt)
Definition gimple.h:6535
void gimple_omp_task_set_child_fn(gimple *gs, tree child_fn)
Definition gimple.h:5939
bool gimple_has_ops(const gimple *g)
Definition gimple.h:2106
int gimple_call_arg_flags(const gcall *, unsigned)
Definition gimple.cc:1676
tree gimple_op(const gimple *gs, unsigned i)
Definition gimple.h:2553
tree * gimple_ops(gimple *gs)
Definition gimple.h:2536
gimple * gimple_build_omp_return(bool)
Definition gimple.cc:1172
tree * gimple_omp_taskreg_child_fn_ptr(gimple *gs)
Definition gimple.h:6025
bool gimple_cond_true_p(const gcond *gs)
Definition gimple.h:3810
tree gimple_assume_guard(const gimple *gs)
Definition gimple.h:6604
void gimple_debug_bind_reset_value(gimple *dbg)
Definition gimple.h:5020
void gimple_omp_teams_set_data_arg(gomp_teams *omp_teams_stmt, tree data_arg)
Definition gimple.h:6381
bool gimple_debug_inline_entry_p(const gimple *s)
Definition gimple.h:5118
bool gimple_omp_atomic_need_value_p(const gimple *g)
Definition gimple.h:2449
void gimple_assign_set_rhs3(gassign *gs, tree rhs)
Definition gimple.h:2796
void gimple_cond_make_false(gcond *gs)
Definition gimple.h:3788
void gimple_omp_target_set_child_fn(gomp_target *omp_target_stmt, tree child_fn)
Definition gimple.h:6268
gimple * gimple_seq_first_stmt(gimple_seq s)
Definition gimple.h:1695
tree * gimple_omp_for_initial_ptr(gimple *gs, size_t i)
Definition gimple.h:5634
void gimple_omp_teams_set_host(gomp_teams *omp_teams_stmt, bool value)
Definition gimple.h:6397
tree * gimple_omp_sections_control_ptr(gimple *gs)
Definition gimple.h:6451
void gimple_omp_task_set_data_arg(gimple *gs, tree data_arg)
Definition gimple.h:5970
void gimple_bind_set_body(gbind *bind_stmt, gimple_seq seq)
Definition gimple.h:3975
tree gimple_eh_filter_types(const gimple *gs)
Definition gimple.h:4267
tree gimple_vdef(const gimple *g)
Definition gimple.h:2190
gimple * gimple_copy(gimple *)
Definition gimple.cc:2041
void gimple_asm_set_volatile(gasm *asm_stmt, bool volatile_p)
Definition gimple.h:4156
void gimple_omp_parallel_set_combined_p(gimple *g, bool combined_p)
Definition gimple.h:2435
bool gimple_store_p(const gimple *gs)
Definition gimple.h:2910
#define CASE_GIMPLE_OMP
Definition gimple.h:6777
bool gimple_has_lhs(const gimple *stmt)
Definition gimple.h:3641
bool gimple_assign_nontemporal_move_p(const gassign *gs)
Definition gimple.h:2833
void gimple_omp_for_set_pre_body(gimple *gs, gimple_seq pre_body)
Definition gimple.h:5744
void gimple_call_set_tail(gcall *s, bool tail_p)
Definition gimple.h:3358
tree * gimple_call_chain_ptr(gcall *call_stmt)
Definition gimple.h:3271
void gimple_phi_set_result(gphi *phi, tree result)
Definition gimple.h:4594
unsigned gimple_omp_subcode(const gimple *s)
Definition gimple.h:2306
gimple_code
Definition gimple.h:30
void gimple_debug_bind_set_value(gimple *dbg, tree value)
Definition gimple.h:5005
unsigned int gimple_stmt_max_uid(struct function *fn)
Definition gimple.h:1664
gcall * gimple_build_call(tree, unsigned,...)
Definition gimple.cc:286
void gimple_transaction_set_label_over(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6735
int gimple_call_retslot_flags(const gcall *)
Definition gimple.cc:1707
location_t gimple_phi_arg_location(const gphi *phi, size_t i)
Definition gimple.h:4712
tree * gimple_omp_sections_clauses_ptr(gimple *gs)
Definition gimple.h:6418
tree gimple_debug_source_bind_get_value(const gimple *dbg)
Definition gimple.h:5065
bool gimple_has_substatements(gimple *g)
Definition gimple.h:1824
gomp_critical * gimple_build_omp_critical(gimple_seq, tree, tree)
Definition gimple.cc:967
void gimple_omp_ordered_set_clauses(gomp_ordered *ord_stmt, tree clauses)
Definition gimple.h:5261
bool gimple_call_va_arg_pack_p(const gcall *s)
Definition gimple.h:3480
void gimple_asm_set_basic(gasm *asm_stmt, bool basic_p)
Definition gimple.h:4190
gcatch * gimple_build_catch(tree, gimple_seq)
Definition gimple.cc:723
void gimple_omp_for_set_cond(gimple *gs, size_t i, enum tree_code cond)
Definition gimple.h:5578
tree gimple_debug_source_bind_get_var(const gimple *dbg)
Definition gimple.h:5054
bool gimple_debug_nonbind_marker_p(const gimple *s)
Definition gimple.h:5129
void gimple_cond_set_rhs(gcond *gs, tree rhs)
Definition gimple.h:3739
unsigned int inc_gimple_stmt_max_uid(struct function *fn)
Definition gimple.h:1678
tree gimple_transaction_label_norm(const gtransaction *transaction_stmt)
Definition gimple.h:6667
tree * gimple_omp_scan_clauses_ptr(gomp_scan *scan_stmt)
Definition gimple.h:5280
void gimple_omp_taskgroup_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5322
gdebug * gimple_build_debug_bind(tree, tree, gimple *CXX_MEM_STAT_INFO)
bool gimple_omp_for_combined_p(const gimple *g)
Definition gimple.h:5478
tree * gimple_omp_atomic_store_val_ptr(gomp_atomic_store *store_stmt)
Definition gimple.h:6490
gcall * gimple_build_call_from_tree(tree, tree)
Definition gimple.cc:385
gomp_target * gimple_build_omp_target(gimple_seq, int, tree)
Definition gimple.cc:1301
gimple_seq phi_nodes(const_basic_block bb)
Definition gimple.h:4647
void gimple_set_visited(gimple *stmt, bool visited_p)
Definition gimple.h:2004
tree * gimple_omp_task_arg_align_ptr(gimple *gs)
Definition gimple.h:6151
gomp_task * gimple_build_omp_task(gimple_seq, tree, tree, tree, tree, tree, tree)
Definition gimple.cc:1039
gimple * gimple_build_omp_interop(tree)
Definition gimple.cc:1286
void annotate_all_with_location(gimple_seq, location_t)
Definition gimple.cc:1510
tree gimple_unsigned_type(tree)
Definition gimple.cc:2806
bool gimple_assign_rhs_could_trap_p(gimple *)
Definition gimple.cc:2436
enum tree_code gimple_omp_for_cond(const gimple *gs, size_t i)
Definition gimple.h:5567
bool gimple_call_from_thunk_p(gcall *s)
Definition gimple.h:3434
bool gimple_call_internal_unique_p(const gcall *gs)
Definition gimple.h:3062
gbind * gimple_seq_first_stmt_as_a_bind(gimple_seq s)
Definition gimple.h:1705
void gimple_assign_set_rhs_with_ops(gimple_stmt_iterator *, enum tree_code, tree, tree, tree)
Definition gimple.cc:1965
void maybe_remove_unused_call_args(struct function *, gimple *)
Definition gimple.cc:3508
tree gimple_omp_teams_child_fn(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6335
gimple_rhs_class
Definition gimple.h:113
@ GIMPLE_TERNARY_RHS
Definition gimple.h:115
@ GIMPLE_INVALID_RHS
Definition gimple.h:114
@ GIMPLE_SINGLE_RHS
Definition gimple.h:118
@ GIMPLE_UNARY_RHS
Definition gimple.h:117
@ GIMPLE_BINARY_RHS
Definition gimple.h:116
void gimple_bind_add_stmt(gbind *bind_stmt, gimple *stmt)
Definition gimple.h:3984
tree gimple_assign_rhs3(const gassign *gs)
Definition gimple.h:2766
void gimple_goto_set_dest(ggoto *gs, tree dest)
Definition gimple.h:3921
tree * gimple_arg_ptr(gimple *gs, unsigned int i)
Definition gimple.h:4779
bool gimple_asm_inline_p(const gasm *asm_stmt)
Definition gimple.h:4168
tree gimple_omp_target_clauses(const gimple *gs)
Definition gimple.h:6200
void gimple_omp_continue_set_control_use(gomp_continue *cont_stmt, tree use)
Definition gimple.h:6596
void gimple_transaction_set_body(gtransaction *transaction_stmt, gimple_seq body)
Definition gimple.h:6714
tree gimple_omp_scope_clauses(const gimple *gs)
Definition gimple.h:5367
tree gimple_omp_for_incr(const gimple *gs, size_t i)
Definition gimple.h:5689
size_t gimple_size(enum gimple_code code, unsigned num_ops=0)
Definition gimple.cc:142
combined_fn gimple_call_combined_fn(const gimple *)
Definition gimple.cc:2992
unsigned gimple_switch_num_labels(const gswitch *gs)
Definition gimple.h:4824
void gimple_wce_set_cleanup(gimple *gs, gimple_seq cleanup)
Definition gimple.h:4512
tree gimple_switch_index(const gswitch *gs)
Definition gimple.h:4847
gimple * gimple_build_omp_sections_switch(void)
Definition gimple.cc:1223
gimple * gimple_seq_last_stmt(gimple_seq s)
Definition gimple.h:1724
bool gimple_assign_cast_p(const gimple *s)
Definition gimple.h:2919
void dump_decl_set(FILE *, bitmap)
Definition gimple.cc:3033
void gimple_omp_target_set_kind(gomp_target *g, int kind)
Definition gimple.h:6240
void gimple_seq_add_seq_without_update(gimple_seq *, gimple_seq)
Definition gimple.cc:1455
unsigned gimple_asm_nlabels(const gasm *asm_stmt)
Definition gimple.h:4050
tree gimple_omp_parallel_data_arg(const gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5811
int get_lineno(const gimple *stmt)
Definition gimple.h:5141
ggoto * gimple_build_goto(tree dest)
Definition gimple.cc:612
void gimple_call_set_fntype(gcall *call_stmt, tree fntype)
Definition gimple.h:3140
void gimple_omp_task_set_arg_align(gimple *gs, tree arg_align)
Definition gimple.h:6161
unsigned gimple_call_num_args(const gcall *gs)
Definition gimple.h:3288
unsigned gimple_num_ops(const gimple *gs)
Definition gimple.h:2518
tree gimple_omp_parallel_clauses(const gimple *gs)
Definition gimple.h:5753
void gimple_switch_set_index(gswitch *gs, tree index)
Definition gimple.h:4865
gdebug * gimple_build_debug_source_bind(tree, tree, gimple *CXX_MEM_STAT_INFO)
void suppress_warning(gimple *, opt_code=all_warnings, bool=true) ATTRIBUTE_NONNULL(1)
Definition warning-control.cc:173
unsigned gimple_asm_noutputs(const gasm *asm_stmt)
Definition gimple.h:4033
bool gimple_debug_bind_p(const gimple *s)
Definition gimple.h:4951
bool gimple_omp_task_taskwait_p(const gimple *g)
Definition gimple.h:5895
void gimple_seq_set_last(gimple_seq *ps, gimple_seq_node last)
Definition gimple.h:1734
tree * gimple_omp_parallel_clauses_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5763
gf_mask
Definition gimple.h:133
@ GF_OMP_ATOMIC_NEED_VALUE
Definition gimple.h:196
@ GF_OMP_TARGET_KIND_ENTER_DATA
Definition gimple.h:165
@ GF_CALL_MUST_TAIL_CALL
Definition gimple.h:145
@ GF_OMP_TARGET_KIND_OACC_SERIAL
Definition gimple.h:169
@ GF_CALL_INTERNAL
Definition gimple.h:143
@ GF_OMP_ATOMIC_MEMORY_ORDER
Definition gimple.h:195
@ GF_CALL_NOTHROW
Definition gimple.h:141
@ GF_OMP_RETURN_NOWAIT
Definition gimple.h:191
@ GF_OMP_TARGET_KIND_OACC_DATA_KERNELS
Definition gimple.h:184
@ GF_CALL_CTRL_ALTERING
Definition gimple.h:144
@ GF_OMP_TEAMS_HOST
Definition gimple.h:185
@ GF_CALL_VA_ARG_PACK
Definition gimple.h:140
@ GF_OMP_PARALLEL_COMBINED
Definition gimple.h:150
@ GF_OMP_SECTION_LAST
Definition gimple.h:193
@ GF_OMP_TARGET_KIND_OACC_DATA
Definition gimple.h:170
@ GF_CALL_RETURN_SLOT_OPT
Definition gimple.h:138
@ GF_OMP_TARGET_KIND_EXIT_DATA
Definition gimple.h:166
@ GF_OMP_TARGET_KIND_DATA
Definition gimple.h:163
@ GF_OMP_TARGET_KIND_OACC_EXIT_DATA
Definition gimple.h:173
@ GF_PREDICT_TAKEN
Definition gimple.h:198
@ GF_CALL_TAILCALL
Definition gimple.h:139
@ GF_OMP_FOR_KIND_SIMD
Definition gimple.h:158
@ GF_ASM_BASIC
Definition gimple.h:134
@ GF_OMP_TASK_TASKWAIT
Definition gimple.h:152
@ GF_OMP_TARGET_KIND_OACC_UPDATE
Definition gimple.h:171
@ GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_PARALLELIZED
Definition gimple.h:178
@ GF_OMP_TARGET_KIND_OACC_KERNELS
Definition gimple.h:168
@ GF_OMP_TARGET_KIND_MASK
Definition gimple.h:161
@ GF_OMP_FOR_KIND_TASKLOOP
Definition gimple.h:156
@ GF_CALL_BY_DESCRIPTOR
Definition gimple.h:146
@ GF_CALL_FROM_THUNK
Definition gimple.h:137
@ GF_OMP_ORDERED_STANDALONE
Definition gimple.h:194
@ GF_OMP_TASK_TASKLOOP
Definition gimple.h:151
@ GF_OMP_FOR_COMBINED_INTO
Definition gimple.h:160
@ GF_OMP_ATOMIC_WEAK
Definition gimple.h:197
@ GF_OMP_TARGET_KIND_UPDATE
Definition gimple.h:164
@ GF_OMP_TARGET_KIND_REGION
Definition gimple.h:162
@ GF_ASM_INLINE
Definition gimple.h:136
@ GF_CALL_XTHROW
Definition gimple.h:149
@ GF_OMP_TARGET_KIND_OACC_HOST_DATA
Definition gimple.h:175
@ GF_CALL_FROM_NEW_OR_DELETE
Definition gimple.h:148
@ GF_OMP_FOR_KIND_MASK
Definition gimple.h:153
@ GF_OMP_FOR_COMBINED
Definition gimple.h:159
@ GF_OMP_FOR_KIND_OACC_LOOP
Definition gimple.h:157
@ GF_OMP_TARGET_KIND_OACC_DECLARE
Definition gimple.h:174
@ GF_ASM_VOLATILE
Definition gimple.h:135
@ GF_CALL_ALLOCA_FOR_VAR
Definition gimple.h:142
@ GF_OMP_FOR_KIND_DISTRIBUTE
Definition gimple.h:155
@ GF_OMP_TARGET_KIND_OACC_PARALLEL
Definition gimple.h:167
@ GF_OMP_TARGET_KIND_OACC_ENTER_DATA
Definition gimple.h:172
@ GF_OMP_FOR_KIND_FOR
Definition gimple.h:154
@ GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_GANG_SINGLE
Definition gimple.h:181
@ GF_CALL_NOCF_CHECK
Definition gimple.h:147
enum gimple_statement_structure_enum gss_for_code(enum gimple_code code)
Definition gimple.h:1804
bool gimple_could_trap_p(const gimple *)
Definition gimple.cc:2428
tree * gimple_omp_for_index_ptr(gimple *gs, size_t i)
Definition gimple.h:5601
void gimple_omp_return_set_nowait(gimple *s)
Definition gimple.h:2327
void gimple_call_set_from_new_or_delete(gcall *s, bool from_new_or_delete_p)
Definition gimple.h:3444
tree gimple_omp_for_final(const gimple *gs, size_t i)
Definition gimple.h:5656
tree * gimple_omp_task_copy_fn_ptr(gimple *gs)
Definition gimple.h:6091
tree * gimple_omp_teams_child_fn_ptr(gomp_teams *omp_teams_stmt)
Definition gimple.h:6344
tree * gimple_omp_for_clauses_ptr(gimple *gs)
Definition gimple.h:5536
void gimple_init_singleton(gimple *g)
Definition gimple.h:2096
gimple_seq gimple_eh_else_e_body(const geh_else *eh_else_stmt)
Definition gimple.h:4364
bool gimple_call_nonnull_result_p(gcall *)
Definition gimple.cc:1783
void gimple_omp_task_set_taskloop_p(gimple *g, bool taskloop_p)
Definition gimple.h:5881
void gimple_omp_for_set_index(gimple *gs, size_t i, tree index)
Definition gimple.h:5612
void gimple_catch_set_types(gcatch *catch_stmt, tree t)
Definition gimple.h:4249
gimple_seq gimple_try_cleanup(const gimple *gs)
Definition gimple.h:4451
gimple_seq * gimple_catch_handler_ptr(gcatch *catch_stmt)
Definition gimple.h:4230
T GIMPLE_CHECK2(gimple *gs)
Definition gimple.h:98
void gimple_set_use_ops(gimple *g, struct use_optype_d *use)
Definition gimple.h:2167
gcall * gimple_build_builtin_unreachable(location_t)
Definition gimple.cc:457
tree * gimple_assign_rhs1_ptr(gassign *gs)
Definition gimple.h:2680
tree * gimple_debug_source_bind_get_value_ptr(gimple *dbg)
Definition gimple.h:5076
bool gimple_call_ctrl_altering_p(const gcall *gs)
Definition gimple.h:3107
void gimple_omp_sections_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:6429
tree * gimple_omp_return_lhs_ptr(gimple *g)
Definition gimple.h:2370
gcall * gimple_build_call_internal_vec(enum internal_fn, const vec< tree > &)
Definition gimple.cc:366
tree * gimple_omp_parallel_data_arg_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5820
void gimple_cond_set_condition_from_tree(gcond *, tree)
Definition gimple.cc:589
void gimple_eh_else_set_e_body(geh_else *eh_else_stmt, gimple_seq seq)
Definition gimple.h:4376
tree * gimple_omp_atomic_load_rhs_ptr(gomp_atomic_load *load_stmt)
Definition gimple.h:6544
gimple_seq * gimple_wce_cleanup_ptr(gimple *gs)
Definition gimple.h:4493
bool gimple_assign_unary_nop_p(gimple *)
Definition gimple.cc:1867
void gimple_eh_dispatch_set_region(geh_dispatch *eh_dispatch_stmt, int region)
Definition gimple.h:4816
tree gimple_phi_result(const gphi *gs)
Definition gimple.h:4564
void gimple_assign_set_lhs(gassign *gs, tree lhs)
Definition gimple.h:2644
void gimple_asm_set_output_op(gasm *asm_stmt, unsigned index, tree out_op)
Definition gimple.h:4087
bool gimple_ior_addresses_taken(bitmap, gimple *)
Definition gimple.cc:2885
bool nonbarrier_call_p(gimple *)
Definition gimple.cc:3103
location_t gimple_location_safe(const gimple *g)
Definition gimple.h:1900
tree gimple_debug_bind_get_value(const gimple *dbg)
Definition gimple.h:4973
#define GIMPLE_CHECK(GS, CODE)
Definition gimple.h:95
gimple_seq * gimple_assume_body_ptr(gimple *gs)
Definition gimple.h:6631
tree * gimple_assume_guard_ptr(gimple *gs)
Definition gimple.h:6621
enum gimple_rhs_class gimple_assign_rhs_class(const gimple *gs)
Definition gimple.h:2889
bool stmt_can_terminate_bb_p(gimple *)
Definition tree-cfg.cc:8833
tree gimple_omp_masked_clauses(const gimple *gs)
Definition gimple.h:5333
void gimple_omp_for_set_combined_into_p(gomp_for *g, bool combined_p)
Definition gimple.h:5513
unsigned gimple_asm_ninputs(const gasm *asm_stmt)
Definition gimple.h:4024
void gimple_omp_interop_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5448
void gimple_omp_critical_set_name(gomp_critical *crit_stmt, tree name)
Definition gimple.h:5203
void gimple_try_set_catch_is_cleanup(gtry *g, bool catch_is_cleanup)
Definition gimple.h:4460
void gimple_omp_taskreg_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:6003
gimple_seq * gimple_omp_body_ptr(gimple *gs)
Definition gimple.h:5158
bool gimple_seq_empty_p(gimple_seq s)
Definition gimple.h:1752
tree gimple_cond_false_label(const gcond *gs)
Definition gimple.h:3779
bool gimple_omp_teams_host(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6389
struct use_optype_d * gimple_use_ops(const gimple *g)
Definition gimple.h:2154
location_t gimple_or_expr_nonartificial_location(gimple *, tree)
Definition gimple.cc:3537
bool gimple_call_alloca_for_var_p(gcall *s)
Definition gimple.h:3561
bool gimple_do_not_emit_location_p(gimple *g)
Definition gimple.h:6944
void set_gimple_stmt_max_uid(struct function *fn, unsigned int maxid)
Definition gimple.h:1671
tree * gimple_cond_lhs_ptr(gcond *gs)
Definition gimple.h:3695
tree gimple_omp_continue_control_use(const gomp_continue *cont_stmt)
Definition gimple.h:6578
tree gimple_omp_teams_clauses(const gimple *gs)
Definition gimple.h:6307
gimple_seq bb_seq(const_basic_block bb)
Definition gimple.h:1771
void gimple_omp_continue_set_control_def(gomp_continue *cont_stmt, tree def)
Definition gimple.h:6569
void annotate_all_with_location_after(gimple_seq, gimple_stmt_iterator, location_t)
Definition gimple.cc:1495
bool is_gimple_debug(const gimple *gs)
Definition gimple.h:4915
void gimple_omp_atomic_load_set_rhs(gomp_atomic_load *load_stmt, tree rhs)
Definition gimple.h:6526
void gimple_eh_else_set_n_body(geh_else *eh_else_stmt, gimple_seq seq)
Definition gimple.h:4370
tree * gimple_omp_target_child_fn_ptr(gomp_target *omp_target_stmt)
Definition gimple.h:6259
tree * gimple_omp_taskreg_clauses_ptr(gimple *gs)
Definition gimple.h:5991
gswitch * gimple_build_switch(tree, tree, const vec< tree > &)
Definition gimple.cc:850
bool gimple_call_same_target_p(const gimple *, const gimple *)
Definition gimple.cc:1579
void gimple_assume_set_guard(gimple *gs, tree guard)
Definition gimple.h:6614
void dump_gimple_statistics(void)
Definition gimple.cc:2446
bool gimple_asm_basic_p(const gasm *asm_stmt)
Definition gimple.h:4202
tree gimple_omp_atomic_store_val(const gomp_atomic_store *store_stmt)
Definition gimple.h:6481
bool gimple_call_return_slot_opt_p(const gcall *s)
Definition gimple.h:3412
void gimple_debug_source_bind_set_var(gimple *dbg, tree var)
Definition gimple.h:5086
tree * gimple_switch_index_ptr(gswitch *gs)
Definition gimple.h:4856
void gimple_omp_sections_set_control(gimple *gs, tree control)
Definition gimple.h:6462
gimple * gimple_build_omp_structured_block(gimple_seq)
Definition gimple.cc:1077
unsigned gimple_uid(const gimple *g)
Definition gimple.h:2087
bool gimple_omp_for_combined_into_p(const gimple *g)
Definition gimple.h:5502
bool gimple_references_memory_p(gimple *stmt)
Definition gimple.h:2297
tree gimple_omp_sections_clauses(const gimple *gs)
Definition gimple.h:6408
void gimple_call_set_chain(gcall *call_stmt, tree chain)
Definition gimple.h:3279
tree gimple_catch_types(const gcatch *catch_stmt)
Definition gimple.h:4211
tree * gimple_debug_bind_get_value_ptr(gimple *dbg)
Definition gimple.h:4984
tree * gimple_omp_target_clauses_ptr(gimple *gs)
Definition gimple.h:6210
geh_mnt * gimple_build_eh_must_not_throw(tree)
Definition gimple.cc:752
void gimple_set_block(gimple *g, tree block)
Definition gimple.h:1883
void gimple_omp_atomic_set_need_value(gimple *g)
Definition gimple.h:2460
void gimple_call_set_alloca_for_var(gcall *s, bool for_var)
Definition gimple.h:3550
void gimple_omp_for_set_combined_p(gomp_for *g, bool combined_p)
Definition gimple.h:5489
tree * gimple_assign_rhs3_ptr(gimple *gs)
Definition gimple.h:2785
gimple_debug_subcode
Definition gimple.h:203
@ GIMPLE_DEBUG_INLINE_ENTRY
Definition gimple.h:207
@ GIMPLE_DEBUG_BEGIN_STMT
Definition gimple.h:206
@ GIMPLE_DEBUG_BIND
Definition gimple.h:204
@ GIMPLE_DEBUG_SOURCE_BIND
Definition gimple.h:205
tree * gimple_omp_ordered_clauses_ptr(gomp_ordered *ord_stmt)
Definition gimple.h:5251
bool is_gimple_resx(const gimple *gs)
Definition gimple.h:6903
tree gimple_omp_continue_control_def(const gomp_continue *cont_stmt)
Definition gimple.h:6553
gomp_single * gimple_build_omp_single(gimple_seq, tree)
Definition gimple.cc:1236
tree gimple_omp_task_data_arg(const gimple *gs)
Definition gimple.h:5950
gimple_seq gimple_assume_body(const gimple *gs)
Definition gimple.h:6640
enum tree_code gimple_assign_rhs_code(const gassign *gs)
Definition gimple.h:2853
void gimple_catch_set_handler(gcatch *catch_stmt, gimple_seq handler)
Definition gimple.h:4258
tree gimple_call_fntype(const gcall *gs)
Definition gimple.h:3123
tree gimple_omp_task_arg_align(const gimple *gs)
Definition gimple.h:6141
bool gimple_debug_begin_stmt_p(const gimple *s)
Definition gimple.h:5107
bool warning_suppressed_p(const gimple *, opt_code=all_warnings) ATTRIBUTE_NONNULL(1)
Definition warning-control.cc:138
tree gimple_call_fn(const gcall *gs)
Definition gimple.h:3151
edge gimple_phi_arg_edge(const gphi *phi, size_t i)
Definition gimple.h:4704
void gimple_omp_masked_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5356
bool is_gimple_assign(const gimple *gs)
Definition gimple.h:2595
enum internal_fn gimple_call_internal_fn(const gcall *gs)
Definition gimple.h:3046
tree * gimple_return_retval_ptr(greturn *gs)
Definition gimple.h:6752
bool gimple_could_trap_p_1(const gimple *, bool, bool)
Definition gimple.cc:2363
gimple * gimple_seq_first_nondebug_stmt(gimple_seq s)
Definition gimple.h:4924
tree gimple_asm_label_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4118
void gimple_call_copy_flags(gcall *dest_call, gcall *orig_call)
Definition gimple.h:3596
void gimple_set_vuse(gimple *g, tree vuse)
Definition gimple.h:2226
glabel * gimple_build_label(tree label)
Definition gimple.cc:601
bool gimple_has_location(const gimple *g)
Definition gimple.h:1928
tree gimple_asm_clobber_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4098
tree gimple_signed_type(tree)
Definition gimple.cc:2815
gimple_seq gimple_seq_copy(gimple_seq)
Definition gimple.cc:1559
void gimple_omp_for_set_incr(gimple *gs, size_t i, tree incr)
Definition gimple.h:5711
gimple_seq * gimple_try_eval_ptr(gimple *gs)
Definition gimple.h:4420
gcall * gimple_build_call_valist(tree, unsigned, va_list)
Definition gimple.cc:309
void gimple_transaction_set_subcode(gtransaction *transaction_stmt, unsigned int subcode)
Definition gimple.h:6743
tree * gimple_omp_taskgroup_clauses_ptr(gimple *gs)
Definition gimple.h:5311
tree gimple_omp_return_lhs(const gimple *g)
Definition gimple.h:2359
tree gimple_debug_bind_get_var(const gimple *dbg)
Definition gimple.h:4962
int gimple_omp_for_kind(const gimple *g)
Definition gimple.h:5457
void gimple_call_set_nothrow(gcall *s, bool nothrow_p)
Definition gimple.h:3506
void gimple_call_set_lhs(gcall *gs, tree lhs)
Definition gimple.h:2993
gimple_seq * gimple_eh_else_e_body_ptr(geh_else *eh_else_stmt)
Definition gimple.h:4358
tree * gimple_assign_lhs_ptr(gassign *gs)
Definition gimple.h:2628
bool gimple_wce_cleanup_eh_only(const gimple *gs)
Definition gimple.h:4522
greturn * gimple_build_return(tree)
Definition gimple.cc:220
tree * gimple_omp_continue_control_def_ptr(gomp_continue *cont_stmt)
Definition gimple.h:6561
void gimple_bind_set_vars(gbind *bind_stmt, tree vars)
Definition gimple.h:3940
enum tree_code gimple_cond_code(const gcond *gs)
Definition gimple.h:3654
tree gimple_call_return_type(const gcall *gs)
Definition gimple.h:3239
bool gimple_call_by_descriptor_p(gcall *s)
Definition gimple.h:3588
bool gimple_call_operator_delete_p(const gcall *)
Definition gimple.cc:2939
gtry * gimple_build_try(gimple_seq, gimple_seq, enum gimple_try_flags)
Definition gimple.cc:782
void gimple_call_set_from_thunk(gcall *s, bool from_thunk_p)
Definition gimple.h:3422
int gimple_omp_target_kind(const gimple *g)
Definition gimple.h:6230
tree * gimple_cond_rhs_ptr(gcond *gs)
Definition gimple.h:3729
enum gimple_rhs_class get_gimple_rhs_class(enum tree_code code)
Definition gimple.h:2604
bool gimple_in_transaction(const gimple *stmt)
Definition gimple.h:2289
bool is_gimple_call(const gimple *gs)
Definition gimple.h:2953
void gimple_assign_set_rhs1(gassign *gs, tree rhs)
Definition gimple.h:2695
void gimple_asm_set_inline(gasm *asm_stmt, bool inline_p)
Definition gimple.h:4177
size_t gimple_omp_for_collapse(const gimple *gs)
Definition gimple.h:5557
tree * gimple_omp_task_data_arg_ptr(gimple *gs)
Definition gimple.h:5960
bool gimple_cond_false_p(const gcond *gs)
Definition gimple.h:3835
static bool gimple_call_expected_throw_p(gcall *s)
Definition gimple.h:3539
void gimple_init(gimple *g, enum gimple_code code, unsigned num_ops)
Definition gimple.cc:153
tree gimple_switch_default_label(const gswitch *gs)
Definition gimple.h:4896
void gimple_call_set_fn(gcall *gs, tree fn)
Definition gimple.h:3183
location_t gimple_nonartificial_location(const gimple *g)
Definition gimple.h:1937
bool gimple_assign_ssa_name_copy_p(gimple *)
Definition gimple.cc:1844
void gimple_resx_set_region(gresx *resx_stmt, int region)
Definition gimple.h:4799
bool infer_nonnull_range_by_attribute(gimple *, tree, tree *=NULL)
Definition gimple.cc:3171
void gimple_call_set_arg(gcall *gs, unsigned index, tree arg)
Definition gimple.h:3339
tree gimple_return_retval(const greturn *gs)
Definition gimple.h:6760
void gimple_omp_parallel_set_child_fn(gomp_parallel *omp_parallel_stmt, tree child_fn)
Definition gimple.h:5800
gdebug * gimple_build_debug_begin_stmt(tree, location_t CXX_MEM_STAT_INFO)
location_t gimple_phi_arg_location_from_edge(gphi *phi, edge e)
Definition gimple.h:4720
void gimple_phi_set_arg(gphi *phi, unsigned index, struct phi_arg_d *phiarg)
Definition gimple.h:4637
gcond * gimple_build_cond_from_tree(tree, tree, tree)
Definition gimple.cc:576
location_t * gimple_phi_arg_location_ptr(gphi *phi, size_t i)
Definition gimple.h:4736
void set_bb_seq(basic_block bb, gimple_seq seq)
Definition gimple.h:1785
bool gimple_call_noreturn_p(const gcall *s)
Definition gimple.h:3489
enum gimple_statement_structure_enum gimple_statement_structure(gimple *gs)
Definition gimple.h:1814
void gimple_omp_section_set_last(gimple *g)
Definition gimple.h:2392
bool gimple_call_from_new_or_delete(const gcall *s)
Definition gimple.h:3457
bool gimple_has_mem_ops(const gimple *g)
Definition gimple.h:2130
gimple_seq gimple_transaction_body(const gtransaction *transaction_stmt)
Definition gimple.h:6659
gimple * gimple_seq_last_nondebug_stmt(gimple_seq s)
Definition gimple.h:4936
bool gimple_omp_section_last_p(const gimple *g)
Definition gimple.h:2382
tree * gimple_transaction_label_uninst_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6685
tree gimple_goto_dest(const gimple *gs)
Definition gimple.h:3911
void gimple_switch_set_default_label(gswitch *gs, tree label)
Definition gimple.h:4906
tree * gimple_vuse_ptr(gimple *g)
Definition gimple.h:2202
tree * gimple_phi_arg_def_ptr(gphi *phi, size_t index)
Definition gimple.h:4696
tree * gimple_eh_filter_types_ptr(gimple *gs)
Definition gimple.h:4278
tree gimple_assign_rhs1(const gassign *gs)
Definition gimple.h:2663
void gimple_call_reset_alias_info(gcall *)
Definition gimple.cc:233
#define GIMPLE_DEBUG_BIND_NOVALUE
Definition gimple.h:5014
bool gimple_modified_p(const gimple *g)
Definition gimple.h:2248
tree gimple_omp_sections_control(const gimple *gs)
Definition gimple.h:6440
tree gimple_omp_task_clauses(const gimple *gs)
Definition gimple.h:5838
void gimple_transaction_set_label_uninst(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6729
bool gimple_omp_ordered_standalone_p(const gimple *g)
Definition gimple.h:2403
tree gimple_eh_must_not_throw_fndecl(const geh_mnt *eh_mnt_stmt)
Definition gimple.h:4329
location_t * gimple_location_ptr(gimple *g)
Definition gimple.h:1919
tree gimple_asm_output_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4078
basic_block gimple_bb(const gimple *g)
Definition gimple.h:1863
bool nonfreeing_call_p(gimple *)
Definition gimple.cc:3057
int gimple_eh_dispatch_region(const geh_dispatch *eh_dispatch_stmt)
Definition gimple.h:4807
bool gimple_debug_bind_has_value_p(gimple *dbg)
Definition gimple.h:5031
bool gimple_assign_single_p(const gimple *gs)
Definition gimple.h:2901
gimple_statement_structure_enum
Definition gimple.h:847
@ LAST_GSS_ENUM
Definition gimple.h:905
tree gimple_get_lhs(const gimple *)
Definition gimple.cc:2003
tree gimple_omp_parallel_child_fn(const gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5782
gimple_seq gimple_wce_cleanup(gimple *gs)
Definition gimple.h:4503
gtransaction * gimple_build_transaction(gimple_seq)
Definition gimple.cc:1373
tree * gimple_assign_rhs2_ptr(gassign *gs)
Definition gimple.h:2732
void gimple_switch_set_num_labels(gswitch *g, unsigned nlabels)
Definition gimple.h:4837
tree gimple_omp_taskreg_clauses(const gimple *gs)
Definition gimple.h:5980
void gimple_omp_task_set_copy_fn(gimple *gs, tree copy_fn)
Definition gimple.h:6101
void gimple_omp_atomic_load_set_lhs(gomp_atomic_load *load_stmt, tree lhs)
Definition gimple.h:6499
tree * gimple_omp_for_incr_ptr(gimple *gs, size_t i)
Definition gimple.h:5700
gdebug * gimple_build_debug_inline_entry(tree, location_t CXX_MEM_STAT_INFO)
void gimple_move_vops(gimple *, gimple *)
Definition gimple.cc:2311
void gimple_seq_set_first(gimple_seq *ps, gimple_seq_node first)
Definition gimple.h:1743
bool gimple_call_builtin_p(const gimple *)
Definition gimple.cc:2951
gimple_seq gimple_omp_for_pre_body(const gimple *gs)
Definition gimple.h:5734
void gimple_call_set_va_arg_pack(gcall *s, bool pass_arg_pack_p)
Definition gimple.h:3467
bool gimple_omp_atomic_weak_p(const gimple *g)
Definition gimple.h:2472
tree * gimple_omp_teams_clauses_ptr(gimple *gs)
Definition gimple.h:6317
bool gimple_asm_clobbers_memory_p(const gasm *)
Definition gimple.cc:3012
gomp_teams * gimple_build_omp_teams(gimple_seq, tree)
Definition gimple.cc:1320
tree gimple_cond_rhs(const gcond *gs)
Definition gimple.h:3713
plf_mask
Definition gimple.h:212
@ GF_PLF_2
Definition gimple.h:214
@ GF_PLF_1
Definition gimple.h:213
enum omp_memory_order gimple_omp_atomic_memory_order(const gimple *g)
Definition gimple.h:2494
tree gimple_omp_task_copy_fn(const gimple *gs)
Definition gimple.h:6081
void gimple_cond_make_true(gcond *gs)
Definition gimple.h:3799
tree gimple_switch_label(const gswitch *gs, unsigned index)
Definition gimple.h:4876
gimple * gimple_build_omp_masked(gimple_seq, tree)
Definition gimple.cc:1106
int gimple_call_flags(const gimple *)
Definition gimple.cc:1596
gimple_seq gimple_try_eval(const gimple *gs)
Definition gimple.h:4430
gomp_ordered * gimple_build_omp_ordered(gimple_seq, tree)
Definition gimple.cc:1156
gimple_seq * bb_seq_addr(basic_block bb)
Definition gimple.h:1777
void gimple_asm_set_label_op(gasm *asm_stmt, unsigned index, tree label_op)
Definition gimple.h:4127
void gimple_seq_add_stmt_without_update(gimple_seq *, gimple *)
Definition gimple.cc:1425
void gimple_set_lhs(gimple *, tree)
Definition gimple.cc:2022
struct pt_solution * gimple_call_clobber_set(gcall *call_stmt)
Definition gimple.h:3623
void gimple_omp_atomic_set_weak(gimple *g)
Definition gimple.h:2483
tree gimple_omp_target_child_fn(const gomp_target *omp_target_stmt)
Definition gimple.h:6250
gomp_sections * gimple_build_omp_sections(gimple_seq, tree)
Definition gimple.cc:1208
gimple * gimple_alloc(enum gimple_code, unsigned CXX_MEM_STAT_INFO)
gasm * gimple_build_asm_vec(const char *, vec< tree, va_gc > *, vec< tree, va_gc > *, vec< tree, va_gc > *, vec< tree, va_gc > *)
Definition gimple.cc:689
tree gimple_call_arg(const gcall *gs, unsigned index)
Definition gimple.h:3304
tree gimple_transaction_label_over(const gtransaction *transaction_stmt)
Definition gimple.h:6691
tree gimple_assign_lhs(const gassign *gs)
Definition gimple.h:2612
void gimple_try_set_cleanup(gtry *try_stmt, gimple_seq cleanup)
Definition gimple.h:4484
bool gimple_omp_parallel_combined_p(const gimple *g)
Definition gimple.h:2424
void gimple_debug_bind_set_var(gimple *dbg, tree var)
Definition gimple.h:4994
tree gimple_omp_single_clauses(const gimple *gs)
Definition gimple.h:6171
bool gimple_call_tail_p(const gcall *s)
Definition gimple.h:3370
void gimple_omp_single_set_clauses(gomp_single *omp_single_stmt, tree clauses)
Definition gimple.h:6191
bool gimple_nop_p(const gimple *g)
Definition gimple.h:6894
unsigned gimple_phi_capacity(const gimple *gs)
Definition gimple.h:4542
tree * gimple_omp_critical_name_ptr(gomp_critical *crit_stmt)
Definition gimple.h:5193
tree gimple_cond_true_label(const gcond *gs)
Definition gimple.h:3749
tree * gimple_omp_target_data_arg_ptr(gomp_target *omp_target_stmt)
Definition gimple.h:6288
bool gimple_asm_volatile_p(const gasm *asm_stmt)
Definition gimple.h:4147
tree * gimple_transaction_label_over_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6697
struct gimple_temp_hash_elt elt_t
tree gimple_call_nonnull_arg(gcall *)
Definition gimple.cc:1809
void gimple_set_location(gimple *, location_t)
Definition gimple.h:1908
gimple * gimple_build_nop(void)
Definition gimple.cc:624
gimple_seq gimple_omp_body(const gimple *gs)
Definition gimple.h:5166
bool gimple_builtin_call_types_compatible_p(const gimple *, tree)
Definition gimple.cc:2896
int gimple_lineno(const gimple *stmt)
Definition gimple.h:1960
void gimple_seq_set_location(gimple_seq, location_t)
Definition gimple.cc:3481
void gimple_call_set_internal_fn(gcall *call_stmt, enum internal_fn fn)
Definition gimple.h:3211
bool gimple_call_nocf_check_p(const gcall *gs)
Definition gimple.h:3027
tree gimple_phi_arg_def(const gphi *gs, size_t index)
Definition gimple.h:4665
void gimple_phi_arg_set_location(gphi *phi, size_t i, location_t loc)
Definition gimple.h:4728
void gimple_omp_teams_set_clauses(gomp_teams *omp_teams_stmt, tree clauses)
Definition gimple.h:6327
void gimple_cond_set_true_label(gcond *gs, tree label)
Definition gimple.h:3759
gcall * gimple_call_copy_skip_args(gcall *, bitmap)
Definition gimple.cc:2538
tree gimple_omp_scan_clauses(const gomp_scan *scan_stmt)
Definition gimple.h:5270
void gimple_try_set_kind(gtry *gs, enum gimple_try_flags kind)
Definition gimple.h:4397
tree * gimple_omp_interop_clauses_ptr(gimple *gs)
Definition gimple.h:5438
void gimple_cond_set_lhs(gcond *gs, tree lhs)
Definition gimple.h:3704
void gimple_omp_for_set_initial(gimple *gs, size_t i, tree initial)
Definition gimple.h:5645
void gimple_debug_source_bind_set_value(gimple *dbg, tree value)
Definition gimple.h:5097
enum tree_code gimple_expr_code(const gimple *stmt)
Definition gimple.h:3875
bool gimple_call_must_tail_p(const gcall *s)
Definition gimple.h:3390
tree gimple_omp_critical_name(const gomp_critical *crit_stmt)
Definition gimple.h:5183
tree gimple_call_chain(const gcall *gs)
Definition gimple.h:3255
gimple * gimple_build_wce(gimple_seq)
Definition gimple.cc:803
gomp_scan * gimple_build_omp_scan(gimple_seq, tree)
Definition gimple.cc:1189
void gimple_seq_add_seq(gimple_seq *, gimple_seq)
Definition gimple.cc:1440
struct pt_solution * gimple_call_use_set(gcall *call_stmt)
Definition gimple.h:3606
void gimple_call_set_ctrl_altering(gcall *s, bool ctrl_altering_p)
Definition gimple.h:3088
void gimple_omp_for_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5547
void gimple_set_modified(gimple *s, bool modifiedp)
Definition gimple.h:2258
void gimple_label_set_label(glabel *gs, tree label)
Definition gimple.h:3902
tree gimple_omp_taskreg_child_fn(const gimple *gs)
Definition gimple.h:6014
bool is_gimple_omp(const gimple *stmt)
Definition gimple.h:6803
void gimple_cond_set_false_label(gcond *gs, tree label)
Definition gimple.h:3769
bool gimple_has_volatile_ops(const gimple *stmt)
Definition gimple.h:2268
bool gimple_assign_copy_p(gimple *)
Definition gimple.cc:1834
void gimple_set_has_volatile_ops(gimple *stmt, bool volatilep)
Definition gimple.h:2280
void gimple_call_set_nocf_check(gcall *gs, bool nocf_check)
Definition gimple.h:3035
tree gimple_omp_for_clauses(const gimple *gs)
Definition gimple.h:5525
#define gcc_gimple_checking_assert(EXPR)
Definition gimple.h:94
bool gimple_visited_p(gimple *stmt)
Definition gimple.h:2022
tree * gimple_call_arg_ptr(gcall *gs, unsigned index)
Definition gimple.h:3322
void gimple_seq_discard(gimple_seq)
Definition gimple.cc:3490
bool is_gimple_omp_offloaded(const gimple *stmt)
Definition gimple.h:6867
void gimple_omp_parallel_set_clauses(gomp_parallel *omp_parallel_stmt, tree clauses)
Definition gimple.h:5772
void gimple_omp_task_set_arg_size(gimple *gs, tree arg_size)
Definition gimple.h:6131
gimple_try_flags
Definition gimple.h:517
@ GIMPLE_TRY_FINALLY
Definition gimple.h:522
@ GIMPLE_TRY_CATCH_IS_CLEANUP
Definition gimple.h:526
@ GIMPLE_TRY_KIND
Definition gimple.h:523
@ GIMPLE_TRY_CATCH
Definition gimple.h:519
void gimple_set_num_ops(gimple *gs, unsigned num_ops)
Definition gimple.h:2527
void gimple_seq_add_stmt(gimple_seq *, gimple *)
Definition gimple.cc:1408
tree * gimple_omp_parallel_child_fn_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5791
void gimple_eh_filter_set_failure(geh_filter *eh_filter_stmt, gimple_seq failure)
Definition gimple.h:4320
const char * gimple_asm_string(const gasm *asm_stmt)
Definition gimple.h:4138
gimple_seq * gimple_eh_filter_failure_ptr(gimple *gs)
Definition gimple.h:4289
void gimple_omp_for_set_final(gimple *gs, size_t i, tree final)
Definition gimple.h:5678
void gimple_bind_set_block(gbind *bind_stmt, tree block)
Definition gimple.h:4013
tree * gimple_phi_result_ptr(gphi *gs)
Definition gimple.h:4579
tree gimple_omp_dispatch_clauses(const gimple *gs)
Definition gimple.h:5400
tree gimple_omp_taskreg_data_arg(const gimple *gs)
Definition gimple.h:6048
gimple * gimple_build_omp_section(gimple_seq)
Definition gimple.cc:1062
void gimple_set_uid(gimple *g, unsigned uid)
Definition gimple.h:2073
unsigned int gimple_transaction_subcode(const gtransaction *transaction_stmt)
Definition gimple.h:6705
tree gimple_omp_for_index(const gimple *gs, size_t i)
Definition gimple.h:5590
geh_dispatch * gimple_build_eh_dispatch(int)
Definition gimple.cc:866
gomp_continue * gimple_build_omp_continue(tree, tree)
Definition gimple.cc:1140
void gimple_call_set_return_slot_opt(gcall *s, bool return_slot_opt_p)
Definition gimple.h:3400
void gimple_asm_set_input_op(gasm *asm_stmt, unsigned index, tree in_op)
Definition gimple.h:4067
void preprocess_case_label_vec_for_gimple(vec< tree > &, tree, tree *)
Definition gimple.cc:3314
bool is_gimple_omp_oacc(const gimple *stmt)
Definition gimple.h:6818
gimple_seq * gimple_transaction_body_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6651
gimple_seq gimple_bind_body(const gbind *gs)
Definition gimple.h:3965
void gimple_set_plf(gimple *stmt, enum plf_mask plf, bool val_p)
Definition gimple.h:2039
bool gimple_omp_return_nowait_p(const gimple *g)
Definition gimple.h:2338
void gimple_omp_dispatch_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5420
void gimple_omp_for_set_kind(gomp_for *g, int kind)
Definition gimple.h:5467
void gimple_omp_ordered_standalone(gimple *g)
Definition gimple.h:2413
tree gimple_omp_atomic_load_lhs(const gomp_atomic_load *load_stmt)
Definition gimple.h:6508
enum gimple_try_flags gimple_try_kind(const gimple *gs)
Definition gimple.h:4387
tree * gimple_omp_dispatch_clauses_ptr(gimple *gs)
Definition gimple.h:5410
tree * gimple_omp_task_clauses_ptr(gimple *gs)
Definition gimple.h:5848
void gimple_return_set_retval(greturn *gs, tree retval)
Definition gimple.h:6769
unsigned gimple_asm_nclobbers(const gasm *asm_stmt)
Definition gimple.h:4042
void gimple_omp_scan_set_clauses(gomp_scan *scan_stmt, tree clauses)
Definition gimple.h:5290
bool gimple_try_catch_is_cleanup(const gimple *gs)
Definition gimple.h:4409
gomp_parallel * gimple_build_omp_parallel(gimple_seq, tree, tree, tree)
Definition gimple.cc:1014
void gimple_omp_taskreg_set_data_arg(gimple *gs, tree data_arg)
Definition gimple.h:6070
void gimple_call_set_fndecl(gcall *gs, tree decl)
Definition gimple.h:3193
tree * gimple_call_fn_ptr(gcall *gs)
Definition gimple.h:3167
bool empty_body_p(gimple_seq)
Definition gimple.cc:1541
tree gimple_call_lhs(const gcall *gs)
Definition gimple.h:2961
unsigned get_gimple_rhs_num_ops(enum tree_code)
Definition gimple.cc:2480
void gimple_eh_filter_set_types(geh_filter *eh_filter_stmt, tree types)
Definition gimple.h:4310
void gimple_set_vdef(gimple *g, tree vdef)
Definition gimple.h:2236
void gimple_omp_atomic_set_memory_order(gimple *g, enum omp_memory_order mo)
Definition gimple.h:2506
void gimple_wce_set_cleanup_eh_only(gimple *gs, bool eh_only_p)
Definition gimple.h:4532
void gimple_asm_set_clobber_op(gasm *asm_stmt, unsigned index, tree clobber_op)
Definition gimple.h:4108
tree gimple_vuse(const gimple *g)
Definition gimple.h:2178
bool gimple_inexpensive_call_p(gcall *)
Definition gimple.cc:3523
tree * gimple_call_lhs_ptr(gcall *gs)
Definition gimple.h:2977
void gimple_omp_return_set_lhs(gimple *g, tree lhs)
Definition gimple.h:2348
tree * gimple_transaction_label_norm_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6673
tree gimple_omp_target_data_arg(const gomp_target *omp_target_stmt)
Definition gimple.h:6279
void gimple_omp_scope_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5390
const char * gimple_filename(const gimple *stmt)
Definition gimple.h:1951
gomp_atomic_store * gimple_build_omp_atomic_store(tree, enum omp_memory_order)
Definition gimple.cc:1349
void gimple_call_set_by_descriptor(gcall *s, bool by_descriptor_p)
Definition gimple.h:3577
void gimple_cond_set_condition(gcond *stmt, enum tree_code code, tree lhs, tree rhs)
Definition gimple.h:3859
tree gimple_assign_rhs2(const gassign *gs)
Definition gimple.h:2712
tree gimple_omp_taskgroup_clauses(const gimple *gs)
Definition gimple.h:5299
void gimple_set_op(gimple *gs, unsigned i, tree op)
Definition gimple.h:2581
geh_filter * gimple_build_eh_filter(tree, gimple_seq)
Definition gimple.cc:739
void gimple_omp_set_body(gimple *gs, gimple_seq body)
Definition gimple.h:5174
void gimple_eh_must_not_throw_set_fndecl(geh_mnt *eh_mnt_stmt, tree decl)
Definition gimple.h:4337
void gimple_call_set_must_tail(gcall *s, bool must_tail_p)
Definition gimple.h:3378
gbind * gimple_build_bind(tree, gimple_seq, tree)
Definition gimple.cc:635
void gimple_set_no_warning(gimple *stmt, bool no_warning)
Definition gimple.h:1986
tree * gimple_omp_for_final_ptr(gimple *gs, size_t i)
Definition gimple.h:5667
gimple * gimple_build_assume(tree, gimple_seq)
Definition gimple.cc:1361
void gimple_omp_parallel_set_data_arg(gomp_parallel *omp_parallel_stmt, tree data_arg)
Definition gimple.h:5829
bool gimple_assign_load_p(const gimple *)
Definition gimple.cc:1880
tree gimple_omp_critical_clauses(const gomp_critical *crit_stmt)
Definition gimple.h:5212
gimple_seq * gimple_bind_body_ptr(gbind *bind_stmt)
Definition gimple.h:3957
int gimple_call_return_flags(const gcall *)
Definition gimple.cc:1763
tree * gimple_omp_masked_clauses_ptr(gimple *gs)
Definition gimple.h:5345
bool gimple_phi_arg_has_location(const gphi *phi, size_t i)
Definition gimple.h:4744
gimple_seq_node gimple_seq_first(gimple_seq s)
Definition gimple.h:1686
int gimple_resx_region(const gresx *resx_stmt)
Definition gimple.h:4791
void gimple_omp_critical_set_clauses(gomp_critical *crit_stmt, tree clauses)
Definition gimple.h:5232
void gimple_switch_set_label(gswitch *gs, unsigned index, tree label)
Definition gimple.h:4885
bool gimple_has_side_effects(const gimple *)
Definition gimple.cc:2327
gcall * gimple_build_call_vec(tree, const vec< tree > &)
Definition gimple.cc:269
tree * gimple_omp_continue_control_use_ptr(gomp_continue *cont_stmt)
Definition gimple.h:6587
void gimple_assign_set_nontemporal_move(gimple *gs, bool nontemporal)
Definition gimple.h:2841
bool infer_nonnull_range(gimple *, tree)
Definition gimple.cc:3138
gimple * gimple_build_omp_master(gimple_seq)
Definition gimple.cc:1092
unsigned gimple_num_args(const gimple *gs)
Definition gimple.h:4752
gimple * gimple_build_omp_dispatch(gimple_seq, tree)
Definition gimple.cc:1271
tree * gimple_omp_critical_clauses_ptr(gomp_critical *crit_stmt)
Definition gimple.h:5222
bool gimple_no_warning_p(const gimple *stmt)
Definition gimple.h:1978
unsigned gimple_phi_num_args(const gimple *gs)
Definition gimple.h:4554
void sort_case_labels(vec< tree > &)
Definition gimple.cc:3289
tree gimple_call_fndecl(const gcall *gs)
Definition gimple.h:3223
alias_set_type gimple_get_alias_set(tree)
Definition gimple.cc:2825
tree gimple_omp_teams_data_arg(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6363
void gimple_omp_taskreg_set_child_fn(gimple *gs, tree child_fn)
Definition gimple.h:6036
void gimple_omp_target_set_data_arg(gomp_target *omp_target_stmt, tree data_arg)
Definition gimple.h:6297
tree gimple_bind_vars(const gbind *bind_stmt)
Definition gimple.h:3930
struct phi_arg_d * gimple_phi_arg(gphi *gs, unsigned index)
Definition gimple.h:4606
bool gimple_debug_source_bind_p(const gimple *s)
Definition gimple.h:5043
tree gimple_asm_input_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4058
geh_else * gimple_build_eh_else(gimple_seq, gimple_seq)
Definition gimple.cc:766
gomp_atomic_load * gimple_build_omp_atomic_load(tree, tree, enum omp_memory_order)
Definition gimple.cc:1334
gimple_seq gimple_catch_handler(const gcatch *catch_stmt)
Definition gimple.h:4240
unsigned int gimple_plf(gimple *stmt, enum plf_mask plf)
Definition gimple.h:2059
tree * gimple_omp_atomic_load_lhs_ptr(gomp_atomic_load *load_stmt)
Definition gimple.h:6517
tree * gimple_omp_single_clauses_ptr(gimple *gs)
Definition gimple.h:6181
gimple_seq gimple_seq_alloc_with_stmt(gimple *stmt)
Definition gimple.h:1760
bool gimple_call_internal_p(const gcall *gs)
Definition gimple.h:3012
gimple_seq * gimple_try_cleanup_ptr(gimple *gs)
Definition gimple.h:4440
void gimple_omp_teams_set_child_fn(gomp_teams *omp_teams_stmt, tree child_fn)
Definition gimple.h:6353
gassign * gimple_build_assign(tree, tree CXX_MEM_STAT_INFO)
gimple_seq * phi_nodes_ptr(basic_block bb)
Definition gimple.h:4656
void gimple_assign_set_rhs_code(gimple *s, enum tree_code code)
Definition gimple.h:2877
tree gimple_arg(const gimple *gs, unsigned int i)
Definition gimple.h:4767
void gimple_set_do_not_emit_location(gimple *g)
Definition gimple.h:6953
tree gimple_phi_arg_def_from_edge(const gphi *gs, const_edge e)
Definition gimple.h:4680
#define LOCATION_LOCUS(LOC)
Definition input.h:193
#define LOCATION_BLOCK(LOC)
Definition input.h:196
#define LOCATION_FILE(LOC)
Definition input.h:190
#define LOCATION_LINE(LOC)
Definition input.h:191
#define UNKNOWN_LOCATION
Definition input.h:32
T as_a(U *p)
Definition is-a.h:253
T dyn_cast(U *p)
Definition is-a.h:280
const char *const lhs
Definition pretty-print.cc:3222
const char *const rhs
Definition pretty-print.cc:3223
i
Definition poly-int.h:776
static int failure
Definition reload1.cc:671
#define CXX_MEM_STAT_INFO
Definition statistics.h:58
tree variable_size(tree size)
Definition stor-layout.cc:67
union basic_block_def::basic_block_il_dependent il
int flags
Definition basic-block.h:144
Definition tree-predcom.cc:299
Definition genautomata.cc:499
Definition loop-invariant.cc:88
Definition function.h:249
int last_stmt_uid
Definition function.h:317
Definition gimple.h:549
unsigned char nl
Definition gimple.h:561
unsigned char nc
Definition gimple.h:560
unsigned char no
Definition gimple.h:559
unsigned char ni
Definition gimple.h:558
const char * string
Definition gimple.h:554
tree op[1]
Definition gimple.h:567
Definition gimple.h:904
static enum gimple_code code_
Definition gimple.h:905
Definition gimple.h:389
tree block
Definition gimple.h:402
tree vars
Definition gimple.h:394
gimple_seq body
Definition gimple.h:405
Definition gimple.h:352
struct pt_solution call_used
Definition gimple.h:356
tree op[1]
Definition gimple.h:369
struct pt_solution call_clobbered
Definition gimple.h:357
static enum gimple_code code_
Definition gimple.h:371
enum internal_fn internal_fn
Definition gimple.h:362
tree fntype
Definition gimple.h:361
union gcall::@103242352322264346325113136141165045026143300141 u
Definition gimple.h:412
gimple_seq handler
Definition gimple.h:419
tree types
Definition gimple.h:416
Definition gimple.h:858
static enum gimple_code code_
Definition gimple.h:860
Definition gimple.h:868
Definition gimple.h:494
Definition gimple.h:441
gimple_seq e_body
Definition gimple.h:445
gimple_seq n_body
Definition gimple.h:445
Definition gimple.h:426
gimple_seq failure
Definition gimple.h:435
tree types
Definition gimple.h:431
Definition gimple.h:451
tree fndecl
Definition gimple.h:455
Definition gimple.h:877
gimple_seq phi_nodes
Definition basic-block.h:88
gimple_seq seq
Definition basic-block.h:85
Definition gimple.h:585
enum tree_code cond
Definition gimple.h:587
tree final
Definition gimple.h:596
tree index
Definition gimple.h:590
tree initial
Definition gimple.h:593
tree incr
Definition gimple.h:599
Definition gimple.h:795
tree guard
Definition gimple.h:799
gimple_seq body
Definition gimple.h:802
Definition gimple.h:479
int region
Definition gimple.h:484
tree val
Definition gimple.h:775
tree data_arg
Definition gimple.h:640
tree child_fn
Definition gimple.h:636
tree clauses
Definition gimple.h:632
Definition gimple.h:787
Definition gimple.h:723
tree clauses
Definition gimple.h:727
Definition gimple.h:645
Definition gimple.h:378
gimple_seq body
Definition gimple.h:382
Definition gimple.h:532
gimple_seq cleanup
Definition gimple.h:542
tree vdef
Definition gimple.h:329
tree vuse
Definition gimple.h:330
Definition gimple.h:338
tree op[1]
Definition gimple.h:345
Definition gimple.h:294
struct use_optype_d * use_ops
Definition gimple.h:302
Definition gimple.h:309
tree op[1]
Definition gimple.h:316
Definition gimple-iterator.h:26
Definition gimple.h:1657
tree temp
Definition gimple.h:1659
tree val
Definition gimple.h:1658
Definition gimple.h:221
unsigned int visited
Definition gimple.h:231
unsigned pad
Definition gimple.h:252
unsigned int plf
Definition gimple.h:242
unsigned int subcode
Definition gimple.h:258
basic_block bb
Definition gimple.h:277
gimple * next
Definition gimple.h:285
enum gimple_code code
Definition gimple.h:224
unsigned int no_warning
Definition gimple.h:227
unsigned int nontemporal_move
Definition gimple.h:235
unsigned uid
Definition gimple.h:263
unsigned modified
Definition gimple.h:246
gimple * prev
Definition gimple.h:286
location_t location
Definition gimple.h:273
unsigned has_volatile_ops
Definition gimple.h:249
unsigned num_ops
Definition gimple.h:267
Definition gimple.h:886
Definition gimple.h:760
tree rhs
Definition gimple.h:764
tree lhs
Definition gimple.h:764
Definition gimple.h:780
Definition gimple.h:708
tree control_def
Definition gimple.h:712
tree control_use
Definition gimple.h:715
Definition gimple.h:573
tree name
Definition gimple.h:581
tree clauses
Definition gimple.h:577
Definition gimple.h:605
gimple_seq pre_body
Definition gimple.h:620
size_t collapse
Definition gimple.h:613
struct gimple_omp_for_iter * iter
Definition gimple.h:616
tree clauses
Definition gimple.h:609
Definition gimple.h:743
Definition gimple.h:654
Definition gimple.h:749
Definition gimple.h:690
tree clauses
Definition gimple.h:694
tree control
Definition gimple.h:699
Definition gimple.h:731
Definition gimple.h:661
Definition gimple.h:669
tree copy_fn
Definition gimple.h:674
tree arg_size
Definition gimple.h:678
tree arg_align
Definition gimple.h:679
Definition gimple.h:737
Definition gimple.h:461
unsigned nargs
Definition gimple.h:466
unsigned capacity
Definition gimple.h:465
struct phi_arg_d args[1]
Definition gimple.h:472
tree result
Definition gimple.h:469
Definition gimple.h:488
Definition gimple.h:914
Definition gimple.h:895
Definition gimple.h:834
tree label_uninst
Definition gimple.h:842
gimple_seq body
Definition gimple.h:838
tree label_over
Definition gimple.h:843
tree label_norm
Definition gimple.h:841
Definition gimple.h:503
gimple_seq cleanup
Definition gimple.h:512
gimple_seq eval
Definition gimple.h:508
static bool test(U *p)
Definition tree-ssa-alias.h:29
bitmap vars
Definition tree-ssa-alias.h:69
Definition gengtype.h:252
Definition tree-ssa-operands.h:38
Definition loop-invariant.cc:78
Definition vec.h:450
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:814
#define CONST_CAST_GIMPLE(X)
Definition system.h:1198
#define gcc_unreachable()
Definition system.h:841
#define false
Definition system.h:888
#define bool
Definition system.h:886
#define gcc_checking_assert(EXPR)
Definition system.h:821
#define ECF_NORETURN
Definition tree-core.h:59
built_in_class
Definition tree-core.h:165
@ tcc_comparison
Definition tree-core.h:233
#define ECF_NOTHROW
Definition tree-core.h:68
#define ECF_XTHROW
Definition tree-core.h:99
omp_memory_order
Definition tree-core.h:651
clobber_kind
Definition tree-core.h:1054
tree copy_fn(tree fn, tree &parms, tree &result)
Definition tree-inline.cc:6714
tree chainon(tree op1, tree op2)
Definition tree.cc:3542
tree build_pointer_type(tree to_type)
Definition tree.cc:7140
location_t set_block(location_t loc, tree block)
Definition tree.cc:14773
location_t * block_nonartificial_location(tree block)
Definition tree.cc:11978
#define boolean_false_node
Definition tree.h:4582
#define SSA_NAME_DEF_STMT(NODE)
Definition tree.h:2158
#define boolean_true_node
Definition tree.h:4583
#define TREE_CODE_CLASS(CODE)
Definition tree.h:202
#define CASE_LOW(NODE)
Definition tree.h:1406
constexpr opt_code all_warnings
Definition tree.h:6942
#define TREE_CODE(NODE)
Definition tree.h:324
constexpr opt_code no_warning
Definition tree.h:6940
#define CONVERT_EXPR_CODE_P(CODE)
Definition tree.h:553
#define TREE_TYPE(NODE)
Definition tree.h:512
#define CONSTANT_CLASS_P(NODE)
Definition tree.h:215
#define TREE_CLOBBER_P(NODE)
Definition tree.h:1284
#define SSA_VAR_P(DECL)
Definition tree.h:2733
#define CLOBBER_KIND(NODE)
Definition tree.h:1288
tree build1_loc(location_t loc, enum tree_code code, tree type, tree arg1 CXX_MEM_STAT_INFO)
Definition tree.h:4817
#define CASE_HIGH(NODE)
Definition tree.h:1407
#define NULL_TREE
Definition tree.h:317
struct gimple_bb_info gimple
Definition basic-block.h:136