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-2024 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
35};
36
37extern const char *const gimple_code_name[];
38extern const unsigned char gimple_rhs_class_table[];
39
40/* Strip the outermost pointer, from tr1/type_traits. */
41template<typename T> struct remove_pointer { typedef T type; };
42template<typename T> struct remove_pointer<T *> { typedef T type; };
43
44/* Error out if a gimple tuple is addressed incorrectly. */
45#if defined ENABLE_GIMPLE_CHECKING
46#define gcc_gimple_checking_assert(EXPR) gcc_assert (EXPR)
47extern void gimple_check_failed (const gimple *, const char *, int, \
48 const char *, enum gimple_code, \
51
52#define GIMPLE_CHECK(GS, CODE) \
53 do { \
54 const gimple *__gs = (GS); \
55 if (gimple_code (__gs) != (CODE)) \
56 gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__, \
57 (CODE), ERROR_MARK); \
58 } while (0)
59template <typename T>
60inline T
62#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
63 const char *file = __builtin_FILE (),
64 int line = __builtin_LINE (),
65 const char *fun = __builtin_FUNCTION ())
66#else
67 const char *file = __FILE__,
68 int line = __LINE__,
69 const char *fun = NULL)
70#endif
71{
72 T ret = dyn_cast <T> (gs);
73 if (!ret)
74 gimple_check_failed (gs, file, line, fun,
76 return ret;
77}
78template <typename T>
79inline T
81#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
82 const char *file = __builtin_FILE (),
83 int line = __builtin_LINE (),
84 const char *fun = __builtin_FUNCTION ())
85#else
86 const char *file = __FILE__,
87 int line = __LINE__,
88 const char *fun = NULL)
89#endif
90{
91 T ret = dyn_cast <T> (gs);
92 if (!ret)
93 gimple_check_failed (gs, file, line, fun,
95 return ret;
96}
97#else /* not ENABLE_GIMPLE_CHECKING */
98#define gcc_gimple_checking_assert(EXPR) ((void)(0 && (EXPR)))
99#define GIMPLE_CHECK(GS, CODE) (void)0
100template <typename T>
101inline T
103{
104 return as_a <T> (gs);
105}
106template <typename T>
107inline T
109{
110 return as_a <T> (gs);
111}
112#endif
113
114/* Class of GIMPLE expressions suitable for the RHS of assignments. See
115 get_gimple_rhs_class. */
117{
118 GIMPLE_INVALID_RHS, /* The expression cannot be used on the RHS. */
119 GIMPLE_TERNARY_RHS, /* The expression is a ternary operation. */
120 GIMPLE_BINARY_RHS, /* The expression is a binary operation. */
121 GIMPLE_UNARY_RHS, /* The expression is a unary operation. */
122 GIMPLE_SINGLE_RHS /* The expression is a single object (an SSA
123 name, a _DECL, a _REF, etc. */
125
126/* Specific flags for individual GIMPLE statements. These flags are
127 always stored in gimple.subcode and they may only be
128 defined for statement codes that do not use subcodes.
129
130 Values for the masks can overlap as long as the overlapping values
131 are never used in the same statement class.
132
133 The maximum mask value that can be defined is 1 << 15 (i.e., each
134 statement code can hold up to 16 bitflags).
135
136 Keep this list sorted. */
138 GF_ASM_INPUT = 1 << 0,
153 GF_CALL_XTHROW = 1 << 13,
157 GF_OMP_FOR_KIND_MASK = (1 << 3) - 1,
180 /* A 'GF_OMP_TARGET_KIND_OACC_PARALLEL' representing an OpenACC 'kernels'
181 decomposed part, parallelized. */
183 /* A 'GF_OMP_TARGET_KIND_OACC_PARALLEL' representing an OpenACC 'kernels'
184 decomposed part, "gang-single". */
186 /* A 'GF_OMP_TARGET_KIND_OACC_DATA' representing an OpenACC 'kernels'
187 decomposed parts' 'data' construct. */
190
191 /* True on an GIMPLE_OMP_RETURN statement if the return does not require
192 a thread synchronization via some sort of barrier. The exact barrier
193 that would otherwise be emitted is dependent on the OMP statement with
194 which this return is associated. */
196
202 GF_PREDICT_TAKEN = 1 << 15
204
205/* This subcode tells apart different kinds of stmts that are not used
206 for codegen, but rather to retain debug information. */
213
214/* Masks for selecting a pass local flag (PLF) to work on. These
215 masks are used by gimple_set_plf and gimple_plf. */
217 GF_PLF_1 = 1 << 0,
218 GF_PLF_2 = 1 << 1
220
221/* Data structure definitions for GIMPLE tuples. NOTE: word markers
222 are for 64 bit hosts. */
223
224struct GTY((desc ("gimple_statement_structure (&%h)"), tag ("GSS_BASE"),
225 chain_next ("%h.next"), variable_size))
226 gimple
227{
228 /* [ WORD 1 ]
229 Main identifying code for a tuple. */
230 ENUM_BITFIELD(gimple_code) code : 8;
232 /* Nonzero if a warning should not be emitted on this tuple. */
233 unsigned int no_warning : 1;
234
235 /* Nonzero if this tuple has been visited. Passes are responsible
236 for clearing this bit before using it. */
237 unsigned int visited : 1;
238
239 /* Nonzero if this tuple represents a non-temporal move; currently
240 only stores are supported. */
241 unsigned int nontemporal_move : 1;
242
243 /* Pass local flags. These flags are free for any pass to use as
244 they see fit. Passes should not assume that these flags contain
245 any useful value when the pass starts. Any initial state that
246 the pass requires should be set on entry to the pass. See
247 gimple_set_plf and gimple_plf for usage. */
248 unsigned int plf : 2;
249
250 /* Nonzero if this statement has been modified and needs to have its
251 operands rescanned. */
252 unsigned modified : 1;
254 /* Nonzero if this statement contains volatile operands. */
255 unsigned has_volatile_ops : 1;
257 /* Padding to get subcode to 16 bit alignment. */
258 unsigned pad : 1;
259
260 /* The SUBCODE field can be used for tuple-specific flags for tuples
261 that do not require subcodes. Note that SUBCODE should be at
262 least as wide as tree codes, as several tuples store tree codes
263 in there. */
264 unsigned int subcode : 16;
265
266 /* UID of this statement. This is used by passes that want to
267 assign IDs to statements. It must be assigned and used by each
268 pass. By default it should be assumed to contain garbage. */
269 unsigned uid;
270
271 /* [ WORD 2 ]
272 Locus information for debug info. */
273 location_t location;
275 /* Number of operands in this tuple. */
276 unsigned num_ops;
277
278 /* [ WORD 3 ]
279 Basic block holding this statement. */
280 basic_block bb;
281
282 /* [ WORD 4-5 ]
283 Linked lists of gimple statements. The next pointers form
284 a NULL terminated list, the prev pointers are a cyclic list.
285 A gimple statement is hence also a double-ended list of
286 statements, with the pointer itself being the first element,
287 and the prev pointer being the last. */
288 gimple *next;
289 gimple *GTY((skip)) prev;
290};
291
292
293/* Base structure for tuples with operands. */
295/* This gimple subclass has no tag value. */
296struct GTY(())
298{
299 /* [ WORD 1-6 ] : base class */
300
301 /* [ WORD 7 ]
302 SSA operand vectors. NOTE: It should be possible to
303 amalgamate these vectors with the operand vector OP. However,
304 the SSA operand vectors are organized differently and contain
305 more information (like immediate use chaining). */
306 struct use_optype_d GTY((skip (""))) *use_ops;
307};
308
310/* Statements that take register operands. */
311
312struct GTY((tag("GSS_WITH_OPS")))
314{
315 /* [ WORD 1-7 ] : base class */
316
317 /* [ WORD 8 ]
318 Operand vector. NOTE! This must always be the last field
319 of this structure. In particular, this means that this
320 structure cannot be embedded inside another one. */
321 tree GTY((length ("%h.num_ops"))) op[1];
322};
324
325/* Base for statements that take both memory and register operands. */
326
329{
330 /* [ WORD 1-7 ] : base class */
332 /* [ WORD 8-9 ]
333 Virtual operands for this statement. The GC will pick them
334 up via the ssa_names array. */
335 tree GTY((skip (""))) vdef;
336 tree GTY((skip (""))) vuse;
338
339
340/* Statements that take both memory and register operands. */
341
345{
346 /* [ WORD 1-9 ] : base class */
347
348 /* [ WORD 10 ]
349 Operand vector. NOTE! This must always be the last field
350 of this structure. In particular, this means that this
351 structure cannot be embedded inside another one. */
352 tree GTY((length ("%h.num_ops"))) op[1];
353};
354
355
356/* Call statements that take both memory and register operands. */
360{
361 /* [ WORD 1-9 ] : base class */
363 /* [ WORD 10-13 ] */
364 struct pt_solution call_used;
365 struct pt_solution call_clobbered;
366
367 /* [ WORD 14 ] */
368 union GTY ((desc ("%1.subcode & GF_CALL_INTERNAL"))) {
369 tree GTY ((tag ("0"))) fntype;
371 } u;
373 /* [ WORD 15 ]
374 Operand vector. NOTE! This must always be the last field
375 of this structure. In particular, this means that this
376 structure cannot be embedded inside another one. */
377 tree GTY((length ("%h.num_ops"))) op[1];
380};
381
382
383/* OMP statements. */
384
385struct GTY((tag("GSS_OMP")))
387{
388 /* [ WORD 1-6 ] : base class */
390 /* [ WORD 7 ] */
391 gimple_seq body;
392};
393
394
395/* GIMPLE_BIND */
396
397struct GTY((tag("GSS_BIND")))
398 gbind : public gimple
399{
400 /* [ WORD 1-6 ] : base class */
401
402 /* [ WORD 7 ]
403 Variables declared in this scope. */
404 tree vars;
405
406 /* [ WORD 8 ]
407 This is different than the BLOCK field in gimple,
408 which is analogous to TREE_BLOCK (i.e., the lexical block holding
409 this statement). This field is the equivalent of BIND_EXPR_BLOCK
410 in tree land (i.e., the lexical scope defined by this bind). See
411 gimple-low.cc. */
412 tree block;
413
414 /* [ WORD 9 ] */
415 gimple_seq body;
416};
418
419/* GIMPLE_CATCH */
421struct GTY((tag("GSS_CATCH")))
422 gcatch : public gimple
423{
424 /* [ WORD 1-6 ] : base class */
425
426 /* [ WORD 7 ] */
427 tree types;
428
429 /* [ WORD 8 ] */
430 gimple_seq handler;
431};
433
434/* GIMPLE_EH_FILTER */
435
436struct GTY((tag("GSS_EH_FILTER")))
437 geh_filter : public gimple
438{
439 /* [ WORD 1-6 ] : base class */
440
441 /* [ WORD 7 ]
442 Filter types. */
443 tree types;
444
445 /* [ WORD 8 ]
446 Failure actions. */
448};
449
450/* GIMPLE_EH_ELSE */
452struct GTY((tag("GSS_EH_ELSE")))
453 geh_else : public gimple
454{
455 /* [ WORD 1-6 ] : base class */
457 /* [ WORD 7,8 ] */
458 gimple_seq n_body, e_body;
459};
460
461/* GIMPLE_EH_MUST_NOT_THROW */
462
463struct GTY((tag("GSS_EH_MNT")))
464 geh_mnt : public gimple
465{
466 /* [ WORD 1-6 ] : base class */
468 /* [ WORD 7 ] Abort function decl. */
469 tree fndecl;
471
472/* GIMPLE_PHI */
474struct GTY((tag("GSS_PHI")))
475 gphi : public gimple
476{
477 /* [ WORD 1-6 ] : base class */
478
479 /* [ WORD 7 ] */
480 unsigned capacity;
481 unsigned nargs;
482
483 /* [ WORD 8 ] */
484 tree result;
486 /* [ WORD 9 ] */
487 struct phi_arg_d GTY ((length ("%h.nargs"))) args[1];
489
490
491/* GIMPLE_RESX, GIMPLE_EH_DISPATCH */
492
493struct GTY((tag("GSS_EH_CTRL")))
495{
496 /* [ WORD 1-6 ] : base class */
497
498 /* [ WORD 7 ]
499 Exception region number. */
500 int region;
501};
502
503struct GTY((tag("GSS_EH_CTRL")))
505{
506 /* No extra fields; adds invariant:
507 stmt->code == GIMPLE_RESX. */
508};
510struct GTY((tag("GSS_EH_CTRL")))
512{
513 /* No extra fields; adds invariant:
514 stmt->code == GIMPLE_EH_DISPATH. */
515};
516
518/* GIMPLE_TRY */
519
520struct GTY((tag("GSS_TRY")))
521 gtry : public gimple
522{
523 /* [ WORD 1-6 ] : base class */
525 /* [ WORD 7 ]
526 Expression to evaluate. */
527 gimple_seq eval;
529 /* [ WORD 8 ]
530 Cleanup expression. */
531 gimple_seq cleanup;
533
534/* Kind of GIMPLE_TRY statements. */
536{
537 /* A try/catch. */
538 GIMPLE_TRY_CATCH = 1 << 0,
539
540 /* A try/finally. */
541 GIMPLE_TRY_FINALLY = 1 << 1,
544 /* Analogous to TRY_CATCH_IS_CLEANUP. */
546};
547
548/* GIMPLE_WITH_CLEANUP_EXPR */
550struct GTY((tag("GSS_WCE")))
552{
553 /* [ WORD 1-6 ] : base class */
554
555 /* Subcode: CLEANUP_EH_ONLY. True if the cleanup should only be
556 executed if an exception is thrown, not on normal exit of its
557 scope. This flag is analogous to the CLEANUP_EH_ONLY flag
558 in TARGET_EXPRs. */
560 /* [ WORD 7 ]
561 Cleanup expression. */
562 gimple_seq cleanup;
563};
564
565
566/* GIMPLE_ASM */
567
568struct GTY((tag("GSS_ASM")))
570{
571 /* [ WORD 1-9 ] : base class */
572
573 /* [ WORD 10 ]
574 __asm__ statement. */
575 const char *string;
576
577 /* [ WORD 11 ]
578 Number of inputs, outputs, clobbers, labels. */
579 unsigned char ni;
580 unsigned char no;
581 unsigned char nc;
582 unsigned char nl;
583
584 /* [ WORD 12 ]
585 Operand vector. NOTE! This must always be the last field
586 of this structure. In particular, this means that this
587 structure cannot be embedded inside another one. */
588 tree GTY((length ("%h.num_ops"))) op[1];
589};
590
591/* GIMPLE_OMP_CRITICAL */
592
595{
596 /* [ WORD 1-7 ] : base class */
598 /* [ WORD 8 ] */
599 tree clauses;
601 /* [ WORD 9 ]
602 Critical section name. */
603 tree name;
604};
606
607struct GTY(()) gimple_omp_for_iter {
608 /* Condition code. */
609 enum tree_code cond;
611 /* Index variable. */
612 tree index;
613
614 /* Initial value. */
615 tree initial;
616
617 /* Final value. */
618 tree final;
619
620 /* Increment. */
621 tree incr;
622};
623
624/* GIMPLE_OMP_FOR */
625
626struct GTY((tag("GSS_OMP_FOR")))
628{
629 /* [ WORD 1-7 ] : base class */
630
631 /* [ WORD 8 ] */
632 tree clauses;
634 /* [ WORD 9 ]
635 Number of elements in iter array. */
636 size_t collapse;
638 /* [ WORD 10 ] */
639 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
640
641 /* [ WORD 11 ]
642 Pre-body evaluated before the loop body begins. */
643 gimple_seq pre_body;
644};
646
647/* GIMPLE_OMP_PARALLEL, GIMPLE_OMP_TARGET, GIMPLE_OMP_TASK, GIMPLE_OMP_TEAMS */
648
651{
652 /* [ WORD 1-7 ] : base class */
653
654 /* [ WORD 8 ]
655 Clauses. */
656 tree clauses;
657
658 /* [ WORD 9 ]
659 Child function holding the body of the parallel region. */
660 tree child_fn;
662 /* [ WORD 10 ]
663 Shared data argument. */
664 tree data_arg;
665};
666
667/* GIMPLE_OMP_PARALLEL or GIMPLE_TASK */
668struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
670{
671 /* No extra fields; adds invariant:
672 stmt->code == GIMPLE_OMP_PARALLEL
673 || stmt->code == GIMPLE_OMP_TASK
674 || stmt->code == GIMPLE_OMP_TEAMS. */
676
677/* GIMPLE_OMP_PARALLEL */
678struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
681 /* No extra fields; adds invariant:
682 stmt->code == GIMPLE_OMP_PARALLEL. */
683};
684
685/* GIMPLE_OMP_TARGET */
686struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
688{
689 /* No extra fields; adds invariant:
690 stmt->code == GIMPLE_OMP_TARGET. */
691};
692
693/* GIMPLE_OMP_TASK */
694
695struct GTY((tag("GSS_OMP_TASK")))
697{
698 /* [ WORD 1-10 ] : base class */
699
700 /* [ WORD 11 ]
701 Child function holding firstprivate initialization if needed. */
703
704 /* [ WORD 12-13 ]
705 Size and alignment in bytes of the argument data block. */
706 tree arg_size;
707 tree arg_align;
709
710
711/* GIMPLE_OMP_SECTION */
712/* Uses struct gimple_statement_omp. */
714
715/* GIMPLE_OMP_SECTIONS */
717struct GTY((tag("GSS_OMP_SECTIONS")))
719{
720 /* [ WORD 1-7 ] : base class */
721
722 /* [ WORD 8 ] */
723 tree clauses;
724
725 /* [ WORD 9 ]
726 The control variable used for deciding which of the sections to
727 execute. */
728 tree control;
729};
731/* GIMPLE_OMP_CONTINUE.
732
733 Note: This does not inherit from gimple_statement_omp, because we
734 do not need the body field. */
735
736struct GTY((tag("GSS_OMP_CONTINUE")))
737 gomp_continue : public gimple
738{
739 /* [ WORD 1-6 ] : base class */
740
741 /* [ WORD 7 ] */
742 tree control_def;
743
744 /* [ WORD 8 ] */
745 tree control_use;
746};
747
748/* GIMPLE_OMP_SINGLE, GIMPLE_OMP_ORDERED, GIMPLE_OMP_TASKGROUP,
749 GIMPLE_OMP_SCAN, GIMPLE_OMP_MASKED, GIMPLE_OMP_SCOPE. */
750
751struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
753{
754 /* [ WORD 1-7 ] : base class */
755
756 /* [ WORD 8 ] */
757 tree clauses;
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
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
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
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, ...);
1556gcall *gimple_build_call_internal (enum internal_fn, unsigned, ...);
1570gimple *gimple_build_nop (void);
1580 enum gimple_try_flags);
1594 tree, tree);
1611 enum omp_memory_order);
1615extern void gimple_seq_add_stmt (gimple_seq *, gimple *);
1620 location_t);
1624bool gimple_call_same_target_p (const gimple *, const gimple *);
1625int gimple_call_flags (const gimple *);
1626int gimple_call_arg_flags (const gcall *, unsigned);
1627int gimple_call_retslot_flags (const gcall *);
1629int gimple_call_return_flags (const gcall *);
1635bool gimple_assign_load_p (const gimple *);
1639 tree, tree, tree);
1640tree gimple_get_lhs (const gimple *);
1641void gimple_set_lhs (gimple *, tree);
1643void gimple_move_vops (gimple *, gimple *);
1644bool gimple_has_side_effects (const gimple *);
1645bool gimple_could_trap_p_1 (const gimple *, bool, bool);
1646bool gimple_could_trap_p (const gimple *);
1648extern void dump_gimple_statistics (void);
1649unsigned get_gimple_rhs_num_ops (enum tree_code);
1659extern bool gimple_call_builtin_p (const gimple *);
1660extern bool gimple_call_builtin_p (const gimple *, enum built_in_class);
1661extern bool gimple_call_builtin_p (const gimple *, enum built_in_function);
1663extern void dump_decl_set (FILE *, bitmap);
1664extern bool nonfreeing_call_p (gimple *);
1665extern bool nonbarrier_call_p (gimple *);
1666extern bool infer_nonnull_range (gimple *, tree);
1673extern void maybe_remove_unused_call_args (struct function *, gimple *);
1674extern bool gimple_inexpensive_call_p (gcall *);
1675extern bool stmt_can_terminate_bb_p (gimple *);
1678
1679/* Return the disposition for a warning (or all warnings by default)
1680 for a statement. */
1681extern bool warning_suppressed_p (const gimple *, opt_code = all_warnings)
1683/* Set the disposition for a warning (or all warnings by default)
1684 at a location to enabled by default. */
1686 bool = true) ATTRIBUTE_NONNULL (1);
1687
1688/* Copy the warning disposition mapping from one statement to another. */
1691/* Copy the warning disposition mapping from an expression to a statement. */
1694/* Copy the warning disposition mapping from a statement to an expression. */
1697
1698/* Formal (expression) temporary table handling: multiple occurrences of
1699 the same scalar expression are evaluated into the same temporary. */
1700
1702{
1703 tree val; /* Key */
1704 tree temp; /* Value */
1705} elt_t;
1706
1707/* Get the number of the next statement uid to be allocated. */
1708inline unsigned int
1709gimple_stmt_max_uid (struct function *fn)
1710{
1711 return fn->last_stmt_uid;
1712}
1714/* Set the number of the next statement uid to be allocated. */
1715inline void
1716set_gimple_stmt_max_uid (struct function *fn, unsigned int maxid)
1717{
1718 fn->last_stmt_uid = maxid;
1719}
1720
1721/* Set the number of the next statement uid to be allocated. */
1722inline unsigned int
1724{
1725 return fn->last_stmt_uid++;
1726}
1727
1728/* Return the first node in GIMPLE sequence S. */
1729
1730inline gimple_seq_node
1733 return s;
1734}
1735
1736
1737/* Return the first statement in GIMPLE sequence S. */
1738
1739inline gimple *
1743 return n;
1744}
1745
1746/* Return the first statement in GIMPLE sequence S as a gbind *,
1747 verifying that it has code GIMPLE_BIND in a checked build. */
1748
1749inline gbind *
1754}
1755
1756
1757/* Return the last node in GIMPLE sequence S. */
1759inline gimple_seq_node
1761{
1762 return s ? s->prev : NULL;
1763}
1764
1765
1766/* Return the last statement in GIMPLE sequence S. */
1767
1768inline gimple *
1773}
1774
1776/* Set the last node in GIMPLE sequence *PS to LAST. */
1777
1778inline void
1780{
1781 (*ps)->prev = last;
1782}
1784
1785/* Set the first node in GIMPLE sequence *PS to FIRST. */
1786
1787inline void
1789{
1790 *ps = first;
1791}
1792
1794/* Return true if GIMPLE sequence S is empty. */
1795
1796inline bool
1798{
1799 return s == NULL;
1800}
1801
1802/* Allocate a new sequence and initialize its first element with STMT. */
1803
1804inline gimple_seq
1806{
1807 gimple_seq seq = NULL;
1808 gimple_seq_add_stmt (&seq, stmt);
1809 return seq;
1810}
1811
1813/* Returns the sequence of statements in BB. */
1814
1815inline gimple_seq
1817{
1818 return (!(bb->flags & BB_RTL)) ? bb->il.gimple.seq : NULL;
1819}
1820
1821inline gimple_seq *
1823{
1824 return (!(bb->flags & BB_RTL)) ? &bb->il.gimple.seq : NULL;
1825}
1826
1827/* Sets the sequence of statements in BB to SEQ. */
1828
1829inline void
1831{
1832 gcc_checking_assert (!(bb->flags & BB_RTL));
1833 bb->il.gimple.seq = seq;
1834}
1835
1836
1837/* Return the code for GIMPLE statement G. */
1838
1839inline enum gimple_code
1840gimple_code (const gimple *g)
1841{
1842 return g->code;
1843}
1844
1845
1846/* Return the GSS code used by a GIMPLE code. */
1847
1849gss_for_code (enum gimple_code code)
1850{
1852 return gss_for_code_[code];
1853}
1854
1855
1856/* Return which GSS code is used by GS. */
1857
1861 return gss_for_code (gimple_code (gs));
1862}
1863
1864
1865/* Return true if statement G has sub-statements. This is only true for
1866 High GIMPLE statements. */
1867
1868inline bool
1870{
1871 switch (gimple_code (g))
1872 {
1873 case GIMPLE_ASSUME:
1874 case GIMPLE_BIND:
1875 case GIMPLE_CATCH:
1876 case GIMPLE_EH_FILTER:
1877 case GIMPLE_EH_ELSE:
1878 case GIMPLE_TRY:
1879 case GIMPLE_OMP_FOR:
1884 case GIMPLE_OMP_SECTION:
1887 case GIMPLE_OMP_TASK:
1892 case GIMPLE_OMP_TEAMS:
1895 case GIMPLE_TRANSACTION:
1896 return true;
1898 default:
1899 return false;
1900 }
1901}
1902
1903
1904/* Return the basic block holding statement G. */
1906inline basic_block
1907gimple_bb (const gimple *g)
1908{
1909 return g->bb;
1910}
1911
1912
1913/* Return the lexical scope block holding statement G. */
1914
1915inline tree
1917{
1918 return LOCATION_BLOCK (g->location);
1919}
1920
1921/* Forward declare. */
1922inline void gimple_set_location (gimple *, location_t);
1923
1924/* Set BLOCK to be the lexical scope block holding statement G. */
1926inline void
1927gimple_set_block (gimple *g, tree block)
1928{
1929 gimple_set_location (g, set_block (g->location, block));
1930}
1931
1932/* Return location information for statement G. */
1933
1935gimple_location (const gimple *g)
1936{
1937 return g->location;
1938}
1939
1940/* Return location information for statement G if g is not NULL.
1941 Otherwise, UNKNOWN_LOCATION is returned. */
1942
1943inline location_t
1945{
1946 return g ? gimple_location (g) : UNKNOWN_LOCATION;
1947}
1949/* Set location information for statement G. */
1950
1951inline void
1953{
1954 /* Copy the no-warning data to the statement location. */
1955 if (g->location != UNKNOWN_LOCATION)
1956 copy_warning (location, g->location);
1957 g->location = location;
1958}
1959
1960/* Return address of the location information for statement G. */
1961
1962inline location_t *
1964{
1965 return &g->location;
1967
1968
1969/* Return true if G contains location information. */
1970
1971inline bool
1973{
1976
1977
1978/* Return non-artificial location information for statement G. */
1979
1980inline location_t
1982{
1984
1985 if (tree block = gimple_block (g))
1987
1988 return ploc ? *ploc : gimple_location (g);
1989}
1990
1991
1992/* Return the file name of the location of STMT. */
1993
1994inline const char *
1995gimple_filename (const gimple *stmt)
1996{
1997 return LOCATION_FILE (gimple_location (stmt));
1998}
1999
2000
2001/* Return the line number of the location of STMT. */
2002
2003inline int
2004gimple_lineno (const gimple *stmt)
2005{
2006 return LOCATION_LINE (gimple_location (stmt));
2007}
2008
2009
2010/* Determine whether SEQ is a singleton. */
2011
2012inline bool
2014{
2015 return ((gimple_seq_first (seq) != NULL)
2016 && (gimple_seq_first (seq) == gimple_seq_last (seq)));
2017}
2018
2019/* Return true if no warnings should be emitted for statement STMT. */
2020
2021inline bool
2022gimple_no_warning_p (const gimple *stmt)
2023{
2024 return stmt->no_warning;
2025}
2026
2027/* Set the no_warning flag of STMT to NO_WARNING. */
2028
2029inline void
2031{
2032 stmt->no_warning = (unsigned) no_warning;
2033}
2034
2035/* Set the visited status on statement STMT to VISITED_P.
2037 Please note that this 'visited' property of the gimple statement is
2038 supposed to be undefined at pass boundaries. This means that a
2039 given pass should not assume it contains any useful value when the
2040 pass starts and thus can set it to any value it sees fit.
2041
2042 You can learn more about the visited property of the gimple
2043 statement by reading the comments of the 'visited' data member of
2044 struct gimple.
2045 */
2046
2047inline void
2048gimple_set_visited (gimple *stmt, bool visited_p)
2049{
2050 stmt->visited = (unsigned) visited_p;
2051}
2052
2053
2054/* Return the visited status for statement STMT.
2055
2056 Please note that this 'visited' property of the gimple statement is
2057 supposed to be undefined at pass boundaries. This means that a
2058 given pass should not assume it contains any useful value when the
2059 pass starts and thus can set it to any value it sees fit.
2060
2061 You can learn more about the visited property of the gimple
2062 statement by reading the comments of the 'visited' data member of
2063 struct gimple. */
2064
2065inline bool
2067{
2068 return stmt->visited;
2069}
2071
2072/* Set pass local flag PLF on statement STMT to VAL_P.
2073
2074 Please note that this PLF property of the gimple statement is
2075 supposed to be undefined at pass boundaries. This means that a
2076 given pass should not assume it contains any useful value when the
2077 pass starts and thus can set it to any value it sees fit.
2078
2079 You can learn more about the PLF property by reading the comment of
2080 the 'plf' data member of struct gimple_statement_structure. */
2081
2082inline void
2083gimple_set_plf (gimple *stmt, enum plf_mask plf, bool val_p)
2085 if (val_p)
2086 stmt->plf |= (unsigned int) plf;
2087 else
2088 stmt->plf &= ~((unsigned int) plf);
2089}
2090
2091
2092/* Return the value of pass local flag PLF on statement STMT.
2094 Please note that this 'plf' property of the gimple statement is
2095 supposed to be undefined at pass boundaries. This means that a
2096 given pass should not assume it contains any useful value when the
2097 pass starts and thus can set it to any value it sees fit.
2098
2099 You can learn more about the plf property by reading the comment of
2100 the 'plf' data member of struct gimple_statement_structure. */
2101
2102inline unsigned int
2103gimple_plf (gimple *stmt, enum plf_mask plf)
2104{
2105 return stmt->plf & ((unsigned int) plf);
2106}
2107
2108
2109/* Set the UID of statement.
2110
2111 Please note that this UID property is supposed to be undefined at
2112 pass boundaries. This means that a given pass should not assume it
2113 contains any useful value when the pass starts and thus can set it
2114 to any value it sees fit. */
2115
2116inline void
2117gimple_set_uid (gimple *g, unsigned uid)
2118{
2119 g->uid = uid;
2120}
2121
2122
2123/* Return the UID of statement.
2124
2125 Please note that this UID property is supposed to be undefined at
2126 pass boundaries. This means that a given pass should not assume it
2127 contains any useful value when the pass starts and thus can set it
2128 to any value it sees fit. */
2129
2130inline unsigned
2131gimple_uid (const gimple *g)
2132{
2133 return g->uid;
2134}
2136
2137/* Make statement G a singleton sequence. */
2138
2139inline void
2141{
2142 g->next = NULL;
2143 g->prev = g;
2144}
2145
2146
2147/* Return true if GIMPLE statement G has register or memory operands. */
2148
2149inline bool
2150gimple_has_ops (const gimple *g)
2152 return gimple_code (g) >= GIMPLE_COND && gimple_code (g) <= GIMPLE_RETURN;
2153}
2154
2155template <>
2156template <>
2157inline bool
2159{
2160 return gimple_has_ops (gs);
2161}
2162
2163template <>
2164template <>
2165inline bool
2167{
2168 return gimple_has_ops (gs);
2169}
2170
2171/* Return true if GIMPLE statement G has memory operands. */
2172
2173inline bool
2177}
2178
2179template <>
2180template <>
2181inline bool
2183{
2184 return gimple_has_mem_ops (gs);
2185}
2186
2187template <>
2188template <>
2189inline bool
2191{
2192 return gimple_has_mem_ops (gs);
2193}
2194
2195/* Return the set of USE operands for statement G. */
2196
2197inline struct use_optype_d *
2198gimple_use_ops (const gimple *g)
2202 if (!ops_stmt)
2203 return NULL;
2204 return ops_stmt->use_ops;
2205}
2206
2207
2208/* Set USE to be the set of USE operands for statement G. */
2209
2210inline void
2219/* Return the single VUSE operand of the statement G. */
2220
2221inline tree
2222gimple_vuse (const gimple *g)
2229}
2230
2231/* Return the single VDEF operand of the statement G. */
2232
2239 return NULL_TREE;
2240 return mem_ops_stmt->vdef;
2241}
2242
2243/* Return the single VUSE operand of the statement G. */
2244
2250 if (!mem_ops_stmt)
2251 return NULL;
2252 return &mem_ops_stmt->vuse;
2253}
2254
2255/* Return the single VDEF operand of the statement G. */
2256
2257inline tree *
2259{
2262 if (!mem_ops_stmt)
2263 return NULL;
2264 return &mem_ops_stmt->vdef;
2266
2267/* Set the single VUSE operand of the statement G. */
2268
2269inline void
2271{
2274 mem_ops_stmt->vuse = vuse;
2275}
2276
2277/* Set the single VDEF operand of the statement G. */
2278
2279inline void
2281{
2284 mem_ops_stmt->vdef = vdef;
2285}
2287
2288/* Return true if statement G has operands and the modified field has
2289 been set. */
2290
2291inline bool
2292gimple_modified_p (const gimple *g)
2293{
2294 return (gimple_has_ops (g)) ? (bool) g->modified : false;
2295}
2296
2297
2298/* Set the MODIFIED flag to MODIFIEDP, iff the gimple statement G has
2299 a MODIFIED field. */
2300
2301inline void
2304 if (gimple_has_ops (s))
2306}
2307
2308
2309/* Return true if statement STMT contains volatile operands. */
2310
2311inline bool
2312gimple_has_volatile_ops (const gimple *stmt)
2314 if (gimple_has_mem_ops (stmt))
2315 return stmt->has_volatile_ops;
2316 else
2317 return false;
2318}
2319
2320
2321/* Set the HAS_VOLATILE_OPS flag to VOLATILEP. */
2322
2323inline void
2325{
2326 if (gimple_has_mem_ops (stmt))
2328}
2329
2330/* Return true if STMT is in a transaction. */
2331
2332inline bool
2333gimple_in_transaction (const gimple *stmt)
2334{
2336}
2337
2338/* Return true if statement STMT may access memory. */
2339
2340inline bool
2342{
2343 return gimple_has_mem_ops (stmt) && gimple_vuse (stmt);
2344}
2346
2347/* Return the subcode for OMP statement S. */
2348
2349inline unsigned
2350gimple_omp_subcode (const gimple *s)
2351{
2354 return s->subcode;
2355}
2357/* Set the subcode for OMP statement S to SUBCODE. */
2358
2359inline void
2360gimple_omp_set_subcode (gimple *s, unsigned int subcode)
2361{
2362 /* We only have 16 bits for the subcode. Assert that we are not
2363 overflowing it. */
2364 gcc_gimple_checking_assert (subcode < (1 << 16));
2365 s->subcode = subcode;
2366}
2368/* Set the nowait flag on OMP_RETURN statement S. */
2369
2370inline void
2372{
2375}
2376
2377
2378/* Return true if OMP return statement G has the GF_OMP_RETURN_NOWAIT
2379 flag set. */
2380
2381inline bool
2383{
2385 return (gimple_omp_subcode (g) & GF_OMP_RETURN_NOWAIT) != 0;
2386}
2387
2388
2389/* Set the LHS of OMP return. */
2390
2391inline void
2393{
2396 omp_return_stmt->val = lhs;
2397}
2398
2399
2400/* Get the LHS of OMP return. */
2401
2402inline tree
2404{
2407 return omp_return_stmt->val;
2408}
2409
2411/* Return a pointer to the LHS of OMP return. */
2412
2413inline tree *
2415{
2418 return &omp_return_stmt->val;
2419}
2420
2422/* Return true if OMP section statement G has the GF_OMP_SECTION_LAST
2423 flag set. */
2424
2425inline bool
2427{
2429 return (gimple_omp_subcode (g) & GF_OMP_SECTION_LAST) != 0;
2430}
2431
2433/* Set the GF_OMP_SECTION_LAST flag on G. */
2434
2435inline void
2437{
2439 g->subcode |= GF_OMP_SECTION_LAST;
2440}
2441
2442
2443/* Return true if OMP ordered construct is stand-alone
2444 (G has the GF_OMP_ORDERED_STANDALONE flag set). */
2445
2446inline bool
2448{
2451}
2452
2453
2454/* Set the GF_OMP_ORDERED_STANDALONE flag on G. */
2455
2456inline void
2463
2464/* Return true if OMP parallel statement G has the
2465 GF_OMP_PARALLEL_COMBINED flag set. */
2466
2467inline bool
2472}
2473
2474
2475/* Set the GF_OMP_PARALLEL_COMBINED field in G depending on the boolean
2476 value of COMBINED_P. */
2477
2478inline void
2482 if (combined_p)
2483 g->subcode |= GF_OMP_PARALLEL_COMBINED;
2484 else
2485 g->subcode &= ~GF_OMP_PARALLEL_COMBINED;
2486}
2487
2488
2489/* Return true if OMP atomic load/store statement G has the
2490 GF_OMP_ATOMIC_NEED_VALUE flag set. */
2498}
2499
2500
2501/* Set the GF_OMP_ATOMIC_NEED_VALUE flag on G. */
2502
2510
2511
2512/* Return true if OMP atomic load/store statement G has the
2513 GF_OMP_ATOMIC_WEAK flag set. */
2514
2515inline bool
2517{
2520 return (gimple_omp_subcode (g) & GF_OMP_ATOMIC_WEAK) != 0;
2521}
2522
2523
2524/* Set the GF_OMP_ATOMIC_WEAK flag on G. */
2525
2526inline void
2528{
2531 g->subcode |= GF_OMP_ATOMIC_WEAK;
2532}
2534
2535/* Return the memory order of the OMP atomic load/store statement G. */
2536
2537inline enum omp_memory_order
2539{
2542 return (enum omp_memory_order)
2544}
2545
2546
2547/* Set the memory order on G. */
2548
2549inline void
2551{
2554 g->subcode = ((g->subcode & ~GF_OMP_ATOMIC_MEMORY_ORDER)
2556}
2557
2558
2559/* Return the number of operands for statement GS. */
2560
2561inline unsigned
2562gimple_num_ops (const gimple *gs)
2563{
2564 return gs->num_ops;
2565}
2566
2567
2568/* Set the number of operands for statement GS. */
2569
2570inline void
2571gimple_set_num_ops (gimple *gs, unsigned num_ops)
2572{
2573 gs->num_ops = num_ops;
2574}
2575
2576
2577/* Return the array of operands for statement GS. */
2579inline tree *
2581{
2582 size_t off;
2583
2584 /* All the tuples have their operand vector at the very bottom
2585 of the structure. Note that those structures that do not
2586 have an operand vector have a zero offset. */
2588 gcc_gimple_checking_assert (off != 0);
2589
2590 return (tree *) ((char *) gs + off);
2591}
2593
2594/* Return operand I for statement GS. */
2595
2596inline tree
2597gimple_op (const gimple *gs, unsigned i)
2598{
2599 if (gimple_has_ops (gs))
2600 {
2605 return NULL_TREE;
2606}
2607
2608/* Return a pointer to operand I for statement GS. */
2610inline tree *
2611gimple_op_ptr (gimple *gs, unsigned i)
2612{
2613 if (gimple_has_ops (gs))
2614 {
2616 return gimple_ops (gs) + i;
2617 }
2618 else
2619 return NULL;
2620}
2621
2622/* Set operand I of statement GS to OP. */
2623
2624inline void
2629 /* Note. It may be tempting to assert that OP matches
2630 is_gimple_operand, but that would be wrong. Different tuples
2631 accept slightly different sets of tree operands. Each caller
2632 should perform its own validation. */
2633 gimple_ops (gs)[i] = op;
2634}
2635
2636/* Return true if GS is a GIMPLE_ASSIGN. */
2637
2638inline bool
2639is_gimple_assign (const gimple *gs)
2640{
2642}
2643
2644/* Determine if expression CODE is one of the valid expressions that can
2645 be used on the RHS of GIMPLE assignments. */
2646
2647inline enum gimple_rhs_class
2649{
2650 return (enum gimple_rhs_class) gimple_rhs_class_table[(int) code];
2651}
2652
2653/* Return the LHS of assignment statement GS. */
2654
2655inline tree
2657{
2658 return gs->op[0];
2659}
2661inline tree
2663{
2665 return gimple_assign_lhs (ass);
2667
2668
2669/* Return a pointer to the LHS of assignment statement GS. */
2670
2671inline tree *
2673{
2674 return &gs->op[0];
2675}
2676
2681 return gimple_assign_lhs_ptr (ass);
2682}
2684
2685/* Set LHS to be the LHS operand of assignment statement GS. */
2686
2687inline void
2689{
2690 gs->op[0] = lhs;
2691
2692 if (lhs && TREE_CODE (lhs) == SSA_NAME)
2693 SSA_NAME_DEF_STMT (lhs) = gs;
2694}
2695
2696inline void
2703
2704/* Return the first operand on the RHS of assignment statement GS. */
2705
2706inline tree
2708{
2709 return gs->op[1];
2710}
2711
2712inline tree
2714{
2716 return gimple_assign_rhs1 (ass);
2717}
2719
2720/* Return a pointer to the first operand on the RHS of assignment
2721 statement GS. */
2722
2723inline tree *
2725{
2726 return &gs->op[1];
2727}
2728
2734}
2735
2736/* Set RHS to be the first operand on the RHS of assignment statement GS. */
2737
2738inline void
2740{
2741 gs->op[1] = rhs;
2742}
2743
2744inline void
2751
2752/* Return the second operand on the RHS of assignment statement GS.
2753 If GS does not have two operands, NULL is returned instead. */
2754
2755inline tree
2757{
2758 if (gimple_num_ops (gs) >= 3)
2759 return gs->op[2];
2760 else
2761 return NULL_TREE;
2762}
2764inline tree
2766{
2768 return gimple_assign_rhs2 (ass);
2769}
2770
2771
2772/* Return a pointer to the second operand on the RHS of assignment
2773 statement GS. */
2774
2775inline tree *
2777{
2779 return &gs->op[2];
2780}
2781
2788
2789
2790/* Set RHS to be the second operand on the RHS of assignment statement GS. */
2791
2792inline void
2794{
2796 gs->op[2] = rhs;
2797}
2798
2799inline void
2805
2806/* Return the third operand on the RHS of assignment statement GS.
2807 If GS does not have two operands, NULL is returned instead. */
2808
2809inline tree
2812 if (gimple_num_ops (gs) >= 4)
2813 return gs->op[3];
2814 else
2815 return NULL_TREE;
2816}
2817
2818inline tree
2820{
2822 return gimple_assign_rhs3 (ass);
2823}
2824
2825/* Return a pointer to the third operand on the RHS of assignment
2826 statement GS. */
2827
2828inline tree *
2834}
2835
2836
2837/* Set RHS to be the third operand on the RHS of assignment statement GS. */
2839inline void
2841{
2843 gs->op[3] = rhs;
2844}
2845
2846inline void
2848{
2851}
2852
2853
2854/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
2855 which expect to see only two operands. */
2856
2857inline void
2859 tree op1, tree op2)
2860{
2861 gimple_assign_set_rhs_with_ops (gsi, code, op1, op2, NULL);
2862}
2864/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
2865 which expect to see only one operands. */
2866
2867inline void
2869 tree op1)
2870{
2871 gimple_assign_set_rhs_with_ops (gsi, code, op1, NULL, NULL);
2872}
2873
2874/* Returns true if GS is a nontemporal move. */
2875
2876inline bool
2878{
2879 return gs->nontemporal_move;
2880}
2881
2882/* Sets nontemporal move flag of GS to NONTEMPORAL. */
2883
2884inline void
2888 gs->nontemporal_move = nontemporal;
2889}
2890
2891
2892/* Return the code of the expression computed on the rhs of assignment
2893 statement GS. In case that the RHS is a single object, returns the
2894 tree code of the object. */
2895
2896inline enum tree_code
2899 enum tree_code code = (enum tree_code) gs->subcode;
2900 /* While we initially set subcode to the TREE_CODE of the rhs for
2901 GIMPLE_SINGLE_RHS assigns we do not update that subcode to stay
2902 in sync when we rewrite stmts into SSA form or do SSA propagations. */
2904 code = TREE_CODE (gs->op[1]);
2905
2906 return code;
2908
2909inline enum tree_code
2911{
2913 return gimple_assign_rhs_code (ass);
2914}
2915
2917/* Set CODE to be the code for the expression computed on the RHS of
2918 assignment S. */
2919
2920inline void
2922{
2924 s->subcode = code;
2925}
2926
2927
2928/* Return the gimple rhs class of the code of the expression computed on
2929 the rhs of assignment statement GS.
2930 This will never return GIMPLE_INVALID_RHS. */
2931
2937
2938/* Return true if GS is an assignment with a singleton RHS, i.e.,
2939 there is no operator associated with the assignment itself.
2940 Unlike gimple_assign_copy_p, this predicate returns true for
2941 any RHS operand, including those that perform an operation
2942 and do not have the semantics of a copy, such as COND_EXPR. */
2943
2944inline bool
2946{
2947 return (is_gimple_assign (gs)
2949}
2951/* Return true if GS performs a store to its lhs. */
2952
2953inline bool
2954gimple_store_p (const gimple *gs)
2955{
2956 tree lhs = gimple_get_lhs (gs);
2957 return lhs && !is_gimple_reg (lhs);
2959
2960/* Return true if S is a type-cast assignment. */
2961
2962inline bool
2965 if (is_gimple_assign (s))
2966 {
2968 return CONVERT_EXPR_CODE_P (sc)
2969 || sc == VIEW_CONVERT_EXPR
2970 || sc == FIX_TRUNC_EXPR;
2971 }
2972
2973 return false;
2975
2976/* Return true if S is a clobber statement. */
2977
2978inline bool
2979gimple_clobber_p (const gimple *s)
2981 return gimple_assign_single_p (s)
2983}
2984
2985/* Return true if S is a clobber statement. */
2986
2987inline bool
2988gimple_clobber_p (const gimple *s, enum clobber_kind kind)
2989{
2991 && CLOBBER_KIND (gimple_assign_rhs1 (s)) == kind;
2992}
2993
2994/* Return true if GS is a GIMPLE_CALL. */
2995
2996inline bool
2997is_gimple_call (const gimple *gs)
2999 return gimple_code (gs) == GIMPLE_CALL;
3000}
3001
3002/* Return the LHS of call statement GS. */
3003
3004inline tree
3005gimple_call_lhs (const gcall *gs)
3006{
3007 return gs->op[0];
3008}
3010inline tree
3011gimple_call_lhs (const gimple *gs)
3012{
3014 return gimple_call_lhs (gc);
3016
3017
3018/* Return a pointer to the LHS of call statement GS. */
3019
3020inline tree *
3022{
3023 return &gs->op[0];
3025
3026inline tree *
3028{
3030 return gimple_call_lhs_ptr (gc);
3031}
3033
3034/* Set LHS to be the LHS operand of call statement GS. */
3035
3036inline void
3038{
3039 gs->op[0] = lhs;
3040 if (lhs && TREE_CODE (lhs) == SSA_NAME)
3041 SSA_NAME_DEF_STMT (lhs) = gs;
3042}
3044inline void
3046{
3048 gimple_call_set_lhs (gc, lhs);
3049}
3051
3052/* Return true if call GS calls an internal-only function, as enumerated
3053 by internal_fn. */
3054
3055inline bool
3057{
3058 return (gs->subcode & GF_CALL_INTERNAL) != 0;
3060
3061inline bool
3063{
3066}
3067
3068/* Return true if call GS is marked as nocf_check. */
3069
3070inline bool
3072{
3073 return (gs->subcode & GF_CALL_NOCF_CHECK) != 0;
3075
3076/* Mark statement GS as nocf_check call. */
3077
3078inline void
3080{
3081 if (nocf_check)
3082 gs->subcode |= GF_CALL_NOCF_CHECK;
3083 else
3084 gs->subcode &= ~GF_CALL_NOCF_CHECK;
3086
3087/* Return the target of internal call GS. */
3088
3089inline enum internal_fn
3091{
3093 return gs->u.internal_fn;
3095
3096inline enum internal_fn
3098{
3100 return gimple_call_internal_fn (gc);
3101}
3102
3103/* Return true, if this internal gimple call is unique. */
3105inline bool
3107{
3109}
3111inline bool
3113{
3116}
3117
3118/* Return true if GS is an internal function FN. */
3119
3120inline bool
3122{
3123 return (is_gimple_call (gs)
3125 && gimple_call_internal_fn (gs) == fn);
3126}
3127
3128/* If CTRL_ALTERING_P is true, mark GIMPLE_CALL S to be a stmt
3129 that could alter control flow. */
3130
3131inline void
3133{
3134 if (ctrl_altering_p)
3136 else
3142{
3145}
3146
3147/* Return true if call GS calls an func whose GF_CALL_CTRL_ALTERING
3148 flag is set. Such call could not be a stmt in the middle of a bb. */
3149
3150inline bool
3152{
3153 return (gs->subcode & GF_CALL_CTRL_ALTERING) != 0;
3155
3156inline bool
3158{
3161}
3162
3163
3164/* Return the function type of the function called by GS. */
3165
3166inline tree
3168{
3171 return gs->u.fntype;
3172}
3173
3174inline tree
3176{
3177 const gcall *call_stmt = GIMPLE_CHECK2<const gcall *> (gs);
3178 return gimple_call_fntype (call_stmt);
3179}
3181/* Set the type of the function called by CALL_STMT to FNTYPE. */
3182
3183inline void
3184gimple_call_set_fntype (gcall *call_stmt, tree fntype)
3185{
3187 call_stmt->u.fntype = fntype;
3188}
3189
3191/* Return the tree node representing the function called by call
3192 statement GS. */
3193
3194inline tree
3195gimple_call_fn (const gcall *gs)
3196{
3197 return gs->op[1];
3199
3200inline tree
3201gimple_call_fn (const gimple *gs)
3202{
3204 return gimple_call_fn (gc);
3205}
3206
3207/* Return a pointer to the tree node representing the function called by call
3208 statement GS. */
3209
3210inline tree *
3212{
3213 return &gs->op[1];
3214}
3215
3216inline tree *
3218{
3221}
3222
3223
3224/* Set FN to be the function called by call statement GS. */
3225
3226inline void
3228{
3230 gs->op[1] = fn;
3231}
3232
3233
3234/* Set FNDECL to be the function called by call statement GS. */
3235
3249}
3250
3251
3252/* Set internal function FN to be the function called by call statement CALL_STMT. */
3253
3254inline void
3255gimple_call_set_internal_fn (gcall *call_stmt, enum internal_fn fn)
3256{
3258 call_stmt->u.internal_fn = fn;
3259}
3260
3261
3262/* If a given GIMPLE_CALL's callee is a FUNCTION_DECL, return it.
3263 Otherwise return NULL. This function is analogous to
3264 get_callee_fndecl in tree land. */
3265
3266inline tree
3270}
3271
3272inline tree
3274{
3277}
3278
3279
3280/* Return the type returned by call statement GS. */
3281
3282inline tree
3284{
3286
3287 if (type == NULL_TREE)
3288 return TREE_TYPE (gimple_call_lhs (gs));
3289
3290 /* The type returned by a function is the type of its
3291 function type. */
3292 return TREE_TYPE (type);
3293}
3294
3295
3296/* Return the static chain for call statement GS. */
3297
3298inline tree
3299gimple_call_chain (const gcall *gs)
3300{
3301 return gs->op[2];
3302}
3303
3304inline tree
3306{
3309}
3310
3311
3312/* Return a pointer to the static chain for call statement CALL_STMT. */
3313
3314inline tree *
3315gimple_call_chain_ptr (gcall *call_stmt)
3316{
3317 return &call_stmt->op[2];
3318}
3320/* Set CHAIN to be the static chain for call statement CALL_STMT. */
3321
3322inline void
3324{
3325 call_stmt->op[2] = chain;
3327
3328
3329/* Return the number of arguments used by call statement GS. */
3330
3331inline unsigned
3333{
3334 return gimple_num_ops (gs) - 3;
3335}
3337inline unsigned
3339{
3341 return gimple_call_num_args (gc);
3342}
3344
3345/* Return the argument at position INDEX for call statement GS. */
3346
3347inline tree
3348gimple_call_arg (const gcall *gs, unsigned index)
3349{
3351 return gs->op[index + 3];
3352}
3353
3354inline tree
3355gimple_call_arg (const gimple *gs, unsigned index)
3356{
3358 return gimple_call_arg (gc, index);
3359}
3360
3361
3362/* Return a pointer to the argument at position INDEX for call
3363 statement GS. */
3364
3365inline tree *
3366gimple_call_arg_ptr (gcall *gs, unsigned index)
3369 return &gs->op[index + 3];
3370}
3371
3372inline tree *
3373gimple_call_arg_ptr (gimple *gs, unsigned index)
3374{
3376 return gimple_call_arg_ptr (gc, index);
3377}
3378
3379
3380/* Set ARG to be the argument at position INDEX for call statement GS. */
3381
3382inline void
3383gimple_call_set_arg (gcall *gs, unsigned index, tree arg)
3384{
3386 gs->op[index + 3] = arg;
3388
3389inline void
3390gimple_call_set_arg (gimple *gs, unsigned index, tree arg)
3391{
3393 gimple_call_set_arg (gc, index, arg);
3394}
3395
3396
3397/* If TAIL_P is true, mark call statement S as being a tail call
3398 (i.e., a call just before the exit of a function). These calls are
3399 candidate for tail call optimization. */
3400
3401inline void
3403{
3404 if (tail_p)
3406 else
3408}
3410
3411/* Return true if GIMPLE_CALL S is marked as a tail call. */
3412
3413inline bool
3414gimple_call_tail_p (const gcall *s)
3415{
3416 return (s->subcode & GF_CALL_TAILCALL) != 0;
3417}
3418
3419/* Mark (or clear) call statement S as requiring tail call optimization. */
3420
3421inline void
3423{
3424 if (must_tail_p)
3426 else
3428}
3429
3430/* Return true if call statement has been marked as requiring
3431 tail call optimization. */
3432
3433inline bool
3435{
3436 return (s->subcode & GF_CALL_MUST_TAIL_CALL) != 0;
3437}
3438
3439/* If RETURN_SLOT_OPT_P is true mark GIMPLE_CALL S as valid for return
3440 slot optimization. This transformation uses the target of the call
3441 expansion as the return slot for calls that return in memory. */
3442
3443inline void
3445{
3448 else
3450}
3451
3452
3453/* Return true if S is marked for return slot optimization. */
3455inline bool
3457{
3458 return (s->subcode & GF_CALL_RETURN_SLOT_OPT) != 0;
3459}
3460
3461
3462/* If FROM_THUNK_P is true, mark GIMPLE_CALL S as being the jump from a
3463 thunk to the thunked-to function. */
3465inline void
3467{
3468 if (from_thunk_p)
3470 else
3472}
3473
3474
3475/* Return true if GIMPLE_CALL S is a jump from a thunk. */
3476
3477inline bool
3479{
3480 return (s->subcode & GF_CALL_FROM_THUNK) != 0;
3481}
3482
3483
3484/* If FROM_NEW_OR_DELETE_P is true, mark GIMPLE_CALL S as being a call
3485 to operator new or delete created from a new or delete expression. */
3492 else
3494}
3495
3496
3497/* Return true if GIMPLE_CALL S is a call to operator new or delete from
3498 from a new or delete expression. */
3499
3500inline bool
3502{
3504}
3505
3506
3507/* If PASS_ARG_PACK_P is true, GIMPLE_CALL S is a stdarg call that needs the
3508 argument pack in its argument list. */
3509
3510inline void
3512{
3513 if (pass_arg_pack_p)
3515 else
3517}
3518
3519
3520/* Return true if GIMPLE_CALL S is a stdarg call that needs the
3521 argument pack in its argument list. */
3522
3523inline bool
3525{
3526 return (s->subcode & GF_CALL_VA_ARG_PACK) != 0;
3527}
3528
3529
3530/* Return true if S is a noreturn call. */
3531
3532inline bool
3534{
3535 return (gimple_call_flags (s) & ECF_NORETURN) != 0;
3537
3538inline bool
3540{
3542 return gimple_call_noreturn_p (gc);
3543}
3544
3545
3546/* If NOTHROW_P is true, GIMPLE_CALL S is a call that is known to not throw
3547 even if the called function can throw in other cases. */
3548
3549inline void
3551{
3552 if (nothrow_p)
3554 else
3556}
3557
3558/* Return true if S is a nothrow call. */
3559
3560inline bool
3562{
3563 return (gimple_call_flags (s) & ECF_NOTHROW) != 0;
3565
3566/* If EXPECTED_THROW_P is true, GIMPLE_CALL S is a call that is known
3567 to be more likely to throw than to run forever, terminate the
3568 program or return by other means. */
3569
3570static inline void
3572{
3573 if (expected_throw_p)
3575 else
3577}
3578
3579/* Return true if S is a call that is more likely to end by
3580 propagating an exception than by other means. */
3581
3582static inline bool
3584{
3585 return (gimple_call_flags (s) & ECF_XTHROW) != 0;
3586}
3587
3588/* If FOR_VAR is true, GIMPLE_CALL S is a call to builtin_alloca that
3589 is known to be emitted for VLA objects. Those are wrapped by
3590 stack_save/stack_restore calls and hence can't lead to unbounded
3591 stack growth even when they occur in loops. */
3592
3593inline void
3595{
3596 if (for_var)
3598 else
3600}
3601
3602/* Return true of S is a call to builtin_alloca emitted for VLA objects. */
3604inline bool
3606{
3607 return (s->subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
3608}
3609
3610inline bool
3612{
3613 const gcall *gc = GIMPLE_CHECK2<gcall *> (s);
3614 return (gc->subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
3615}
3616
3617/* If BY_DESCRIPTOR_P is true, GIMPLE_CALL S is an indirect call for which
3618 pointers to nested function are descriptors instead of trampolines. */
3619
3620inline void
3622{
3623 if (by_descriptor_p)
3625 else
3627}
3629/* Return true if S is a by-descriptor call. */
3630
3631inline bool
3633{
3634 return (s->subcode & GF_CALL_BY_DESCRIPTOR) != 0;
3635}
3636
3637/* Copy all the GF_CALL_* flags from ORIG_CALL to DEST_CALL. */
3639inline void
3641{
3642 dest_call->subcode = orig_call->subcode;
3643}
3644
3645
3646/* Return a pointer to the points-to solution for the set of call-used
3647 variables of the call CALL_STMT. */
3648
3649inline struct pt_solution *
3650gimple_call_use_set (gcall *call_stmt)
3652 return &call_stmt->call_used;
3653}
3654
3655/* As above, but const. */
3656
3657inline const pt_solution *
3658gimple_call_use_set (const gcall *call_stmt)
3659{
3660 return &call_stmt->call_used;
3661}
3662
3663/* Return a pointer to the points-to solution for the set of call-used
3664 variables of the call CALL_STMT. */
3665
3666inline struct pt_solution *
3668{
3669 return &call_stmt->call_clobbered;
3670}
3671
3672/* As above, but const. */
3673
3674inline const pt_solution *
3675gimple_call_clobber_set (const gcall *call_stmt)
3677 return &call_stmt->call_clobbered;
3678}
3679
3680
3681/* Returns true if this is a GIMPLE_ASSIGN or a GIMPLE_CALL with a
3682 non-NULL lhs. */
3683
3684inline bool
3685gimple_has_lhs (const gimple *stmt)
3686{
3687 if (is_gimple_assign (stmt))
3688 return true;
3689 if (const gcall *call = dyn_cast <const gcall *> (stmt))
3690 return gimple_call_lhs (call) != NULL_TREE;
3691 return false;
3693
3694
3695/* Return the code of the predicate computed by conditional statement GS. */
3696
3697inline enum tree_code
3698gimple_cond_code (const gcond *gs)
3699{
3700 return (enum tree_code) gs->subcode;
3702
3703inline enum tree_code
3704gimple_cond_code (const gimple *gs)
3705{
3707 return gimple_cond_code (gc);
3708}
3709
3711/* Set CODE to be the predicate code for the conditional statement GS. */
3712
3713inline void
3715{
3716 gs->subcode = code;
3717}
3718
3719
3720/* Return the LHS of the predicate computed by conditional statement GS. */
3721
3722inline tree
3723gimple_cond_lhs (const gcond *gs)
3724{
3725 return gs->op[0];
3727
3728inline tree
3729gimple_cond_lhs (const gimple *gs)
3730{
3732 return gimple_cond_lhs (gc);
3733}
3734
3735/* Return the pointer to the LHS of the predicate computed by conditional
3736 statement GS. */
3737
3738inline tree *
3740{
3741 return &gs->op[0];
3742}
3743
3744/* Set LHS to be the LHS operand of the predicate computed by
3745 conditional statement GS. */
3747inline void
3749{
3750 gs->op[0] = lhs;
3751}
3752
3753
3754/* Return the RHS operand of the predicate computed by conditional GS. */
3755
3756inline tree
3757gimple_cond_rhs (const gcond *gs)
3758{
3759 return gs->op[1];
3760}
3761
3762inline tree
3763gimple_cond_rhs (const gimple *gs)
3764{
3767}
3768
3769/* Return the pointer to the RHS operand of the predicate computed by
3770 conditional GS. */
3771
3772inline tree *
3774{
3775 return &gs->op[1];
3777
3778
3779/* Set RHS to be the RHS operand of the predicate computed by
3780 conditional statement GS. */
3781
3782inline void
3784{
3785 gs->op[1] = rhs;
3786}
3787
3788
3789/* Return the label used by conditional statement GS when its
3790 predicate evaluates to true. */
3791
3792inline tree
3794{
3795 return gs->op[2];
3797
3798
3799/* Set LABEL to be the label used by conditional statement GS when its
3800 predicate evaluates to true. */
3801
3802inline void
3804{
3805 gs->op[2] = label;
3806}
3808
3809/* Set LABEL to be the label used by conditional statement GS when its
3810 predicate evaluates to false. */
3811
3812inline void
3814{
3815 gs->op[3] = label;
3816}
3817
3818
3819/* Return the label used by conditional statement GS when its
3820 predicate evaluates to false. */
3821
3822inline tree
3824{
3825 return gs->op[3];
3826}
3827
3828
3829/* Set the conditional COND_STMT to be of the form 'if (1 == 0)'. */
3830
3831inline void
3833{
3836 gs->subcode = NE_EXPR;
3837}
3838
3839
3840/* Set the conditional COND_STMT to be of the form 'if (1 == 1)'. */
3841
3842inline void
3844{
3847 gs->subcode = NE_EXPR;
3848}
3849
3850/* Check if conditional statemente GS is of the form 'if (1 == 1)',
3851 'if (0 == 0)', 'if (1 != 0)' or 'if (0 != 1)' */
3852
3853inline bool
3855{
3857 tree rhs = gimple_cond_rhs (gs);
3858 enum tree_code code = gimple_cond_code (gs);
3859
3860 if (lhs != boolean_true_node && lhs != boolean_false_node)
3861 return false;
3862
3863 if (rhs != boolean_true_node && rhs != boolean_false_node)
3864 return false;
3865
3866 if (code == NE_EXPR && lhs != rhs)
3867 return true;
3868
3869 if (code == EQ_EXPR && lhs == rhs)
3870 return true;
3871
3872 return false;
3873}
3874
3875/* Check if conditional statement GS is of the form 'if (1 != 1)',
3876 'if (0 != 0)', 'if (1 == 0)' or 'if (0 == 1)' */
3877
3878inline bool
3880{
3881 tree lhs = gimple_cond_lhs (gs);
3882 tree rhs = gimple_cond_rhs (gs);
3883 enum tree_code code = gimple_cond_code (gs);
3884
3885 if (lhs != boolean_true_node && lhs != boolean_false_node)
3886 return false;
3887
3888 if (rhs != boolean_true_node && rhs != boolean_false_node)
3889 return false;
3890
3891 if (code == NE_EXPR && lhs == rhs)
3892 return true;
3893
3894 if (code == EQ_EXPR && lhs != rhs)
3895 return true;
3896
3897 return false;
3898}
3900/* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS. */
3901
3902inline void
3903gimple_cond_set_condition (gcond *stmt, enum tree_code code, tree lhs,
3904 tree rhs)
3905{
3906 gimple_cond_set_code (stmt, code);
3907 gimple_cond_set_lhs (stmt, lhs);
3909}
3910
3911
3912/* Return the tree code for the expression computed by STMT. This is
3913 only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN. For
3914 GIMPLE_CALL, return CALL_EXPR as the expression code for
3915 consistency. This is useful when the caller needs to deal with the
3916 three kinds of computation that GIMPLE supports. */
3917
3918inline enum tree_code
3919gimple_expr_code (const gimple *stmt)
3920{
3921 if (const gassign *ass = dyn_cast<const gassign *> (stmt))
3922 return gimple_assign_rhs_code (ass);
3923 if (const gcond *cond = dyn_cast<const gcond *> (stmt))
3924 return gimple_cond_code (cond);
3925 else
3926 {
3928 return CALL_EXPR;
3929 }
3930}
3931
3932
3933/* Return the LABEL_DECL node used by GIMPLE_LABEL statement GS. */
3934
3935inline tree
3938 return gs->op[0];
3939}
3940
3941
3942/* Set LABEL to be the LABEL_DECL node used by GIMPLE_LABEL statement
3943 GS. */
3944
3945inline void
3948 gs->op[0] = label;
3949}
3950
3951
3952/* Return the destination of the unconditional jump GS. */
3953
3954inline tree
3955gimple_goto_dest (const gimple *gs)
3956{
3958 return gimple_op (gs, 0);
3959}
3960
3961
3962/* Set DEST to be the destination of the unconditonal jump GS. */
3963
3964inline void
3966{
3967 gs->op[0] = dest;
3968}
3969
3970
3971/* Return the variables declared in the GIMPLE_BIND statement GS. */
3973inline tree
3975{
3976 return bind_stmt->vars;
3977}
3978
3979
3980/* Set VARS to be the set of variables declared in the GIMPLE_BIND
3981 statement GS. */
3982
3983inline void
3985{
3986 bind_stmt->vars = vars;
3987}
3988
3989
3990/* Append VARS to the set of variables declared in the GIMPLE_BIND
3991 statement GS. */
3992
3993inline void
3995{
3996 bind_stmt->vars = chainon (bind_stmt->vars, vars);
3997}
3998
3999
4002{
4003 return &bind_stmt->body;
4004}
4005
4006/* Return the GIMPLE sequence contained in the GIMPLE_BIND statement GS. */
4007
4008inline gimple_seq
4009gimple_bind_body (const gbind *gs)
4011 return *gimple_bind_body_ptr (const_cast <gbind *> (gs));
4012}
4013
4014
4015/* Set SEQ to be the GIMPLE sequence contained in the GIMPLE_BIND
4016 statement GS. */
4017
4018inline void
4020{
4021 bind_stmt->body = seq;
4022}
4023
4024
4025/* Append a statement to the end of a GIMPLE_BIND's body. */
4026
4027inline void
4029{
4031}
4032
4033
4034/* Append a sequence of statements to the end of a GIMPLE_BIND's body. */
4035
4036inline void
4038{
4040}
4041
4042
4043/* Return the TREE_BLOCK node associated with GIMPLE_BIND statement
4044 GS. This is analogous to the BIND_EXPR_BLOCK field in trees. */
4045
4046inline tree
4048{
4049 return bind_stmt->block;
4050}
4051
4052
4053/* Set BLOCK to be the TREE_BLOCK node associated with GIMPLE_BIND
4054 statement GS. */
4056inline void
4058{
4060 || TREE_CODE (block) == BLOCK);
4061 bind_stmt->block = block;
4062}
4063
4065/* Return the number of input operands for GIMPLE_ASM ASM_STMT. */
4066
4067inline unsigned
4069{
4070 return asm_stmt->ni;
4071}
4072
4073
4074/* Return the number of output operands for GIMPLE_ASM ASM_STMT. */
4076inline unsigned
4078{
4079 return asm_stmt->no;
4080}
4081
4082
4083/* Return the number of clobber operands for GIMPLE_ASM ASM_STMT. */
4085inline unsigned
4087{
4088 return asm_stmt->nc;
4089}
4090
4091/* Return the number of label operands for GIMPLE_ASM ASM_STMT. */
4092
4093inline unsigned
4096 return asm_stmt->nl;
4097}
4098
4099/* Return input operand INDEX of GIMPLE_ASM ASM_STMT. */
4100
4101inline tree
4102gimple_asm_input_op (const gasm *asm_stmt, unsigned index)
4103{
4105 return asm_stmt->op[index + asm_stmt->no];
4106}
4107
4108/* Set IN_OP to be input operand INDEX in GIMPLE_ASM ASM_STMT. */
4109
4110inline void
4112{
4114 && TREE_CODE (in_op) == TREE_LIST);
4115 asm_stmt->op[index + asm_stmt->no] = in_op;
4116}
4117
4118
4119/* Return output operand INDEX of GIMPLE_ASM ASM_STMT. */
4120
4121inline tree
4122gimple_asm_output_op (const gasm *asm_stmt, unsigned index)
4123{
4125 return asm_stmt->op[index];
4126}
4127
4128/* Set OUT_OP to be output operand INDEX in GIMPLE_ASM ASM_STMT. */
4129
4130inline void
4132{
4134 && TREE_CODE (out_op) == TREE_LIST);
4135 asm_stmt->op[index] = out_op;
4136}
4137
4138
4139/* Return clobber operand INDEX of GIMPLE_ASM ASM_STMT. */
4140
4141inline tree
4142gimple_asm_clobber_op (const gasm *asm_stmt, unsigned index)
4143{
4145 return asm_stmt->op[index + asm_stmt->ni + asm_stmt->no];
4146}
4147
4148
4149/* Set CLOBBER_OP to be clobber operand INDEX in GIMPLE_ASM ASM_STMT. */
4150
4151inline void
4156 asm_stmt->op[index + asm_stmt->ni + asm_stmt->no] = clobber_op;
4157}
4158
4159/* Return label operand INDEX of GIMPLE_ASM ASM_STMT. */
4160
4161inline tree
4162gimple_asm_label_op (const gasm *asm_stmt, unsigned index)
4163{
4165 return asm_stmt->op[index + asm_stmt->no + asm_stmt->ni + asm_stmt->nc];
4166}
4167
4168/* Set LABEL_OP to be label operand INDEX in GIMPLE_ASM ASM_STMT. */
4169
4170inline void
4172{
4175 asm_stmt->op[index + asm_stmt->no + asm_stmt->ni + asm_stmt->nc] = label_op;
4176}
4177
4178/* Return the string representing the assembly instruction in
4179 GIMPLE_ASM ASM_STMT. */
4180
4181inline const char *
4183{
4184 return asm_stmt->string;
4185}
4187
4188/* Return true if ASM_STMT is marked volatile. */
4189
4190inline bool
4192{
4193 return (asm_stmt->subcode & GF_ASM_VOLATILE) != 0;
4194}
4195
4196
4197/* If VOLATILE_P is true, mark asm statement ASM_STMT as volatile. */
4199inline void
4200gimple_asm_set_volatile (gasm *asm_stmt, bool volatile_p)
4201{
4202 if (volatile_p)
4203 asm_stmt->subcode |= GF_ASM_VOLATILE;
4204 else
4205 asm_stmt->subcode &= ~GF_ASM_VOLATILE;
4206}
4208
4209/* Return true if ASM_STMT is marked inline. */
4210
4211inline bool
4213{
4214 return (asm_stmt->subcode & GF_ASM_INLINE) != 0;
4215}
4217
4218/* If INLINE_P is true, mark asm statement ASM_STMT as inline. */
4219
4220inline void
4222{
4223 if (inline_p)
4224 asm_stmt->subcode |= GF_ASM_INLINE;
4225 else
4227}
4228
4229
4230/* If INPUT_P is true, mark asm ASM_STMT as an ASM_INPUT. */
4231
4232inline void
4234{
4235 if (input_p)
4237 else
4238 asm_stmt->subcode &= ~GF_ASM_INPUT;
4239}
4240
4241
4242/* Return true if asm ASM_STMT is an ASM_INPUT. */
4243
4244inline bool
4246{
4247 return (asm_stmt->subcode & GF_ASM_INPUT) != 0;
4248}
4249
4250
4251/* Return the types handled by GIMPLE_CATCH statement CATCH_STMT. */
4252
4253inline tree
4255{
4256 return catch_stmt->types;
4257}
4258
4259
4260/* Return a pointer to the types handled by GIMPLE_CATCH statement CATCH_STMT. */
4261
4262inline tree *
4264{
4265 return &catch_stmt->types;
4266}
4267
4268
4269/* Return a pointer to the GIMPLE sequence representing the body of
4270 the handler of GIMPLE_CATCH statement CATCH_STMT. */
4271
4272inline gimple_seq *
4275 return &catch_stmt->handler;
4276}
4277
4278
4279/* Return the GIMPLE sequence representing the body of the handler of
4280 GIMPLE_CATCH statement CATCH_STMT. */
4281
4282inline gimple_seq
4284{
4285 return *gimple_catch_handler_ptr (const_cast <gcatch *> (catch_stmt));
4286}
4287
4288
4289/* Set T to be the set of types handled by GIMPLE_CATCH CATCH_STMT. */
4290
4291inline void
4293{
4294 catch_stmt->types = t;
4295}
4297
4298/* Set HANDLER to be the body of GIMPLE_CATCH CATCH_STMT. */
4299
4300inline void
4302{
4303 catch_stmt->handler = handler;
4304}
4305
4307/* Return the types handled by GIMPLE_EH_FILTER statement GS. */
4308
4309inline tree
4311{
4313 return eh_filter_stmt->types;
4314}
4315
4317/* Return a pointer to the types handled by GIMPLE_EH_FILTER statement
4318 GS. */
4319
4320inline tree *
4322{
4324 return &eh_filter_stmt->types;
4326
4327
4328/* Return a pointer to the sequence of statement to execute when
4329 GIMPLE_EH_FILTER statement fails. */
4330
4331inline gimple_seq *
4335 return &eh_filter_stmt->failure;
4336}
4337
4338
4339/* Return the sequence of statement to execute when GIMPLE_EH_FILTER
4340 statement fails. */
4341
4344{
4345 return *gimple_eh_filter_failure_ptr (const_cast <gimple *> (gs));
4346}
4347
4349/* Set TYPES to be the set of types handled by GIMPLE_EH_FILTER
4350 EH_FILTER_STMT. */
4351
4352inline void
4355 eh_filter_stmt->types = types;
4356}
4357
4358
4359/* Set FAILURE to be the sequence of statements to execute on failure
4360 for GIMPLE_EH_FILTER EH_FILTER_STMT. */
4361
4362inline void
4365{
4367}
4368
4369/* Get the function decl to be called by the MUST_NOT_THROW region. */
4370
4371inline tree
4373{
4374 return eh_mnt_stmt->fndecl;
4375}
4376
4377/* Set the function decl to be called by GS to DECL. */
4378
4379inline void
4381 tree decl)
4382{
4384}
4385
4386/* GIMPLE_EH_ELSE accessors. */
4387
4388inline gimple_seq *
4390{
4391 return &eh_else_stmt->n_body;
4392}
4394inline gimple_seq
4396{
4397 return *gimple_eh_else_n_body_ptr (const_cast <geh_else *> (eh_else_stmt));
4398}
4399
4400inline gimple_seq *
4402{
4403 return &eh_else_stmt->e_body;
4404}
4406inline gimple_seq
4408{
4409 return *gimple_eh_else_e_body_ptr (const_cast <geh_else *> (eh_else_stmt));
4410}
4411
4412inline void
4414{
4415 eh_else_stmt->n_body = seq;
4417
4418inline void
4420{
4421 eh_else_stmt->e_body = seq;
4422}
4423
4424/* GIMPLE_TRY accessors. */
4425
4426/* Return the kind of try block represented by GIMPLE_TRY GS. This is
4427 either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY. */
4428
4429inline enum gimple_try_flags
4430gimple_try_kind (const gimple *gs)
4431{
4433 return (enum gimple_try_flags) (gs->subcode & GIMPLE_TRY_KIND);
4434}
4435
4437/* Set the kind of try block represented by GIMPLE_TRY GS. */
4438
4439inline void
4441{
4443 || kind == GIMPLE_TRY_FINALLY);
4444 if (gimple_try_kind (gs) != kind)
4445 gs->subcode = (unsigned int) kind;
4446}
4448
4449/* Return the GIMPLE_TRY_CATCH_IS_CLEANUP flag. */
4450
4451inline bool
4453{
4455 return (gs->subcode & GIMPLE_TRY_CATCH_IS_CLEANUP) != 0;
4457
4458
4459/* Return a pointer to the sequence of statements used as the
4460 body for GIMPLE_TRY GS. */
4461
4462inline gimple_seq *
4464{
4466 return &try_stmt->eval;
4467}
4468
4469
4470/* Return the sequence of statements used as the body for GIMPLE_TRY GS. */
4471
4472inline gimple_seq
4473gimple_try_eval (const gimple *gs)
4474{
4475 return *gimple_try_eval_ptr (const_cast <gimple *> (gs));
4476}
4477
4478
4479/* Return a pointer to the sequence of statements used as the cleanup body for
4480 GIMPLE_TRY GS. */
4481
4482inline gimple_seq *
4484{
4486 return &try_stmt->cleanup;
4487}
4488
4490/* Return the sequence of statements used as the cleanup body for
4491 GIMPLE_TRY GS. */
4492
4493inline gimple_seq
4495{
4496 return *gimple_try_cleanup_ptr (const_cast <gimple *> (gs));
4497}
4498
4500/* Set the GIMPLE_TRY_CATCH_IS_CLEANUP flag. */
4501
4502inline void
4504{
4506 if (catch_is_cleanup)
4507 g->subcode |= GIMPLE_TRY_CATCH_IS_CLEANUP;
4508 else
4509 g->subcode &= ~GIMPLE_TRY_CATCH_IS_CLEANUP;
4510}
4511
4512
4513/* Set EVAL to be the sequence of statements to use as the body for
4514 GIMPLE_TRY TRY_STMT. */
4515
4516inline void
4519 try_stmt->eval = eval;
4520}
4521
4522
4523/* Set CLEANUP to be the sequence of statements to use as the cleanup
4524 body for GIMPLE_TRY TRY_STMT. */
4525
4526inline void
4529 try_stmt->cleanup = cleanup;
4530}
4531
4532
4533/* Return a pointer to the cleanup sequence for cleanup statement GS. */
4534
4535inline gimple_seq *
4537{
4539 return &wce_stmt->cleanup;
4540}
4541
4542
4543/* Return the cleanup sequence for cleanup statement GS. */
4544
4545inline gimple_seq
4547{
4548 return *gimple_wce_cleanup_ptr (gs);
4549}
4551
4552/* Set CLEANUP to be the cleanup sequence for GS. */
4553
4554inline void
4556{
4558 wce_stmt->cleanup = cleanup;
4559}
4561
4562/* Return the CLEANUP_EH_ONLY flag for a WCE tuple. */
4563
4564inline bool
4568 return gs->subcode != 0;
4569}
4570
4571
4572/* Set the CLEANUP_EH_ONLY flag for a WCE tuple. */
4573
4574inline void
4579}
4580
4582/* Return the maximum number of arguments supported by GIMPLE_PHI GS. */
4583
4584inline unsigned
4586{
4588 return phi_stmt->capacity;
4589}
4591
4592/* Return the number of arguments in GIMPLE_PHI GS. This must always
4593 be exactly the number of incoming edges for the basic block holding
4594 GS. */
4595
4596inline unsigned
4598{
4600 return phi_stmt->nargs;
4601}
4603
4604/* Return the SSA name created by GIMPLE_PHI GS. */
4605
4606inline tree
4607gimple_phi_result (const gphi *gs)
4608{
4609 return gs->result;
4610}
4611
4612inline tree
4614{
4617}
4618
4619/* Return a pointer to the SSA name created by GIMPLE_PHI GS. */
4620
4621inline tree *
4624 return &gs->result;
4625}
4626
4627inline tree *
4629{
4632}
4634/* Set RESULT to be the SSA name created by GIMPLE_PHI PHI. */
4635
4636inline void
4637gimple_phi_set_result (gphi *phi, tree result)
4638{
4639 phi->result = result;
4640 if (result && TREE_CODE (result) == SSA_NAME)
4641 SSA_NAME_DEF_STMT (result) = phi;
4642}
4644
4645/* Return the PHI argument corresponding to incoming edge INDEX for
4646 GIMPLE_PHI GS. */
4647
4648inline struct phi_arg_d *
4649gimple_phi_arg (gphi *gs, unsigned index)
4650{
4652 return &(gs->args[index]);
4653}
4654
4655inline const phi_arg_d *
4656gimple_phi_arg (const gphi *gs, unsigned index)
4657{
4659 return &(gs->args[index]);
4660}
4662inline const phi_arg_d *
4663gimple_phi_arg (const gimple *gs, unsigned index)
4664{
4666 return gimple_phi_arg (phi_stmt, index);
4668
4669inline struct phi_arg_d *
4670gimple_phi_arg (gimple *gs, unsigned index)
4671{
4673 return gimple_phi_arg (phi_stmt, index);
4674}
4675
4676/* Set PHIARG to be the argument corresponding to incoming edge INDEX
4677 for GIMPLE_PHI PHI. */
4678
4679inline void
4680gimple_phi_set_arg (gphi *phi, unsigned index, struct phi_arg_d * phiarg)
4681{
4683 phi->args[index] = *phiarg;
4684}
4685
4686/* Return the PHI nodes for basic block BB, or NULL if there are no
4687 PHI nodes. */
4688
4689inline gimple_seq
4691{
4693 return bb->il.gimple.phi_nodes;
4694}
4695
4696/* Return a pointer to the PHI nodes for basic block BB. */
4697
4698inline gimple_seq *
4701 gcc_checking_assert (!(bb->flags & BB_RTL));
4702 return &bb->il.gimple.phi_nodes;
4703}
4704
4705/* Return the tree operand for argument I of PHI node GS. */
4706
4707inline tree
4708gimple_phi_arg_def (const gphi *gs, size_t index)
4709{
4710 return gimple_phi_arg (gs, index)->def;
4711}
4712
4713inline tree
4714gimple_phi_arg_def (const gimple *gs, size_t index)
4715{
4716 return gimple_phi_arg (gs, index)->def;
4717}
4718
4719/* Return the tree operand for the argument associated with
4720 edge E of PHI node GS. */
4721
4722inline tree
4725 gcc_checking_assert (e->dest == gimple_bb (gs));
4726 return gimple_phi_arg (gs, e->dest_idx)->def;
4727}
4728
4729inline tree
4731{
4733 return gimple_phi_arg (gs, e->dest_idx)->def;
4734}
4735
4736/* Return a pointer to the tree operand for argument I of phi node PHI. */
4737
4738inline tree *
4739gimple_phi_arg_def_ptr (gphi *phi, size_t index)
4741 return &gimple_phi_arg (phi, index)->def;
4742}
4743
4744/* Return the edge associated with argument I of phi node PHI. */
4745
4746inline edge
4747gimple_phi_arg_edge (const gphi *phi, size_t i)
4749 return EDGE_PRED (gimple_bb (phi), i);
4750}
4751
4752/* Return the source location of gimple argument I of phi node PHI. */
4753
4754inline location_t
4755gimple_phi_arg_location (const gphi *phi, size_t i)
4756{
4757 return gimple_phi_arg (phi, i)->locus;
4758}
4759
4760/* Return the source location of the argument on edge E of phi node PHI. */
4761
4762inline location_t
4764{
4765 return gimple_phi_arg (phi, e->dest_idx)->locus;
4766}
4767
4768/* Set the source location of gimple argument I of phi node PHI to LOC. */
4769
4770inline void
4771gimple_phi_arg_set_location (gphi *phi, size_t i, location_t loc)
4772{
4773 gimple_phi_arg (phi, i)->locus = loc;
4774}
4776/* Return address of source location of gimple argument I of phi node PHI. */
4777
4778inline location_t *
4779gimple_phi_arg_location_ptr (gphi *phi, size_t i)
4780{
4781 return &gimple_phi_arg (phi, i)->locus;
4782}
4783
4784/* Return TRUE if argument I of phi node PHI has a location record. */
4785
4786inline bool
4788{
4790}
4791
4792/* Return the number of arguments that can be accessed by gimple_arg. */
4793
4794inline unsigned
4796{
4797 if (auto phi = dyn_cast<const gphi *> (gs))
4798 return gimple_phi_num_args (phi);
4799 if (auto call = dyn_cast<const gcall *> (gs))
4800 return gimple_call_num_args (call);
4802}
4804/* GS must be an assignment, a call, or a PHI.
4805 If it's an assignment, return rhs operand I.
4806 If it's a call, return function argument I.
4807 If it's a PHI, return the value of PHI argument I. */
4808
4809inline tree
4810gimple_arg (const gimple *gs, unsigned int i)
4811{
4812 if (auto phi = dyn_cast<const gphi *> (gs))
4813 return gimple_phi_arg_def (phi, i);
4814 if (auto call = dyn_cast<const gcall *> (gs))
4815 return gimple_call_arg (call, i);
4816 return gimple_op (as_a <const gassign *> (gs), i + 1);
4817}
4818
4819/* Return a pointer to gimple_arg (GS, I). */
4821inline tree *
4822gimple_arg_ptr (gimple *gs, unsigned int i)
4823{
4824 if (auto phi = dyn_cast<gphi *> (gs))
4825 return gimple_phi_arg_def_ptr (phi, i);
4826 if (auto call = dyn_cast<gcall *> (gs))
4827 return gimple_call_arg_ptr (call, i);
4828 return gimple_op_ptr (as_a <gassign *> (gs), i + 1);
4829}
4830
4831/* Return the region number for GIMPLE_RESX RESX_STMT. */
4832
4833inline int
4835{
4836 return resx_stmt->region;
4837}
4838
4839/* Set REGION to be the region number for GIMPLE_RESX RESX_STMT. */
4840
4841inline void
4844 resx_stmt->region = region;
4845}
4846
4847/* Return the region number for GIMPLE_EH_DISPATCH EH_DISPATCH_STMT. */
4848
4849inline int
4851{
4852 return eh_dispatch_stmt->region;
4853}
4854
4855/* Set REGION to be the region number for GIMPLE_EH_DISPATCH
4856 EH_DISPATCH_STMT. */
4857
4858inline void
4860{
4861 eh_dispatch_stmt->region = region;
4862}
4863
4864/* Return the number of labels associated with the switch statement GS. */
4865
4866inline unsigned
4868{
4869 unsigned num_ops;
4871 num_ops = gimple_num_ops (gs);
4873 return num_ops - 1;
4874}
4875
4876
4877/* Set NLABELS to be the number of labels for the switch statement GS. */
4878
4879inline void
4884}
4885
4886
4887/* Return the index variable used by the switch statement GS. */
4888
4889inline tree
4891{
4892 return gs->op[0];
4893}
4894
4895
4896/* Return a pointer to the index variable for the switch statement GS. */
4897
4898inline tree *
4900{
4901 return &gs->op[0];
4903
4904
4905/* Set INDEX to be the index variable for switch statement GS. */
4906
4907inline void
4909{
4911 gs->op[0] = index;
4912}
4913
4914
4915/* Return the label numbered INDEX. The default label is 0, followed by any
4916 labels in a switch statement. */
4917
4918inline tree
4919gimple_switch_label (const gswitch *gs, unsigned index)
4922 return gs->op[index + 1];
4923}
4924
4925/* Set the label number INDEX to LABEL. 0 is always the default label. */
4926
4927inline void
4928gimple_switch_set_label (gswitch *gs, unsigned index, tree label)
4929{
4931 && (label == NULL_TREE
4933 gs->op[index + 1] = label;
4934}
4935
4936/* Return the default label for a switch statement. */
4937
4938inline tree
4940{
4941 tree label = gimple_switch_label (gs, 0);
4942 gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
4943 return label;
4944}
4945
4946/* Set the default label for a switch statement. */
4948inline void
4950{
4951 gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
4952 gimple_switch_set_label (gs, 0, label);
4953}
4954
4955/* Return true if GS is a GIMPLE_DEBUG statement. */
4956
4957inline bool
4959{
4960 return gimple_code (gs) == GIMPLE_DEBUG;
4961}
4962
4963
4964/* Return the first nondebug statement in GIMPLE sequence S. */
4965
4966inline gimple *
4968{
4970 while (n && is_gimple_debug (n))
4971 n = n->next;
4972 return n;
4973}
4974
4975
4976/* Return the last nondebug statement in GIMPLE sequence S. */
4977
4978inline gimple *
4982 for (n = gimple_seq_last (s);
4983 n && is_gimple_debug (n);
4984 n = n->prev)
4985 if (n == s)
4986 return NULL;
4987 return n;
4988}
4989
4991/* Return true if S is a GIMPLE_DEBUG BIND statement. */
4992
4993inline bool
4994gimple_debug_bind_p (const gimple *s)
4995{
4996 if (is_gimple_debug (s))
4997 return s->subcode == GIMPLE_DEBUG_BIND;
4998
4999 return false;
5000}
5002/* Return the variable bound in a GIMPLE_DEBUG bind statement. */
5003
5004inline tree
5006{
5009 return gimple_op (dbg, 0);
5011
5012/* Return the value bound to the variable in a GIMPLE_DEBUG bind
5013 statement. */
5014
5015inline tree
5022
5023/* Return a pointer to the value bound to the variable in a
5024 GIMPLE_DEBUG bind statement. */
5025
5026inline tree *
5033
5034/* Set the variable bound in a GIMPLE_DEBUG bind statement. */
5035
5036inline void
5038{
5041 gimple_set_op (dbg, 0, var);
5042}
5043
5044/* Set the value bound to the variable in a GIMPLE_DEBUG bind
5045 statement. */
5046
5047inline void
5049{
5052 gimple_set_op (dbg, 1, value);
5053}
5054
5055/* The second operand of a GIMPLE_DEBUG_BIND, when the value was
5056 optimized away. */
5057#define GIMPLE_DEBUG_BIND_NOVALUE NULL_TREE /* error_mark_node */
5058
5059/* Remove the value bound to the variable in a GIMPLE_DEBUG bind
5060 statement. */
5068}
5069
5070/* Return true if the GIMPLE_DEBUG bind statement is bound to a
5071 value. */
5079}
5080
5081#undef GIMPLE_DEBUG_BIND_NOVALUE
5083/* Return true if S is a GIMPLE_DEBUG SOURCE BIND statement. */
5084
5085inline bool
5087{
5088 if (is_gimple_debug (s))
5089 return s->subcode == GIMPLE_DEBUG_SOURCE_BIND;
5090
5091 return false;
5092}
5094/* Return the variable bound in a GIMPLE_DEBUG source bind statement. */
5095
5096inline tree
5098{
5101 return gimple_op (dbg, 0);
5102}
5104/* Return the value bound to the variable in a GIMPLE_DEBUG source bind
5105 statement. */
5106
5107inline tree
5109{
5112 return gimple_op (dbg, 1);
5113}
5115/* Return a pointer to the value bound to the variable in a
5116 GIMPLE_DEBUG source bind statement. */
5117
5118inline tree *
5120{
5123 return gimple_op_ptr (dbg, 1);
5124}
5126/* Set the variable bound in a GIMPLE_DEBUG source bind statement. */
5127
5128inline void
5130{
5133 gimple_set_op (dbg, 0, var);
5134}
5135
5136/* Set the value bound to the variable in a GIMPLE_DEBUG source bind
5137 statement. */
5138
5139inline void
5141{
5144 gimple_set_op (dbg, 1, value);
5145}
5146
5147/* Return true if S is a GIMPLE_DEBUG BEGIN_STMT statement. */
5148
5149inline bool
5151{
5152 if (is_gimple_debug (s))
5153 return s->subcode == GIMPLE_DEBUG_BEGIN_STMT;
5155 return false;
5156}
5157
5158/* Return true if S is a GIMPLE_DEBUG INLINE_ENTRY statement. */
5159
5160inline bool
5163 if (is_gimple_debug (s))
5165
5166 return false;
5167}
5168
5169/* Return true if S is a GIMPLE_DEBUG non-binding marker statement. */
5171inline bool
5173{
5174 if (is_gimple_debug (s))
5175 return s->subcode == GIMPLE_DEBUG_BEGIN_STMT
5177
5178 return false;
5180
5181/* Return the line number for EXPR, or return -1 if we have no line
5182 number information for it. */
5183inline int
5184get_lineno (const gimple *stmt)
5185{
5186 location_t loc;
5187
5188 if (!stmt)
5189 return -1;
5190
5191 loc = gimple_location (stmt);
5192 if (loc == UNKNOWN_LOCATION)
5193 return -1;
5194
5195 return LOCATION_LINE (loc);
5196}
5197
5198/* Return a pointer to the body for the OMP statement GS. */
5200inline gimple_seq *
5202{
5203 return &static_cast <gimple_statement_omp *> (gs)->body;
5204}
5205
5206/* Return the body for the OMP statement GS. */
5207
5209gimple_omp_body (const gimple *gs)
5210{
5211 return *gimple_omp_body_ptr (const_cast <gimple *> (gs));
5212}
5213
5214/* Set BODY to be the body for the OMP statement GS. */
5215
5216inline void
5219 static_cast <gimple_statement_omp *> (gs)->body = body;
5220}
5221
5222
5223/* Return the name associated with OMP_CRITICAL statement CRIT_STMT. */
5224
5225inline tree
5227{
5228 return crit_stmt->name;
5229}
5230
5231
5232/* Return a pointer to the name associated with OMP critical statement
5233 CRIT_STMT. */
5234
5235inline tree *
5238 return &crit_stmt->name;
5239}
5240
5241
5242/* Set NAME to be the name associated with OMP critical statement
5243 CRIT_STMT. */
5244
5245inline void
5248 crit_stmt->name = name;
5249}
5250
5251
5252/* Return the clauses associated with OMP_CRITICAL statement CRIT_STMT. */
5253
5254inline tree
5256{
5257 return crit_stmt->clauses;
5258}
5259
5260
5261/* Return a pointer to the clauses associated with OMP critical statement
5262 CRIT_STMT. */
5263
5264inline tree *
5267 return &crit_stmt->clauses;
5268}
5269
5270
5271/* Set CLAUSES to be the clauses associated with OMP critical statement
5272 CRIT_STMT. */
5273
5274inline void
5277 crit_stmt->clauses = clauses;
5278}
5279
5280
5281/* Return the clauses associated with OMP_ORDERED statement ORD_STMT. */
5282
5283inline tree
5285{
5286 return ord_stmt->clauses;
5287}
5288
5289
5290/* Return a pointer to the clauses associated with OMP ordered statement
5291 ORD_STMT. */
5292
5293inline tree *
5296 return &ord_stmt->clauses;
5297}
5298
5299
5300/* Set CLAUSES to be the clauses associated with OMP ordered statement
5301 ORD_STMT. */
5302
5303inline void
5305{
5306 ord_stmt->clauses = clauses;
5308
5309
5310/* Return the clauses associated with OMP_SCAN statement SCAN_STMT. */
5311
5312inline tree
5314{
5315 return scan_stmt->clauses;
5316}
5317
5319/* Return a pointer to the clauses associated with OMP scan statement
5320 ORD_STMT. */
5321
5322inline tree *
5324{
5325 return &scan_stmt->clauses;
5326}
5327
5328
5329/* Set CLAUSES to be the clauses associated with OMP scan statement
5330 ORD_STMT. */
5331
5332inline void
5334{
5335 scan_stmt->clauses = clauses;
5336}
5337
5338
5339/* Return the clauses associated with OMP_TASKGROUP statement GS. */
5340
5341inline tree
5343{
5345 return
5346 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5347}
5348
5349
5350/* Return a pointer to the clauses associated with OMP taskgroup statement
5351 GS. */
5353inline tree *
5355{
5357 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5358}
5359
5360
5361/* Set CLAUSES to be the clauses associated with OMP taskgroup statement
5362 GS. */
5364inline void
5366{
5368 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5369 = clauses;
5370}
5371
5372
5373/* Return the clauses associated with OMP_MASKED statement GS. */
5374
5375inline tree
5377{
5379 return
5380 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5381}
5382
5383
5384/* Return a pointer to the clauses associated with OMP masked statement
5385 GS. */
5387inline tree *
5389{
5391 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5392}
5393
5394
5395/* Set CLAUSES to be the clauses associated with OMP masked statement
5396 GS. */
5398inline void
5400{
5402 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5403 = clauses;
5404}
5405
5406
5407/* Return the clauses associated with OMP_SCOPE statement GS. */
5408
5409inline tree
5411{
5413 return
5414 static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
5415}
5416
5417
5418/* Return a pointer to the clauses associated with OMP scope statement
5419 GS. */
5420
5421inline tree *
5423{
5425 return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
5426}
5427
5428
5429/* Set CLAUSES to be the clauses associated with OMP scope statement
5430 GS. */
5431
5432inline void
5434{
5436 static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
5437 = clauses;
5438}
5439
5440
5441/* Return the kind of the OMP_FOR statemement G. */
5443inline int
5445{
5448}
5449
5450
5451/* Set the kind of the OMP_FOR statement G. */
5452
5453inline void
5455{
5456 g->subcode = (g->subcode & ~GF_OMP_FOR_KIND_MASK)
5457 | (kind & GF_OMP_FOR_KIND_MASK);
5458}
5459
5460
5461/* Return true if OMP_FOR statement G has the
5462 GF_OMP_FOR_COMBINED flag set. */
5463
5464inline bool
5470
5471
5472/* Set the GF_OMP_FOR_COMBINED field in the OMP_FOR statement G depending on
5473 the boolean value of COMBINED_P. */
5474
5475inline void
5477{
5478 if (combined_p)
5479 g->subcode |= GF_OMP_FOR_COMBINED;
5480 else
5481 g->subcode &= ~GF_OMP_FOR_COMBINED;
5482}
5483
5484
5485/* Return true if the OMP_FOR statement G has the
5486 GF_OMP_FOR_COMBINED_INTO flag set. */
5488inline bool
5490{
5493}
5494
5495
5496/* Set the GF_OMP_FOR_COMBINED_INTO field in the OMP_FOR statement G depending
5497 on the boolean value of COMBINED_P. */
5498
5499inline void
5501{
5502 if (combined_p)
5503 g->subcode |= GF_OMP_FOR_COMBINED_INTO;
5504 else
5505 g->subcode &= ~GF_OMP_FOR_COMBINED_INTO;
5506}
5508
5509/* Return the clauses associated with the OMP_FOR statement GS. */
5510
5511inline tree
5513{
5515 return omp_for_stmt->clauses;
5516}
5517
5519/* Return a pointer to the clauses associated with the OMP_FOR statement
5520 GS. */
5521
5522inline tree *
5524{
5526 return &omp_for_stmt->clauses;
5527}
5528
5529
5530/* Set CLAUSES to be the list of clauses associated with the OMP_FOR statement
5531 GS. */
5532
5533inline void
5535{
5537 omp_for_stmt->clauses = clauses;
5538}
5539
5540
5541/* Get the collapse count of the OMP_FOR statement GS. */
5542
5543inline size_t
5545{
5547 return omp_for_stmt->collapse;
5548}
5549
5550
5551/* Return the condition code associated with the OMP_FOR statement GS. */
5553inline enum tree_code
5554gimple_omp_for_cond (const gimple *gs, size_t i)
5555{
5558 return omp_for_stmt->iter[i].cond;
5559}
5560
5561
5562/* Set COND to be the condition code for the OMP_FOR statement GS. */
5569 && i < omp_for_stmt->collapse);
5570 omp_for_stmt->iter[i].cond = cond;
5571}
5572
5573
5574/* Return the index variable for the OMP_FOR statement GS. */
5575
5576inline tree
5577gimple_omp_for_index (const gimple *gs, size_t i)
5578{
5581 return omp_for_stmt->iter[i].index;
5582}
5583
5584
5585/* Return a pointer to the index variable for the OMP_FOR statement GS. */
5586
5587inline tree *
5589{
5592 return &omp_for_stmt->iter[i].index;
5593}
5594
5595
5596/* Set INDEX to be the index variable for the OMP_FOR statement GS. */
5597
5598inline void
5599gimple_omp_for_set_index (gimple *gs, size_t i, tree index)
5600{
5603 omp_for_stmt->iter[i].index = index;
5604}
5605
5606
5607/* Return the initial value for the OMP_FOR statement GS. */
5608
5609inline tree
5610gimple_omp_for_initial (const gimple *gs, size_t i)
5611{
5614 return omp_for_stmt->iter[i].initial;
5615}
5616
5617
5618/* Return a pointer to the initial value for the OMP_FOR statement GS. */
5619
5620inline tree *
5622{
5625 return &omp_for_stmt->iter[i].initial;
5626}
5627
5628
5629/* Set INITIAL to be the initial value for the OMP_FOR statement GS. */
5630
5631inline void
5632gimple_omp_for_set_initial (gimple *gs, size_t i, tree initial)
5633{
5636 omp_for_stmt->iter[i].initial = initial;
5637}
5638
5639
5640/* Return the final value for the OMP_FOR statement GS. */
5641
5642inline tree
5643gimple_omp_for_final (const gimple *gs, size_t i)
5644{
5647 return omp_for_stmt->iter[i].final;
5648}
5649
5650
5651/* Return a pointer to the final value for the OMP_FOR statement GS. */
5652
5653inline tree *
5655{
5658 return &omp_for_stmt->iter[i].final;
5659}
5660
5661
5662/* Set FINAL to be the final value for the OMP_FOR statement GS. */
5664inline void
5665gimple_omp_for_set_final (gimple *gs, size_t i, tree final)
5666{
5669 omp_for_stmt->iter[i].final = final;
5670}
5671
5672
5673/* Return the increment value for the OMP_FOR statement GS. */
5675inline tree
5676gimple_omp_for_incr (const gimple *gs, size_t i)
5677{
5680 return omp_for_stmt->iter[i].incr;
5681}
5682
5683
5684/* Return a pointer to the increment value for the OMP_FOR statement GS. */
5685
5686inline tree *
5688{
5691 return &omp_for_stmt->iter[i].incr;
5692}
5694
5695/* Set INCR to be the increment value for the OMP_FOR statement GS. */
5696
5697inline void
5698gimple_omp_for_set_incr (gimple *gs, size_t i, tree incr)
5699{
5702 omp_for_stmt->iter[i].incr = incr;
5704
5705
5706/* Return a pointer to the sequence of statements to execute before the OMP_FOR
5707 statement GS starts. */
5708
5709inline gimple_seq *
5711{
5713 return &omp_for_stmt->pre_body;
5714}
5715
5716
5717/* Return the sequence of statements to execute before the OMP_FOR
5718 statement GS starts. */
5719
5720inline gimple_seq
5723 return *gimple_omp_for_pre_body_ptr (const_cast <gimple *> (gs));
5724}
5725
5726
5727/* Set PRE_BODY to be the sequence of statements to execute before the
5728 OMP_FOR statement GS starts. */
5729
5730inline void
5735}
5736
5737/* Return the clauses associated with OMP_PARALLEL GS. */
5738
5739inline tree
5745
5746
5747/* Return a pointer to the clauses associated with OMP_PARALLEL_STMT. */
5748
5749inline tree *
5752 return &omp_parallel_stmt->clauses;
5753}
5754
5755
5756/* Set CLAUSES to be the list of clauses associated with OMP_PARALLEL_STMT. */
5757
5758inline void
5760 tree clauses)
5761{
5762 omp_parallel_stmt->clauses = clauses;
5763}
5764
5765
5766/* Return the child function used to hold the body of OMP_PARALLEL_STMT. */
5767
5768inline tree
5774/* Return a pointer to the child function used to hold the body of
5775 OMP_PARALLEL_STMT. */
5776
5777inline tree *
5783
5784/* Set CHILD_FN to be the child function for OMP_PARALLEL_STMT. */
5785
5786inline void
5788 tree child_fn)
5789{
5790 omp_parallel_stmt->child_fn = child_fn;
5791}
5792
5793
5794/* Return the artificial argument used to send variables and values
5795 from the parent to the children threads in OMP_PARALLEL_STMT. */
5796
5797inline tree
5800 return omp_parallel_stmt->data_arg;
5801}
5802
5803
5804/* Return a pointer to the data argument for OMP_PARALLEL_STMT. */
5805
5806inline tree *
5808{
5809 return &omp_parallel_stmt->data_arg;
5811
5812
5813/* Set DATA_ARG to be the data argument for OMP_PARALLEL_STMT. */
5814
5815inline void
5817 tree data_arg)
5818{
5819 omp_parallel_stmt->data_arg = data_arg;
5820}
5822/* Return the clauses associated with OMP_TASK GS. */
5823
5824inline tree
5826{
5828 return omp_task_stmt->clauses;
5829}
5830
5831
5832/* Return a pointer to the clauses associated with OMP_TASK GS. */
5833
5834inline tree *
5840
5841
5842/* Set CLAUSES to be the list of clauses associated with OMP_TASK
5843 GS. */
5844
5845inline void
5847{
5849 omp_task_stmt->clauses = clauses;
5850}
5851
5852
5853/* Return true if OMP task statement G has the
5854 GF_OMP_TASK_TASKLOOP flag set. */
5855
5856inline bool
5858{
5860 return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKLOOP) != 0;
5861}
5862
5863
5864/* Set the GF_OMP_TASK_TASKLOOP field in G depending on the boolean
5865 value of TASKLOOP_P. */
5866
5867inline void
5871 if (taskloop_p)
5872 g->subcode |= GF_OMP_TASK_TASKLOOP;
5873 else
5874 g->subcode &= ~GF_OMP_TASK_TASKLOOP;
5875}
5876
5877
5878/* Return true if OMP task statement G has the
5879 GF_OMP_TASK_TASKWAIT flag set. */
5880
5881inline bool
5883{
5885 return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKWAIT) != 0;
5886}
5887
5888
5889/* Set the GF_OMP_TASK_TASKWAIT field in G depending on the boolean
5890 value of TASKWAIT_P. */
5891
5892inline void
5894{
5896 if (taskwait_p)
5897 g->subcode |= GF_OMP_TASK_TASKWAIT;
5898 else
5899 g->subcode &= ~GF_OMP_TASK_TASKWAIT;
5901
5902
5903/* Return the child function used to hold the body of OMP_TASK GS. */
5904
5905inline tree
5907{
5909 return omp_task_stmt->child_fn;
5911
5912/* Return a pointer to the child function used to hold the body of
5913 OMP_TASK GS. */
5914
5915inline tree *
5917{
5919 return &omp_task_stmt->child_fn;
5921
5922
5923/* Set CHILD_FN to be the child function for OMP_TASK GS. */
5924
5925inline void
5927{
5929 omp_task_stmt->child_fn = child_fn;
5930}
5932
5933/* Return the artificial argument used to send variables and values
5934 from the parent to the children threads in OMP_TASK GS. */
5935
5936inline tree
5938{
5940 return omp_task_stmt->data_arg;
5941}
5942
5944/* Return a pointer to the data argument for OMP_TASK GS. */
5945
5946inline tree *
5948{
5950 return &omp_task_stmt->data_arg;
5951}
5952
5953
5954/* Set DATA_ARG to be the data argument for OMP_TASK GS. */
5955
5956inline void
5958{
5960 omp_task_stmt->data_arg = data_arg;
5961}
5962
5963
5964/* Return the clauses associated with OMP_TASK GS. */
5971 return omp_taskreg_stmt->clauses;
5972}
5973
5974
5975/* Return a pointer to the clauses associated with OMP_TASK GS. */
5982 return &omp_taskreg_stmt->clauses;
5983}
5984
5985
5986/* Set CLAUSES to be the list of clauses associated with OMP_TASK
5987 GS. */
5994 omp_taskreg_stmt->clauses = clauses;
5995}
5996
5997
5998/* Return the child function used to hold the body of OMP_TASK GS. */
6005 return omp_taskreg_stmt->child_fn;
6006}
6007
6008/* Return a pointer to the child function used to hold the body of
6009 OMP_TASK GS. */
6016 return &omp_taskreg_stmt->child_fn;
6017}
6018
6019
6020/* Set CHILD_FN to be the child function for OMP_TASK GS. */
6027 omp_taskreg_stmt->child_fn = child_fn;
6028}
6029
6030
6031/* Return the artificial argument used to send variables and values
6032 from the parent to the children threads in OMP_TASK GS. */
6033
6034inline tree
6036{
6039 return omp_taskreg_stmt->data_arg;
6040}
6042
6043/* Return a pointer to the data argument for OMP_TASK GS. */
6044
6045inline tree *
6047{
6050 return &omp_taskreg_stmt->data_arg;
6052
6053
6054/* Set DATA_ARG to be the data argument for OMP_TASK GS. */
6055
6056inline void
6058{
6061 omp_taskreg_stmt->data_arg = data_arg;
6062}
6063
6064
6065/* Return the copy function used to hold the body of OMP_TASK GS. */
6066
6067inline tree
6069{
6071 return omp_task_stmt->copy_fn;
6072}
6073
6074/* Return a pointer to the copy function used to hold the body of
6075 OMP_TASK GS. */
6076
6077inline tree *
6079{
6081 return &omp_task_stmt->copy_fn;
6082}
6083
6084
6085/* Set CHILD_FN to be the copy function for OMP_TASK GS. */
6086
6087inline void
6089{
6092}
6093
6094
6095/* Return size of the data block in bytes in OMP_TASK GS. */
6096
6097inline tree
6099{
6101 return omp_task_stmt->arg_size;
6102}
6103
6104
6105/* Return a pointer to the data block size for OMP_TASK GS. */
6106
6107inline tree *
6109{
6111 return &omp_task_stmt->arg_size;
6112}
6113
6114
6115/* Set ARG_SIZE to be the data block size for OMP_TASK GS. */
6116
6117inline void
6119{
6121 omp_task_stmt->arg_size = arg_size;
6122}
6123
6124
6125/* Return align of the data block in bytes in OMP_TASK GS. */
6126
6127inline tree
6129{
6131 return omp_task_stmt->arg_align;
6132}
6133
6134
6135/* Return a pointer to the data block align for OMP_TASK GS. */
6136
6137inline tree *
6139{
6141 return &omp_task_stmt->arg_align;
6142}
6143
6144
6145/* Set ARG_SIZE to be the data block align for OMP_TASK GS. */
6146
6147inline void
6149{
6151 omp_task_stmt->arg_align = arg_align;
6152}
6153
6154
6155/* Return the clauses associated with OMP_SINGLE GS. */
6156
6157inline tree
6159{
6161 return omp_single_stmt->clauses;
6162}
6163
6164
6165/* Return a pointer to the clauses associated with OMP_SINGLE GS. */
6166
6167inline tree *
6169{
6171 return &omp_single_stmt->clauses;
6172}
6173
6174
6175/* Set CLAUSES to be the clauses associated with OMP_SINGLE_STMT. */
6176
6177inline void
6179{
6180 omp_single_stmt->clauses = clauses;
6181}
6182
6183
6184/* Return the clauses associated with OMP_TARGET GS. */
6185
6186inline tree
6188{
6190 return omp_target_stmt->clauses;
6191}
6192
6193
6194/* Return a pointer to the clauses associated with OMP_TARGET GS. */
6195
6196inline tree *
6198{
6200 return &omp_target_stmt->clauses;
6201}
6202
6203
6204/* Set CLAUSES to be the clauses associated with OMP_TARGET_STMT. */
6205
6206inline void
6208 tree clauses)
6209{
6210 omp_target_stmt->clauses = clauses;
6211}
6212
6213
6214/* Return the kind of the OMP_TARGET G. */
6215
6216inline int
6218{
6223
6224/* Set the kind of the OMP_TARGET G. */
6225
6226inline void
6229 g->subcode = (g->subcode & ~GF_OMP_TARGET_KIND_MASK)
6230 | (kind & GF_OMP_TARGET_KIND_MASK);
6231}
6232
6233
6234/* Return the child function used to hold the body of OMP_TARGET_STMT. */
6235
6236inline tree
6238{
6239 return omp_target_stmt->child_fn;
6240}
6241
6242/* Return a pointer to the child function used to hold the body of
6243 OMP_TARGET_STMT. */
6244
6245inline tree *
6248 return &omp_target_stmt->child_fn;
6249}
6250
6251
6252/* Set CHILD_FN to be the child function for OMP_TARGET_STMT. */
6253
6254inline void
6256 tree child_fn)
6258 omp_target_stmt->child_fn = child_fn;
6259}
6260
6261
6262/* Return the artificial argument used to send variables and values
6263 from the parent to the children threads in OMP_TARGET_STMT. */
6264
6265inline tree
6268 return omp_target_stmt->data_arg;
6269}
6270
6271
6272/* Return a pointer to the data argument for OMP_TARGET GS. */
6273
6274inline tree *
6279
6280
6281/* Set DATA_ARG to be the data argument for OMP_TARGET_STMT. */
6282
6283inline void
6285 tree data_arg)
6286{
6287 omp_target_stmt->data_arg = data_arg;
6288}
6289
6290
6291/* Return the clauses associated with OMP_TEAMS GS. */
6292
6297 return omp_teams_stmt->clauses;
6298}
6299
6300
6301/* Return a pointer to the clauses associated with OMP_TEAMS GS. */
6302
6307 return &omp_teams_stmt->clauses;
6308}
6309
6310
6311/* Set CLAUSES to be the clauses associated with OMP_TEAMS_STMT. */
6313inline void
6315{
6316 omp_teams_stmt->clauses = clauses;
6317}
6318
6319/* Return the child function used to hold the body of OMP_TEAMS_STMT. */
6320
6321inline tree
6323{
6324 return omp_teams_stmt->child_fn;
6325}
6326
6327/* Return a pointer to the child function used to hold the body of
6328 OMP_TEAMS_STMT. */
6333 return &omp_teams_stmt->child_fn;
6334}
6335
6336
6337/* Set CHILD_FN to be the child function for OMP_TEAMS_STMT. */
6338
6339inline void
6341{
6342 omp_teams_stmt->child_fn = child_fn;
6343}
6344
6345
6346/* Return the artificial argument used to send variables and values
6347 from the parent to the children threads in OMP_TEAMS_STMT. */
6349inline tree
6351{
6352 return omp_teams_stmt->data_arg;
6353}
6354
6355
6356/* Return a pointer to the data argument for OMP_TEAMS_STMT. */
6357
6358inline tree *
6360{
6361 return &omp_teams_stmt->data_arg;
6362}
6363
6364
6365/* Set DATA_ARG to be the data argument for OMP_TEAMS_STMT. */
6366
6367inline void
6370 omp_teams_stmt->data_arg = data_arg;
6371}
6372
6373/* Return the host flag of an OMP_TEAMS_STMT. */
6374
6375inline bool
6377{
6379}
6381/* Set host flag of an OMP_TEAMS_STMT to VALUE. */
6382
6383inline void
6385{
6386 if (value)
6388 else
6390}
6392/* Return the clauses associated with OMP_SECTIONS GS. */
6393
6394inline tree
6396{
6398 return omp_sections_stmt->clauses;
6399}
6400
6401
6402/* Return a pointer to the clauses associated with OMP_SECTIONS GS. */
6403
6404inline tree *
6406{
6408 return &omp_sections_stmt->clauses;
6409}
6410
6411
6412/* Set CLAUSES to be the set of clauses associated with OMP_SECTIONS
6413 GS. */
6414
6415inline void
6417{
6419 omp_sections_stmt->clauses = clauses;
6420}
6422
6423/* Return the control variable associated with the GIMPLE_OMP_SECTIONS
6424 in GS. */
6425
6426inline tree
6428{
6430 return omp_sections_stmt->control;
6431}
6432
6433
6434/* Return a pointer to the clauses associated with the GIMPLE_OMP_SECTIONS
6435 GS. */
6436
6437inline tree *
6443
6444
6445/* Set CONTROL to be the set of clauses associated with the
6446 GIMPLE_OMP_SECTIONS in GS. */
6447
6452 omp_sections_stmt->control = control;
6453}
6454
6455
6456/* Set the value being stored in an atomic store. */
6461 store_stmt->val = val;
6462}
6463
6464
6465/* Return the value being stored in an atomic store. */
6470 return store_stmt->val;
6471}
6472
6473
6474/* Return a pointer to the value being stored in an atomic store. */
6479 return &store_stmt->val;
6480}
6481
6482
6483/* Set the LHS of an atomic load. */
6488 load_stmt->lhs = lhs;
6489}
6490
6491
6492/* Get the LHS of an atomic load. */
6497 return load_stmt->lhs;
6498}
6499
6500
6501/* Return a pointer to the LHS of an atomic load. */
6502
6503inline tree *
6505{
6506 return &load_stmt->lhs;
6507}
6508
6510/* Set the RHS of an atomic load. */
6511
6512inline void
6514{
6515 load_stmt->rhs = rhs;
6516}
6517
6519/* Get the RHS of an atomic load. */
6520
6521inline tree
6523{
6524 return load_stmt->rhs;
6525}
6526
6528/* Return a pointer to the RHS of an atomic load. */
6529
6530inline tree *
6532{
6533 return &load_stmt->rhs;
6534}
6535
6537/* Get the definition of the control variable in a GIMPLE_OMP_CONTINUE. */
6538
6539inline tree
6541{
6542 return cont_stmt->control_def;
6543}
6545/* The same as above, but return the address. */
6546
6547inline tree *
6549{
6550 return &cont_stmt->control_def;
6551}
6552
6553/* Set the definition of the control variable in a GIMPLE_OMP_CONTINUE. */
6555inline void
6557{
6558 cont_stmt->control_def = def;
6559}
6560
6562/* Get the use of the control variable in a GIMPLE_OMP_CONTINUE. */
6563
6564inline tree
6566{
6567 return cont_stmt->control_use;
6568}
6569
6570
6571/* The same as above, but return the address. */
6572
6573inline tree *
6575{
6576 return &cont_stmt->control_use;
6577}
6578
6579
6580/* Set the use of the control variable in a GIMPLE_OMP_CONTINUE. */
6581
6582inline void
6584{
6585 cont_stmt->control_use = use;
6586}
6587
6588/* Return the guard associated with the GIMPLE_ASSUME statement GS. */
6589
6590inline tree
6595 return assume_stmt->guard;
6596}
6597
6598/* Set the guard associated with the GIMPLE_ASSUME statement GS. */
6600inline void
6602{
6604 assume_stmt->guard = guard;
6605}
6606
6611 return &assume_stmt->guard;
6612}
6614/* Return the address of the GIMPLE sequence contained in the GIMPLE_ASSUME
6615 statement GS. */
6616
6617inline gimple_seq *
6623
6624/* Return the GIMPLE sequence contained in the GIMPLE_ASSUME statement GS. */
6626inline gimple_seq
6628{
6631 return assume_stmt->body;
6632}
6633
6634/* Return a pointer to the body for the GIMPLE_TRANSACTION statement
6635 TRANSACTION_STMT. */
6636
6638gimple_transaction_body_ptr (gtransaction *transaction_stmt)
6639{
6640 return &transaction_stmt->body;
6641}
6642
6643/* Return the body for the GIMPLE_TRANSACTION statement TRANSACTION_STMT. */
6644
6646gimple_transaction_body (const gtransaction *transaction_stmt)
6647{
6648 return transaction_stmt->body;
6649}
6650
6651/* Return the label associated with a GIMPLE_TRANSACTION. */
6652
6653inline tree
6655{
6656 return transaction_stmt->label_norm;
6657}
6658
6659inline tree *
6661{
6662 return &transaction_stmt->label_norm;
6664
6665inline tree
6666gimple_transaction_label_uninst (const gtransaction *transaction_stmt)
6667{
6668 return transaction_stmt->label_uninst;
6670
6671inline tree *
6673{
6674 return &transaction_stmt->label_uninst;
6676
6677inline tree
6678gimple_transaction_label_over (const gtransaction *transaction_stmt)
6679{
6680 return transaction_stmt->label_over;
6681}
6682
6683inline tree *
6685{
6686 return &transaction_stmt->label_over;
6687}
6688
6689/* Return the subcode associated with a GIMPLE_TRANSACTION. */
6690
6691inline unsigned int
6693{
6694 return transaction_stmt->subcode;
6695}
6696
6697/* Set BODY to be the body for the GIMPLE_TRANSACTION statement
6698 TRANSACTION_STMT. */
6699
6700inline void
6701gimple_transaction_set_body (gtransaction *transaction_stmt,
6702 gimple_seq body)
6703{
6704 transaction_stmt->body = body;
6705}
6706
6707/* Set the label associated with a GIMPLE_TRANSACTION. */
6708
6709inline void
6710gimple_transaction_set_label_norm (gtransaction *transaction_stmt, tree label)
6711{
6712 transaction_stmt->label_norm = label;
6713}
6714
6715inline void
6716gimple_transaction_set_label_uninst (gtransaction *transaction_stmt, tree label)
6718 transaction_stmt->label_uninst = label;
6719}
6720
6721inline void
6722gimple_transaction_set_label_over (gtransaction *transaction_stmt, tree label)
6723{
6724 transaction_stmt->label_over = label;
6725}
6726
6727/* Set the subcode associated with a GIMPLE_TRANSACTION. */
6728
6729inline void
6731 unsigned int subcode)
6732{
6733 transaction_stmt->subcode = subcode;
6734}
6735
6736/* Return a pointer to the return value for GIMPLE_RETURN GS. */
6737
6738inline tree *
6740{
6741 return &gs->op[0];
6742}
6743
6744/* Return the return value for GIMPLE_RETURN GS. */
6745
6746inline tree
6748{
6749 return gs->op[0];
6750}
6751
6752
6753/* Set RETVAL to be the return value for GIMPLE_RETURN GS. */
6754
6755inline void
6757{
6758 gs->op[0] = retval;
6759}
6760
6761
6762/* Returns true when the gimple statement STMT is any of the OMP types. */
6763
6764#define CASE_GIMPLE_OMP \
6765 case GIMPLE_OMP_PARALLEL: \
6766 case GIMPLE_OMP_TASK: \
6767 case GIMPLE_OMP_FOR: \
6768 case GIMPLE_OMP_SECTIONS: \
6769 case GIMPLE_OMP_SECTIONS_SWITCH: \
6770 case GIMPLE_OMP_SINGLE: \
6771 case GIMPLE_OMP_TARGET: \
6772 case GIMPLE_OMP_TEAMS: \
6773 case GIMPLE_OMP_SCOPE: \
6774 case GIMPLE_OMP_SECTION: \
6775 case GIMPLE_OMP_STRUCTURED_BLOCK: \
6776 case GIMPLE_OMP_MASTER: \
6777 case GIMPLE_OMP_MASKED: \
6778 case GIMPLE_OMP_TASKGROUP: \
6779 case GIMPLE_OMP_ORDERED: \
6780 case GIMPLE_OMP_CRITICAL: \
6781 case GIMPLE_OMP_SCAN: \
6782 case GIMPLE_OMP_RETURN: \
6783 case GIMPLE_OMP_ATOMIC_LOAD: \
6784 case GIMPLE_OMP_ATOMIC_STORE: \
6785 case GIMPLE_OMP_CONTINUE
6786
6787inline bool
6788is_gimple_omp (const gimple *stmt)
6789{
6790 switch (gimple_code (stmt))
6791 {
6793 return true;
6794 default:
6795 return false;
6796 }
6797}
6798
6799/* Return true if the OMP gimple statement STMT is any of the OpenACC types
6800 specifically. */
6801
6802inline bool
6803is_gimple_omp_oacc (const gimple *stmt)
6804{
6806 switch (gimple_code (stmt))
6807 {
6811 case GIMPLE_OMP_RETURN:
6812 /* Codes shared between OpenACC and OpenMP cannot be used to disambiguate
6813 the two. */
6814 gcc_unreachable ();
6815
6816 case GIMPLE_OMP_FOR:
6817 switch (gimple_omp_for_kind (stmt))
6818 {
6820 return true;
6821 default:
6822 return false;
6823 }
6824 case GIMPLE_OMP_TARGET:
6825 switch (gimple_omp_target_kind (stmt))
6826 {
6839 return true;
6840 default:
6841 return false;
6842 }
6843 default:
6844 return false;
6845 }
6846}
6847
6848
6849/* Return true if the OMP gimple statement STMT is offloaded. */
6850
6851inline bool
6855 switch (gimple_code (stmt))
6857 case GIMPLE_OMP_TARGET:
6858 switch (gimple_omp_target_kind (stmt))
6859 {
6866 return true;
6867 default:
6868 return false;
6869 }
6870 default:
6871 return false;
6872 }
6873}
6874
6875
6876/* Returns TRUE if statement G is a GIMPLE_NOP. */
6877
6878inline bool
6879gimple_nop_p (const gimple *g)
6880{
6881 return gimple_code (g) == GIMPLE_NOP;
6883
6884
6885/* Return true if GS is a GIMPLE_RESX. */
6886
6887inline bool
6888is_gimple_resx (const gimple *gs)
6889{
6890 return gimple_code (gs) == GIMPLE_RESX;
6892
6893
6894/* Enum and arrays used for allocation stats. Keep in sync with
6895 gimple.cc:gimple_alloc_kind_names. */
6897{
6898 gimple_alloc_kind_assign, /* Assignments. */
6899 gimple_alloc_kind_phi, /* PHI nodes. */
6900 gimple_alloc_kind_cond, /* Conditionals. */
6901 gimple_alloc_kind_rest, /* Everything else. */
6903};
6904
6907
6908/* Return the allocation kind for a given stmt CODE. */
6909inline enum gimple_alloc_kind
6911{
6912 switch (code)
6913 {
6914 case GIMPLE_ASSIGN:
6916 case GIMPLE_PHI:
6917 return gimple_alloc_kind_phi;
6918 case GIMPLE_COND:
6920 default:
6922 }
6923}
6924
6925/* Return true if a location should not be emitted for this statement
6926 by annotate_all_with_location. */
6927
6928inline bool
6930{
6931 return gimple_plf (g, GF_PLF_1);
6932}
6933
6934/* Mark statement G so a location will not be emitted by
6935 annotate_one_with_location. */
6936
6937inline void
6939{
6940 /* The PLF flags are initialized to 0 when a new tuple is created,
6941 so no need to initialize it anywhere. */
6942 gimple_set_plf (g, GF_PLF_1, true);
6943}
6944
6945#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
class edge_def * edge
Definition coretypes.h:342
const class edge_def * const_edge
Definition coretypes.h:343
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:339
void copy_warning(location_t to, location_t from)
Definition diagnostic-spec.cc:185
volatile signed char sc
Definition fp-test.cc:68
built_in_function
Definition genmatch.cc:354
combined_fn
Definition genmatch.cc:365
internal_fn
Definition genmatch.cc:360
tree_code
Definition genmatch.cc:347
static struct filedep ** last
Definition genmddeps.cc:33
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
bool is_gimple_reg(tree t)
Definition gimple-expr.cc:794
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:1779
void annotate_all_with_location_after(gimple_seq seq, gimple_stmt_iterator gsi, location_t location)
Definition gimple.cc:1440
bool gimple_call_same_target_p(const gimple *c1, const gimple *c2)
Definition gimple.cc:1524
int gimple_call_retslot_flags(const gcall *stmt)
Definition gimple.cc:1642
gimple * gimple_alloc(enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
Definition gimple.cc:144
gbind * gimple_build_bind(tree vars, gimple_seq body, tree block)
Definition gimple.cc:608
bool gimple_call_builtin_p(const gimple *stmt)
Definition gimple.cc:2874
greturn * gimple_build_return(tree retval)
Definition gimple.cc:196
gdebug * gimple_build_debug_begin_stmt(tree block, location_t location MEM_STAT_DECL)
Definition gimple.cc:895
gimple * gimple_copy(gimple *stmt)
Definition gimple.cc:1976
gdebug * gimple_build_debug_bind(tree var, tree value, gimple *stmt MEM_STAT_DECL)
Definition gimple.cc:853
const unsigned char gimple_rhs_class_table[]
Definition gimple.cc:2450
size_t gimple_size(enum gimple_code code, unsigned num_ops)
Definition gimple.cc:118
gomp_for * gimple_build_omp_for(gimple_seq body, int kind, tree clauses, size_t collapse, gimple_seq pre_body)
Definition gimple.cc:961
bool gimple_assign_copy_p(gimple *gs)
Definition gimple.cc:1769
gswitch * gimple_build_switch(tree index, tree default_label, const vec< tree > &args)
Definition gimple.cc:823
gomp_single * gimple_build_omp_single(gimple_seq body, tree clauses)
Definition gimple.cc:1209
int gimple_call_flags(const gimple *stmt)
Definition gimple.cc:1541
gcall * gimple_build_call_from_tree(tree t, tree fnptrtype)
Definition gimple.cc:361
bool gimple_has_side_effects(const gimple *s)
Definition gimple.cc:2252
void gimple_set_lhs(gimple *stmt, tree lhs)
Definition gimple.cc:1957
bool gimple_inexpensive_call_p(gcall *stmt)
Definition gimple.cc:3407
gimple * gimple_build_omp_return(bool wait_p)
Definition gimple.cc:1145
uint64_t gimple_alloc_sizes[(int) gimple_alloc_kind_all]
Definition gimple.cc:86
gomp_parallel * gimple_build_omp_parallel(gimple_seq body, tree clauses, tree child_fn, tree data_arg)
Definition gimple.cc:987
gimple * gimple_build_omp_masked(gimple_seq body, tree clauses)
Definition gimple.cc:1079
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:662
EXPORTED_CONST size_t gimple_ops_offset_[]
Definition gimple.cc:60
bool gimple_builtin_call_types_compatible_p(const gimple *stmt, tree fndecl)
Definition gimple.cc:2819
bool gimple_compare_field_offset(tree f1, tree f2)
Definition gimple.cc:2501
geh_dispatch * gimple_build_eh_dispatch(int region)
Definition gimple.cc:839
void gimple_assign_set_rhs_with_ops(gimple_stmt_iterator *gsi, enum tree_code code, tree op1, tree op2, tree op3)
Definition gimple.cc:1900
gassign * gimple_build_assign(tree lhs, tree rhs MEM_STAT_DECL)
Definition gimple.cc:449
uint64_t gimple_alloc_counts[(int) gimple_alloc_kind_all]
Definition gimple.cc:85
gimple * gimple_build_omp_master(gimple_seq body)
Definition gimple.cc:1065
gcall * gimple_call_copy_skip_args(gcall *stmt, bitmap args_to_skip)
Definition gimple.cc:2461
gimple * gimple_build_assume(tree guard, gimple_seq body)
Definition gimple.cc:1306
gimple * gimple_build_omp_sections_switch(void)
Definition gimple.cc:1196
gcond * gimple_build_cond_from_tree(tree cond, tree t_label, tree f_label)
Definition gimple.cc:549
gcall * gimple_build_call_internal(enum internal_fn fn, unsigned nargs,...)
Definition gimple.cc:322
ggoto * gimple_build_goto(tree dest)
Definition gimple.cc:585
gomp_target * gimple_build_omp_target(gimple_seq body, int kind, tree clauses)
Definition gimple.cc:1246
bool infer_nonnull_range_by_attribute(gimple *stmt, tree op)
Definition gimple.cc:3090
gomp_sections * gimple_build_omp_sections(gimple_seq body, tree clauses)
Definition gimple.cc:1181
void gimple_assign_set_rhs_from_tree(gimple_stmt_iterator *gsi, tree expr)
Definition gimple.cc:1883
gtry * gimple_build_try(gimple_seq eval, gimple_seq cleanup, enum gimple_try_flags kind)
Definition gimple.cc:755
geh_else * gimple_build_eh_else(gimple_seq n_body, gimple_seq e_body)
Definition gimple.cc:739
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:1012
bool nonfreeing_call_p(gimple *call)
Definition gimple.cc:2980
geh_mnt * gimple_build_eh_must_not_throw(tree decl)
Definition gimple.cc:725
gimple * gimple_build_omp_scope(gimple_seq body, tree clauses)
Definition gimple.cc:1228
gcall * gimple_build_call_valist(tree fn, unsigned nargs, va_list ap)
Definition gimple.cc:285
bool empty_body_p(gimple_seq body)
Definition gimple.cc:1486
int gimple_call_arg_flags(const gcall *stmt, unsigned arg)
Definition gimple.cc:1611
gomp_atomic_load * gimple_build_omp_atomic_load(tree lhs, tree rhs, enum omp_memory_order mo)
Definition gimple.cc:1279
gomp_teams * gimple_build_omp_teams(gimple_seq body, tree clauses)
Definition gimple.cc:1265
location_t gimple_or_expr_nonartificial_location(gimple *stmt, tree expr)
Definition gimple.cc:3421
gcatch * gimple_build_catch(tree types, gimple_seq handler)
Definition gimple.cc:696
void gimple_seq_add_stmt(gimple_seq *seq_p, gimple *gs)
Definition gimple.cc:1353
geh_filter * gimple_build_eh_filter(tree types, gimple_seq failure)
Definition gimple.cc:712
void gimple_cond_set_condition_from_tree(gcond *stmt, tree cond)
Definition gimple.cc:562
gdebug * gimple_build_debug_source_bind(tree var, tree value, gimple *stmt MEM_STAT_DECL)
Definition gimple.cc:873
gomp_continue * gimple_build_omp_continue(tree control_def, tree control_use)
Definition gimple.cc:1113
gimple * gimple_build_omp_section(gimple_seq body)
Definition gimple.cc:1035
void dump_gimple_statistics(void)
Definition gimple.cc:2371
bool gimple_could_trap_p_1(const gimple *s, bool include_mem, bool include_stores)
Definition gimple.cc:2288
gomp_scan * gimple_build_omp_scan(gimple_seq body, tree clauses)
Definition gimple.cc:1162
void gimple_seq_set_location(gimple_seq seq, location_t loc)
Definition gimple.cc:3365
glabel * gimple_build_label(tree label)
Definition gimple.cc:574
void dump_decl_set(FILE *file, bitmap set)
Definition gimple.cc:2956
EXPORTED_CONST enum gimple_statement_structure_enum gss_for_code_[]
Definition gimple.cc:78
bool gimple_assign_load_p(const gimple *gs)
Definition gimple.cc:1815
bool infer_nonnull_range(gimple *stmt, tree op)
Definition gimple.cc:3061
bool infer_nonnull_range_by_dereference(gimple *stmt, tree op)
Definition gimple.cc:3070
void gimple_seq_add_seq(gimple_seq *dst_p, gimple_seq src)
Definition gimple.cc:1385
gcall * gimple_build_call_vec(tree fn, const vec< tree > &args)
Definition gimple.cc:245
void gimple_init(gimple *g, enum gimple_code code, unsigned num_ops)
Definition gimple.cc:129
gimple * gimple_build_omp_structured_block(gimple_seq body)
Definition gimple.cc:1050
tree gimple_call_nonnull_arg(gcall *call)
Definition gimple.cc:1744
gcall * gimple_build_call_internal_vec(enum internal_fn fn, const vec< tree > &args)
Definition gimple.cc:342
tree gimple_get_lhs(const gimple *stmt)
Definition gimple.cc:1938
gcall * gimple_build_call(tree fn, unsigned nargs,...)
Definition gimple.cc:262
bool gimple_call_nonnull_result_p(gcall *call)
Definition gimple.cc:1718
void gimple_seq_discard(gimple_seq seq)
Definition gimple.cc:3374
bool gimple_asm_clobbers_memory_p(const gasm *stmt)
Definition gimple.cc:2935
gimple * gimple_build_wce(gimple_seq cleanup)
Definition gimple.cc:776
void gimple_set_bb(gimple *stmt, basic_block bb)
Definition gimple.cc:1835
bool gimple_could_trap_p(const gimple *s)
Definition gimple.cc:2353
void gimple_call_reset_alias_info(gcall *s)
Definition gimple.cc:209
gresx * gimple_build_resx(int region)
Definition gimple.cc:789
bool gimple_assign_rhs_could_trap_p(gimple *s)
Definition gimple.cc:2361
gimple * gimple_build_nop(void)
Definition gimple.cc:597
gdebug * gimple_build_debug_inline_entry(tree block, location_t location MEM_STAT_DECL)
Definition gimple.cc:916
gimple * gimple_build_omp_taskgroup(gimple_seq body, tree clauses)
Definition gimple.cc:1096
gomp_ordered * gimple_build_omp_ordered(gimple_seq body, tree clauses)
Definition gimple.cc:1129
int gimple_call_return_flags(const gcall *stmt)
Definition gimple.cc:1698
bool gimple_call_operator_delete_p(const gcall *stmt)
Definition gimple.cc:2862
int gimple_call_static_chain_flags(const gcall *stmt)
Definition gimple.cc:1670
gtransaction * gimple_build_transaction(gimple_seq body)
Definition gimple.cc:1318
void preprocess_case_label_vec_for_gimple(vec< tree > &labels, tree index_type, tree *default_casep)
Definition gimple.cc:3198
gcond * gimple_build_cond(enum tree_code pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
Definition gimple.cc:531
void annotate_all_with_location(gimple_seq stmt_p, location_t location)
Definition gimple.cc:1455
gimple_seq gimple_seq_copy(gimple_seq src)
Definition gimple.cc:1504
gomp_critical * gimple_build_omp_critical(gimple_seq body, tree name, tree clauses)
Definition gimple.cc:940
tree gimple_signed_type(tree type)
Definition gimple.cc:2738
void gimple_seq_add_stmt_without_update(gimple_seq *seq_p, gimple *gs)
Definition gimple.cc:1370
gcall * gimple_build_builtin_unreachable(location_t loc)
Definition gimple.cc:433
void sort_case_labels(vec< tree > &label_vec)
Definition gimple.cc:3173
gswitch * gimple_build_switch_nlabels(unsigned nlabels, tree index, tree default_label)
Definition gimple.cc:804
combined_fn gimple_call_combined_fn(const gimple *stmt)
Definition gimple.cc:2915
unsigned get_gimple_rhs_num_ops(enum tree_code code)
Definition gimple.cc:2405
bool gimple_assign_unary_nop_p(gimple *gs)
Definition gimple.cc:1802
void maybe_remove_unused_call_args(struct function *fn, gimple *stmt)
Definition gimple.cc:3392
bool nonbarrier_call_p(gimple *call)
Definition gimple.cc:3026
tree gimple_unsigned_type(tree type)
Definition gimple.cc:2729
void gimple_move_vops(gimple *new_stmt, gimple *old_stmt)
Definition gimple.cc:2236
bool gimple_ior_addresses_taken(bitmap addresses_taken, gimple *stmt)
Definition gimple.cc:2808
alias_set_type gimple_get_alias_set(tree t)
Definition gimple.cc:2748
gomp_atomic_store * gimple_build_omp_atomic_store(tree val, enum omp_memory_order mo)
Definition gimple.cc:1294
void gimple_seq_add_seq_without_update(gimple_seq *dst_p, gimple_seq src)
Definition gimple.cc:1400
gimple * gimple_build_omp_scope(gimple_seq, tree)
Definition gimple.cc:1228
void gimple_omp_target_set_clauses(gomp_target *omp_target_stmt, tree clauses)
Definition gimple.h:6160
gimple_alloc_kind
Definition gimple.h:6850
@ gimple_alloc_kind_assign
Definition gimple.h:6851
@ gimple_alloc_kind_phi
Definition gimple.h:6852
@ gimple_alloc_kind_rest
Definition gimple.h:6854
@ gimple_alloc_kind_all
Definition gimple.h:6855
@ gimple_alloc_kind_cond
Definition gimple.h:6853
gomp_for * gimple_build_omp_for(gimple_seq, int, tree, size_t, gimple_seq)
Definition gimple.cc:961
gimple * currently_expanding_gimple_stmt
Definition cfgexpand.cc:92
tree gimple_transaction_label_uninst(const gtransaction *transaction_stmt)
Definition gimple.h:6619
tree gimple_label_label(const glabel *gs)
Definition gimple.h:3889
tree * gimple_omp_task_arg_size_ptr(gimple *gs)
Definition gimple.h:6061
tree gimple_omp_task_arg_size(const gimple *gs)
Definition gimple.h:6051
tree * gimple_omp_scope_clauses_ptr(gimple *gs)
Definition gimple.h:5375
gimple * gimple_seq_node
Definition gimple.h:28
bool gimple_clobber_p(const gimple *s)
Definition gimple.h:2932
void gimple_omp_task_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5799
void gimple_cond_set_code(gcond *gs, enum tree_code code)
Definition gimple.h:3667
bool gimple_compare_field_offset(tree, tree)
Definition gimple.cc:2501
location_t gimple_location(const gimple *g)
Definition gimple.h:1888
tree * gimple_catch_types_ptr(gcatch *catch_stmt)
Definition gimple.h:4216
tree gimple_omp_for_initial(const gimple *gs, size_t i)
Definition gimple.h:5563
gimple_seq gimple_eh_else_n_body(const geh_else *eh_else_stmt)
Definition gimple.h:4348
bool gimple_seq_singleton_p(gimple_seq seq)
Definition gimple.h:1966
gimple_seq * gimple_omp_for_pre_body_ptr(gimple *gs)
Definition gimple.h:5663
static void gimple_call_set_expected_throw(gcall *s, bool expected_throw_p)
Definition gimple.h:3524
tree * gimple_omp_task_child_fn_ptr(gimple *gs)
Definition gimple.h:5869
void gimple_omp_set_subcode(gimple *s, unsigned int subcode)
Definition gimple.h:2313
gimple_seq gimple_eh_filter_failure(const gimple *gs)
Definition gimple.h:4296
gimple_seq_node gimple_seq_last(gimple_seq s)
Definition gimple.h:1713
tree gimple_bind_block(const gbind *bind_stmt)
Definition gimple.h:4000
void gimple_omp_atomic_store_set_val(gomp_atomic_store *store_stmt, tree val)
Definition gimple.h:6412
tree * gimple_op_ptr(gimple *gs, unsigned i)
Definition gimple.h:2564
gimple * gimple_build_omp_taskgroup(gimple_seq, tree)
Definition gimple.cc:1096
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:3676
void gimple_transaction_set_label_norm(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6663
gcond * gimple_build_cond(enum tree_code, tree, tree, tree, tree)
Definition gimple.cc:531
tree gimple_omp_ordered_clauses(const gomp_ordered *ord_stmt)
Definition gimple.h:5237
tree gimple_block(const gimple *g)
Definition gimple.h:1869
void gimple_try_set_eval(gtry *try_stmt, gimple_seq eval)
Definition gimple.h:4470
tree * gimple_omp_taskreg_data_arg_ptr(gimple *gs)
Definition gimple.h:5999
gswitch * gimple_build_switch_nlabels(unsigned, tree, tree)
Definition gimple.cc:804
int gimple_call_static_chain_flags(const gcall *)
Definition gimple.cc:1670
tree * gimple_vdef_ptr(gimple *g)
Definition gimple.h:2211
void gimple_set_bb(gimple *, basic_block)
Definition gimple.cc:1835
bool gimple_omp_task_taskloop_p(const gimple *g)
Definition gimple.h:5810
void gimple_bind_append_vars(gbind *bind_stmt, tree vars)
Definition gimple.h:3947
const unsigned char gimple_rhs_class_table[]
Definition gimple.cc:2450
void gimple_omp_task_set_taskwait_p(gimple *g, bool taskwait_p)
Definition gimple.h:5846
bool infer_nonnull_range_by_dereference(gimple *, tree)
Definition gimple.cc:3070
gresx * gimple_build_resx(int)
Definition gimple.cc:789
tree gimple_omp_task_child_fn(const gimple *gs)
Definition gimple.h:5859
bool gimple_asm_input_p(const gasm *asm_stmt)
Definition gimple.h:4198
gcall * gimple_build_call_internal(enum internal_fn, unsigned,...)
Definition gimple.cc:322
gimple_seq * gimple_eh_else_n_body_ptr(geh_else *eh_else_stmt)
Definition gimple.h:4342
const char *const gimple_code_name[]
Definition gimple.cc:72
void gimple_assign_set_rhs2(gassign *gs, tree rhs)
Definition gimple.h:2746
void gimple_assign_set_rhs_from_tree(gimple_stmt_iterator *, tree)
Definition gimple.cc:1883
void gimple_bind_add_seq(gbind *bind_stmt, gimple_seq seq)
Definition gimple.h:3990
bool gimple_call_nothrow_p(gcall *s)
Definition gimple.h:3514
tree * gimple_omp_teams_data_arg_ptr(gomp_teams *omp_teams_stmt)
Definition gimple.h:6312
tree gimple_omp_atomic_load_rhs(const gomp_atomic_load *load_stmt)
Definition gimple.h:6475
void gimple_omp_task_set_child_fn(gimple *gs, tree child_fn)
Definition gimple.h:5879
bool gimple_has_ops(const gimple *g)
Definition gimple.h:2103
int gimple_call_arg_flags(const gcall *, unsigned)
Definition gimple.cc:1611
tree gimple_op(const gimple *gs, unsigned i)
Definition gimple.h:2550
tree * gimple_ops(gimple *gs)
Definition gimple.h:2533
gimple * gimple_build_omp_return(bool)
Definition gimple.cc:1145
tree * gimple_omp_taskreg_child_fn_ptr(gimple *gs)
Definition gimple.h:5965
bool gimple_cond_true_p(const gcond *gs)
Definition gimple.h:3807
tree gimple_assume_guard(const gimple *gs)
Definition gimple.h:6544
void gimple_debug_bind_reset_value(gimple *dbg)
Definition gimple.h:5016
void gimple_omp_teams_set_data_arg(gomp_teams *omp_teams_stmt, tree data_arg)
Definition gimple.h:6321
bool gimple_debug_inline_entry_p(const gimple *s)
Definition gimple.h:5114
bool gimple_omp_atomic_need_value_p(const gimple *g)
Definition gimple.h:2446
void gimple_assign_set_rhs3(gassign *gs, tree rhs)
Definition gimple.h:2793
void gimple_cond_make_false(gcond *gs)
Definition gimple.h:3785
void gimple_omp_target_set_child_fn(gomp_target *omp_target_stmt, tree child_fn)
Definition gimple.h:6208
gimple * gimple_seq_first_stmt(gimple_seq s)
Definition gimple.h:1693
tree * gimple_omp_for_initial_ptr(gimple *gs, size_t i)
Definition gimple.h:5574
void gimple_omp_teams_set_host(gomp_teams *omp_teams_stmt, bool value)
Definition gimple.h:6337
tree * gimple_omp_sections_control_ptr(gimple *gs)
Definition gimple.h:6391
void gimple_omp_task_set_data_arg(gimple *gs, tree data_arg)
Definition gimple.h:5910
void gimple_bind_set_body(gbind *bind_stmt, gimple_seq seq)
Definition gimple.h:3972
tree gimple_eh_filter_types(const gimple *gs)
Definition gimple.h:4263
tree gimple_vdef(const gimple *g)
Definition gimple.h:2187
gimple * gimple_copy(gimple *)
Definition gimple.cc:1976
void gimple_asm_set_volatile(gasm *asm_stmt, bool volatile_p)
Definition gimple.h:4153
void gimple_omp_parallel_set_combined_p(gimple *g, bool combined_p)
Definition gimple.h:2432
bool gimple_store_p(const gimple *gs)
Definition gimple.h:2907
#define CASE_GIMPLE_OMP
Definition gimple.h:6717
bool gimple_has_lhs(const gimple *stmt)
Definition gimple.h:3638
bool gimple_assign_nontemporal_move_p(const gassign *gs)
Definition gimple.h:2830
void gimple_omp_for_set_pre_body(gimple *gs, gimple_seq pre_body)
Definition gimple.h:5684
void gimple_call_set_tail(gcall *s, bool tail_p)
Definition gimple.h:3355
tree * gimple_call_chain_ptr(gcall *call_stmt)
Definition gimple.h:3268
void gimple_phi_set_result(gphi *phi, tree result)
Definition gimple.h:4590
unsigned gimple_omp_subcode(const gimple *s)
Definition gimple.h:2303
gimple_code
Definition gimple.h:30
@ LAST_AND_UNUSED_GIMPLE_CODE
Definition gimple.h:34
void gimple_debug_bind_set_value(gimple *dbg, tree value)
Definition gimple.h:5001
unsigned int gimple_stmt_max_uid(struct function *fn)
Definition gimple.h:1662
gcall * gimple_build_call(tree, unsigned,...)
Definition gimple.cc:262
void gimple_transaction_set_label_over(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6675
int gimple_call_retslot_flags(const gcall *)
Definition gimple.cc:1642
location_t gimple_phi_arg_location(const gphi *phi, size_t i)
Definition gimple.h:4708
tree * gimple_omp_sections_clauses_ptr(gimple *gs)
Definition gimple.h:6358
tree gimple_debug_source_bind_get_value(const gimple *dbg)
Definition gimple.h:5061
bool gimple_has_substatements(gimple *g)
Definition gimple.h:1822
gomp_critical * gimple_build_omp_critical(gimple_seq, tree, tree)
Definition gimple.cc:940
void gimple_omp_ordered_set_clauses(gomp_ordered *ord_stmt, tree clauses)
Definition gimple.h:5257
bool gimple_call_va_arg_pack_p(const gcall *s)
Definition gimple.h:3477
gcatch * gimple_build_catch(tree, gimple_seq)
Definition gimple.cc:696
void gimple_omp_for_set_cond(gimple *gs, size_t i, enum tree_code cond)
Definition gimple.h:5518
tree gimple_debug_source_bind_get_var(const gimple *dbg)
Definition gimple.h:5050
bool gimple_debug_nonbind_marker_p(const gimple *s)
Definition gimple.h:5125
void gimple_cond_set_rhs(gcond *gs, tree rhs)
Definition gimple.h:3736
unsigned int inc_gimple_stmt_max_uid(struct function *fn)
Definition gimple.h:1676
tree gimple_transaction_label_norm(const gtransaction *transaction_stmt)
Definition gimple.h:6607
tree * gimple_omp_scan_clauses_ptr(gomp_scan *scan_stmt)
Definition gimple.h:5276
void gimple_omp_taskgroup_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5318
gdebug * gimple_build_debug_bind(tree, tree, gimple *CXX_MEM_STAT_INFO)
bool gimple_omp_for_combined_p(const gimple *g)
Definition gimple.h:5418
tree * gimple_omp_atomic_store_val_ptr(gomp_atomic_store *store_stmt)
Definition gimple.h:6430
gcall * gimple_build_call_from_tree(tree, tree)
Definition gimple.cc:361
gomp_target * gimple_build_omp_target(gimple_seq, int, tree)
Definition gimple.cc:1246
gimple_seq phi_nodes(const_basic_block bb)
Definition gimple.h:4643
void gimple_set_visited(gimple *stmt, bool visited_p)
Definition gimple.h:2001
tree * gimple_omp_task_arg_align_ptr(gimple *gs)
Definition gimple.h:6091
gomp_task * gimple_build_omp_task(gimple_seq, tree, tree, tree, tree, tree, tree)
Definition gimple.cc:1012
void annotate_all_with_location(gimple_seq, location_t)
Definition gimple.cc:1455
tree gimple_unsigned_type(tree)
Definition gimple.cc:2729
bool gimple_assign_rhs_could_trap_p(gimple *)
Definition gimple.cc:2361
enum tree_code gimple_omp_for_cond(const gimple *gs, size_t i)
Definition gimple.h:5507
bool gimple_call_from_thunk_p(gcall *s)
Definition gimple.h:3431
bool gimple_call_internal_unique_p(const gcall *gs)
Definition gimple.h:3059
gbind * gimple_seq_first_stmt_as_a_bind(gimple_seq s)
Definition gimple.h:1703
void gimple_assign_set_rhs_with_ops(gimple_stmt_iterator *, enum tree_code, tree, tree, tree)
Definition gimple.cc:1900
void maybe_remove_unused_call_args(struct function *, gimple *)
Definition gimple.cc:3392
tree gimple_omp_teams_child_fn(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6275
gimple_rhs_class
Definition gimple.h:117
@ GIMPLE_TERNARY_RHS
Definition gimple.h:119
@ GIMPLE_INVALID_RHS
Definition gimple.h:118
@ GIMPLE_SINGLE_RHS
Definition gimple.h:122
@ GIMPLE_UNARY_RHS
Definition gimple.h:121
@ GIMPLE_BINARY_RHS
Definition gimple.h:120
void gimple_bind_add_stmt(gbind *bind_stmt, gimple *stmt)
Definition gimple.h:3981
tree gimple_assign_rhs3(const gassign *gs)
Definition gimple.h:2763
void gimple_goto_set_dest(ggoto *gs, tree dest)
Definition gimple.h:3918
tree * gimple_arg_ptr(gimple *gs, unsigned int i)
Definition gimple.h:4775
bool gimple_asm_inline_p(const gasm *asm_stmt)
Definition gimple.h:4165
tree gimple_omp_target_clauses(const gimple *gs)
Definition gimple.h:6140
void gimple_omp_continue_set_control_use(gomp_continue *cont_stmt, tree use)
Definition gimple.h:6536
void gimple_transaction_set_body(gtransaction *transaction_stmt, gimple_seq body)
Definition gimple.h:6654
tree gimple_omp_scope_clauses(const gimple *gs)
Definition gimple.h:5363
tree gimple_omp_for_incr(const gimple *gs, size_t i)
Definition gimple.h:5629
size_t gimple_size(enum gimple_code code, unsigned num_ops=0)
Definition gimple.cc:118
combined_fn gimple_call_combined_fn(const gimple *)
Definition gimple.cc:2915
unsigned gimple_switch_num_labels(const gswitch *gs)
Definition gimple.h:4820
void gimple_wce_set_cleanup(gimple *gs, gimple_seq cleanup)
Definition gimple.h:4508
tree gimple_switch_index(const gswitch *gs)
Definition gimple.h:4843
gimple * gimple_build_omp_sections_switch(void)
Definition gimple.cc:1196
gimple * gimple_seq_last_stmt(gimple_seq s)
Definition gimple.h:1722
bool gimple_assign_cast_p(const gimple *s)
Definition gimple.h:2916
void dump_decl_set(FILE *, bitmap)
Definition gimple.cc:2956
void gimple_omp_target_set_kind(gomp_target *g, int kind)
Definition gimple.h:6180
void gimple_seq_add_seq_without_update(gimple_seq *, gimple_seq)
Definition gimple.cc:1400
unsigned gimple_asm_nlabels(const gasm *asm_stmt)
Definition gimple.h:4047
tree gimple_omp_parallel_data_arg(const gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5751
int get_lineno(const gimple *stmt)
Definition gimple.h:5137
ggoto * gimple_build_goto(tree dest)
Definition gimple.cc:585
void gimple_call_set_fntype(gcall *call_stmt, tree fntype)
Definition gimple.h:3137
void gimple_omp_task_set_arg_align(gimple *gs, tree arg_align)
Definition gimple.h:6101
unsigned gimple_call_num_args(const gcall *gs)
Definition gimple.h:3285
unsigned gimple_num_ops(const gimple *gs)
Definition gimple.h:2515
tree gimple_omp_parallel_clauses(const gimple *gs)
Definition gimple.h:5693
void gimple_switch_set_index(gswitch *gs, tree index)
Definition gimple.h:4861
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:4030
bool gimple_debug_bind_p(const gimple *s)
Definition gimple.h:4947
bool gimple_omp_task_taskwait_p(const gimple *g)
Definition gimple.h:5835
void gimple_seq_set_last(gimple_seq *ps, gimple_seq_node last)
Definition gimple.h:1732
tree * gimple_omp_parallel_clauses_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5703
gf_mask
Definition gimple.h:137
@ GF_OMP_ATOMIC_NEED_VALUE
Definition gimple.h:200
@ GF_OMP_TARGET_KIND_ENTER_DATA
Definition gimple.h:169
@ GF_CALL_MUST_TAIL_CALL
Definition gimple.h:149
@ GF_OMP_TARGET_KIND_OACC_SERIAL
Definition gimple.h:173
@ GF_CALL_INTERNAL
Definition gimple.h:147
@ GF_OMP_ATOMIC_MEMORY_ORDER
Definition gimple.h:199
@ GF_CALL_NOTHROW
Definition gimple.h:145
@ GF_OMP_RETURN_NOWAIT
Definition gimple.h:195
@ GF_OMP_TARGET_KIND_OACC_DATA_KERNELS
Definition gimple.h:188
@ GF_CALL_CTRL_ALTERING
Definition gimple.h:148
@ GF_OMP_TEAMS_HOST
Definition gimple.h:189
@ GF_CALL_VA_ARG_PACK
Definition gimple.h:144
@ GF_OMP_PARALLEL_COMBINED
Definition gimple.h:154
@ GF_OMP_SECTION_LAST
Definition gimple.h:197
@ GF_OMP_TARGET_KIND_OACC_DATA
Definition gimple.h:174
@ GF_CALL_RETURN_SLOT_OPT
Definition gimple.h:142
@ GF_OMP_TARGET_KIND_EXIT_DATA
Definition gimple.h:170
@ GF_OMP_TARGET_KIND_DATA
Definition gimple.h:167
@ GF_OMP_TARGET_KIND_OACC_EXIT_DATA
Definition gimple.h:177
@ GF_PREDICT_TAKEN
Definition gimple.h:202
@ GF_CALL_TAILCALL
Definition gimple.h:143
@ GF_OMP_FOR_KIND_SIMD
Definition gimple.h:162
@ GF_OMP_TASK_TASKWAIT
Definition gimple.h:156
@ GF_OMP_TARGET_KIND_OACC_UPDATE
Definition gimple.h:175
@ GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_PARALLELIZED
Definition gimple.h:182
@ GF_OMP_TARGET_KIND_OACC_KERNELS
Definition gimple.h:172
@ GF_OMP_TARGET_KIND_MASK
Definition gimple.h:165
@ GF_OMP_FOR_KIND_TASKLOOP
Definition gimple.h:160
@ GF_CALL_BY_DESCRIPTOR
Definition gimple.h:150
@ GF_ASM_INPUT
Definition gimple.h:138
@ GF_CALL_FROM_THUNK
Definition gimple.h:141
@ GF_OMP_ORDERED_STANDALONE
Definition gimple.h:198
@ GF_OMP_TASK_TASKLOOP
Definition gimple.h:155
@ GF_OMP_FOR_COMBINED_INTO
Definition gimple.h:164
@ GF_OMP_ATOMIC_WEAK
Definition gimple.h:201
@ GF_OMP_TARGET_KIND_UPDATE
Definition gimple.h:168
@ GF_OMP_TARGET_KIND_REGION
Definition gimple.h:166
@ GF_ASM_INLINE
Definition gimple.h:140
@ GF_CALL_XTHROW
Definition gimple.h:153
@ GF_OMP_TARGET_KIND_OACC_HOST_DATA
Definition gimple.h:179
@ GF_CALL_FROM_NEW_OR_DELETE
Definition gimple.h:152
@ GF_OMP_FOR_KIND_MASK
Definition gimple.h:157
@ GF_OMP_FOR_COMBINED
Definition gimple.h:163
@ GF_OMP_FOR_KIND_OACC_LOOP
Definition gimple.h:161
@ GF_OMP_TARGET_KIND_OACC_DECLARE
Definition gimple.h:178
@ GF_ASM_VOLATILE
Definition gimple.h:139
@ GF_CALL_ALLOCA_FOR_VAR
Definition gimple.h:146
@ GF_OMP_FOR_KIND_DISTRIBUTE
Definition gimple.h:159
@ GF_OMP_TARGET_KIND_OACC_PARALLEL
Definition gimple.h:171
@ GF_OMP_TARGET_KIND_OACC_ENTER_DATA
Definition gimple.h:176
@ GF_OMP_FOR_KIND_FOR
Definition gimple.h:158
@ GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_GANG_SINGLE
Definition gimple.h:185
@ GF_CALL_NOCF_CHECK
Definition gimple.h:151
enum gimple_statement_structure_enum gss_for_code(enum gimple_code code)
Definition gimple.h:1802
bool gimple_could_trap_p(const gimple *)
Definition gimple.cc:2353
tree * gimple_omp_for_index_ptr(gimple *gs, size_t i)
Definition gimple.h:5541
void gimple_omp_return_set_nowait(gimple *s)
Definition gimple.h:2324
void gimple_call_set_from_new_or_delete(gcall *s, bool from_new_or_delete_p)
Definition gimple.h:3441
tree gimple_omp_for_final(const gimple *gs, size_t i)
Definition gimple.h:5596
tree * gimple_omp_task_copy_fn_ptr(gimple *gs)
Definition gimple.h:6031
tree * gimple_omp_teams_child_fn_ptr(gomp_teams *omp_teams_stmt)
Definition gimple.h:6284
tree * gimple_omp_for_clauses_ptr(gimple *gs)
Definition gimple.h:5476
void gimple_init_singleton(gimple *g)
Definition gimple.h:2093
gimple_seq gimple_eh_else_e_body(const geh_else *eh_else_stmt)
Definition gimple.h:4360
bool gimple_call_nonnull_result_p(gcall *)
Definition gimple.cc:1718
void gimple_omp_task_set_taskloop_p(gimple *g, bool taskloop_p)
Definition gimple.h:5821
void gimple_omp_for_set_index(gimple *gs, size_t i, tree index)
Definition gimple.h:5552
void gimple_catch_set_types(gcatch *catch_stmt, tree t)
Definition gimple.h:4245
gimple_seq gimple_try_cleanup(const gimple *gs)
Definition gimple.h:4447
gimple_seq * gimple_catch_handler_ptr(gcatch *catch_stmt)
Definition gimple.h:4226
T GIMPLE_CHECK2(gimple *gs)
Definition gimple.h:102
void gimple_set_use_ops(gimple *g, struct use_optype_d *use)
Definition gimple.h:2164
gcall * gimple_build_builtin_unreachable(location_t)
Definition gimple.cc:433
tree * gimple_assign_rhs1_ptr(gassign *gs)
Definition gimple.h:2677
tree * gimple_debug_source_bind_get_value_ptr(gimple *dbg)
Definition gimple.h:5072
bool gimple_call_ctrl_altering_p(const gcall *gs)
Definition gimple.h:3104
void gimple_omp_sections_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:6369
tree * gimple_omp_return_lhs_ptr(gimple *g)
Definition gimple.h:2367
gcall * gimple_build_call_internal_vec(enum internal_fn, const vec< tree > &)
Definition gimple.cc:342
tree * gimple_omp_parallel_data_arg_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5760
void gimple_cond_set_condition_from_tree(gcond *, tree)
Definition gimple.cc:562
void gimple_eh_else_set_e_body(geh_else *eh_else_stmt, gimple_seq seq)
Definition gimple.h:4372
tree * gimple_omp_atomic_load_rhs_ptr(gomp_atomic_load *load_stmt)
Definition gimple.h:6484
gimple_seq * gimple_wce_cleanup_ptr(gimple *gs)
Definition gimple.h:4489
bool gimple_assign_unary_nop_p(gimple *)
Definition gimple.cc:1802
void gimple_eh_dispatch_set_region(geh_dispatch *eh_dispatch_stmt, int region)
Definition gimple.h:4812
tree gimple_phi_result(const gphi *gs)
Definition gimple.h:4560
void gimple_assign_set_lhs(gassign *gs, tree lhs)
Definition gimple.h:2641
void gimple_asm_set_output_op(gasm *asm_stmt, unsigned index, tree out_op)
Definition gimple.h:4084
bool gimple_ior_addresses_taken(bitmap, gimple *)
Definition gimple.cc:2808
bool nonbarrier_call_p(gimple *)
Definition gimple.cc:3026
location_t gimple_location_safe(const gimple *g)
Definition gimple.h:1897
tree gimple_debug_bind_get_value(const gimple *dbg)
Definition gimple.h:4969
#define GIMPLE_CHECK(GS, CODE)
Definition gimple.h:99
gimple_seq * gimple_assume_body_ptr(gimple *gs)
Definition gimple.h:6571
tree * gimple_assume_guard_ptr(gimple *gs)
Definition gimple.h:6561
enum gimple_rhs_class gimple_assign_rhs_class(const gimple *gs)
Definition gimple.h:2886
bool stmt_can_terminate_bb_p(gimple *)
Definition tree-cfg.cc:8829
tree gimple_omp_masked_clauses(const gimple *gs)
Definition gimple.h:5329
void gimple_omp_for_set_combined_into_p(gomp_for *g, bool combined_p)
Definition gimple.h:5453
unsigned gimple_asm_ninputs(const gasm *asm_stmt)
Definition gimple.h:4021
void gimple_omp_critical_set_name(gomp_critical *crit_stmt, tree name)
Definition gimple.h:5199
void gimple_try_set_catch_is_cleanup(gtry *g, bool catch_is_cleanup)
Definition gimple.h:4456
void gimple_omp_taskreg_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5943
gimple_seq * gimple_omp_body_ptr(gimple *gs)
Definition gimple.h:5154
bool gimple_seq_empty_p(gimple_seq s)
Definition gimple.h:1750
tree gimple_cond_false_label(const gcond *gs)
Definition gimple.h:3776
bool gimple_omp_teams_host(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6329
struct use_optype_d * gimple_use_ops(const gimple *g)
Definition gimple.h:2151
location_t gimple_or_expr_nonartificial_location(gimple *, tree)
Definition gimple.cc:3421
bool gimple_call_alloca_for_var_p(gcall *s)
Definition gimple.h:3558
bool gimple_do_not_emit_location_p(gimple *g)
Definition gimple.h:6882
void set_gimple_stmt_max_uid(struct function *fn, unsigned int maxid)
Definition gimple.h:1669
tree * gimple_cond_lhs_ptr(gcond *gs)
Definition gimple.h:3692
tree gimple_omp_continue_control_use(const gomp_continue *cont_stmt)
Definition gimple.h:6518
tree gimple_omp_teams_clauses(const gimple *gs)
Definition gimple.h:6247
gimple_seq bb_seq(const_basic_block bb)
Definition gimple.h:1769
void gimple_omp_continue_set_control_def(gomp_continue *cont_stmt, tree def)
Definition gimple.h:6509
void annotate_all_with_location_after(gimple_seq, gimple_stmt_iterator, location_t)
Definition gimple.cc:1440
bool is_gimple_debug(const gimple *gs)
Definition gimple.h:4911
void gimple_omp_atomic_load_set_rhs(gomp_atomic_load *load_stmt, tree rhs)
Definition gimple.h:6466
void gimple_eh_else_set_n_body(geh_else *eh_else_stmt, gimple_seq seq)
Definition gimple.h:4366
tree * gimple_omp_target_child_fn_ptr(gomp_target *omp_target_stmt)
Definition gimple.h:6199
tree * gimple_omp_taskreg_clauses_ptr(gimple *gs)
Definition gimple.h:5931
gswitch * gimple_build_switch(tree, tree, const vec< tree > &)
Definition gimple.cc:823
bool gimple_call_same_target_p(const gimple *, const gimple *)
Definition gimple.cc:1524
void gimple_assume_set_guard(gimple *gs, tree guard)
Definition gimple.h:6554
void dump_gimple_statistics(void)
Definition gimple.cc:2371
tree gimple_omp_atomic_store_val(const gomp_atomic_store *store_stmt)
Definition gimple.h:6421
bool gimple_call_return_slot_opt_p(const gcall *s)
Definition gimple.h:3409
void gimple_debug_source_bind_set_var(gimple *dbg, tree var)
Definition gimple.h:5082
tree * gimple_switch_index_ptr(gswitch *gs)
Definition gimple.h:4852
void gimple_omp_sections_set_control(gimple *gs, tree control)
Definition gimple.h:6402
gimple * gimple_build_omp_structured_block(gimple_seq)
Definition gimple.cc:1050
unsigned gimple_uid(const gimple *g)
Definition gimple.h:2084
bool gimple_omp_for_combined_into_p(const gimple *g)
Definition gimple.h:5442
bool gimple_references_memory_p(gimple *stmt)
Definition gimple.h:2294
tree gimple_omp_sections_clauses(const gimple *gs)
Definition gimple.h:6348
void gimple_call_set_chain(gcall *call_stmt, tree chain)
Definition gimple.h:3276
tree gimple_catch_types(const gcatch *catch_stmt)
Definition gimple.h:4207
tree * gimple_debug_bind_get_value_ptr(gimple *dbg)
Definition gimple.h:4980
tree * gimple_omp_target_clauses_ptr(gimple *gs)
Definition gimple.h:6150
geh_mnt * gimple_build_eh_must_not_throw(tree)
Definition gimple.cc:725
void gimple_set_block(gimple *g, tree block)
Definition gimple.h:1880
void gimple_omp_atomic_set_need_value(gimple *g)
Definition gimple.h:2457
void gimple_call_set_alloca_for_var(gcall *s, bool for_var)
Definition gimple.h:3547
void gimple_omp_for_set_combined_p(gomp_for *g, bool combined_p)
Definition gimple.h:5429
tree * gimple_assign_rhs3_ptr(gimple *gs)
Definition gimple.h:2782
gimple_debug_subcode
Definition gimple.h:207
@ GIMPLE_DEBUG_INLINE_ENTRY
Definition gimple.h:211
@ GIMPLE_DEBUG_BEGIN_STMT
Definition gimple.h:210
@ GIMPLE_DEBUG_BIND
Definition gimple.h:208
@ GIMPLE_DEBUG_SOURCE_BIND
Definition gimple.h:209
tree * gimple_omp_ordered_clauses_ptr(gomp_ordered *ord_stmt)
Definition gimple.h:5247
bool is_gimple_resx(const gimple *gs)
Definition gimple.h:6841
tree gimple_omp_continue_control_def(const gomp_continue *cont_stmt)
Definition gimple.h:6493
gomp_single * gimple_build_omp_single(gimple_seq, tree)
Definition gimple.cc:1209
tree gimple_omp_task_data_arg(const gimple *gs)
Definition gimple.h:5890
gimple_seq gimple_assume_body(const gimple *gs)
Definition gimple.h:6580
enum tree_code gimple_assign_rhs_code(const gassign *gs)
Definition gimple.h:2850
void gimple_catch_set_handler(gcatch *catch_stmt, gimple_seq handler)
Definition gimple.h:4254
tree gimple_call_fntype(const gcall *gs)
Definition gimple.h:3120
tree gimple_omp_task_arg_align(const gimple *gs)
Definition gimple.h:6081
bool gimple_debug_begin_stmt_p(const gimple *s)
Definition gimple.h:5103
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:3148
edge gimple_phi_arg_edge(const gphi *phi, size_t i)
Definition gimple.h:4700
void gimple_omp_masked_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5352
bool is_gimple_assign(const gimple *gs)
Definition gimple.h:2592
enum internal_fn gimple_call_internal_fn(const gcall *gs)
Definition gimple.h:3043
tree * gimple_return_retval_ptr(greturn *gs)
Definition gimple.h:6692
bool gimple_could_trap_p_1(const gimple *, bool, bool)
Definition gimple.cc:2288
gimple * gimple_seq_first_nondebug_stmt(gimple_seq s)
Definition gimple.h:4920
tree gimple_asm_label_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4115
void gimple_call_copy_flags(gcall *dest_call, gcall *orig_call)
Definition gimple.h:3593
void gimple_set_vuse(gimple *g, tree vuse)
Definition gimple.h:2223
glabel * gimple_build_label(tree label)
Definition gimple.cc:574
bool gimple_has_location(const gimple *g)
Definition gimple.h:1925
tree gimple_asm_clobber_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4095
tree gimple_signed_type(tree)
Definition gimple.cc:2738
gimple_seq gimple_seq_copy(gimple_seq)
Definition gimple.cc:1504
void gimple_omp_for_set_incr(gimple *gs, size_t i, tree incr)
Definition gimple.h:5651
gimple_seq * gimple_try_eval_ptr(gimple *gs)
Definition gimple.h:4416
gcall * gimple_build_call_valist(tree, unsigned, va_list)
Definition gimple.cc:285
void gimple_transaction_set_subcode(gtransaction *transaction_stmt, unsigned int subcode)
Definition gimple.h:6683
tree * gimple_omp_taskgroup_clauses_ptr(gimple *gs)
Definition gimple.h:5307
tree gimple_omp_return_lhs(const gimple *g)
Definition gimple.h:2356
tree gimple_debug_bind_get_var(const gimple *dbg)
Definition gimple.h:4958
int gimple_omp_for_kind(const gimple *g)
Definition gimple.h:5397
void gimple_call_set_nothrow(gcall *s, bool nothrow_p)
Definition gimple.h:3503
void gimple_call_set_lhs(gcall *gs, tree lhs)
Definition gimple.h:2990
gimple_seq * gimple_eh_else_e_body_ptr(geh_else *eh_else_stmt)
Definition gimple.h:4354
tree * gimple_assign_lhs_ptr(gassign *gs)
Definition gimple.h:2625
bool gimple_wce_cleanup_eh_only(const gimple *gs)
Definition gimple.h:4518
greturn * gimple_build_return(tree)
Definition gimple.cc:196
tree * gimple_omp_continue_control_def_ptr(gomp_continue *cont_stmt)
Definition gimple.h:6501
void gimple_bind_set_vars(gbind *bind_stmt, tree vars)
Definition gimple.h:3937
enum tree_code gimple_cond_code(const gcond *gs)
Definition gimple.h:3651
tree gimple_call_return_type(const gcall *gs)
Definition gimple.h:3236
bool gimple_call_by_descriptor_p(gcall *s)
Definition gimple.h:3585
bool gimple_call_operator_delete_p(const gcall *)
Definition gimple.cc:2862
gtry * gimple_build_try(gimple_seq, gimple_seq, enum gimple_try_flags)
Definition gimple.cc:755
void gimple_call_set_from_thunk(gcall *s, bool from_thunk_p)
Definition gimple.h:3419
int gimple_omp_target_kind(const gimple *g)
Definition gimple.h:6170
tree * gimple_cond_rhs_ptr(gcond *gs)
Definition gimple.h:3726
enum gimple_rhs_class get_gimple_rhs_class(enum tree_code code)
Definition gimple.h:2601
bool gimple_in_transaction(const gimple *stmt)
Definition gimple.h:2286
bool is_gimple_call(const gimple *gs)
Definition gimple.h:2950
void gimple_assign_set_rhs1(gassign *gs, tree rhs)
Definition gimple.h:2692
void gimple_asm_set_inline(gasm *asm_stmt, bool inline_p)
Definition gimple.h:4174
size_t gimple_omp_for_collapse(const gimple *gs)
Definition gimple.h:5497
tree * gimple_omp_task_data_arg_ptr(gimple *gs)
Definition gimple.h:5900
bool gimple_cond_false_p(const gcond *gs)
Definition gimple.h:3832
static bool gimple_call_expected_throw_p(gcall *s)
Definition gimple.h:3536
void gimple_init(gimple *g, enum gimple_code code, unsigned num_ops)
Definition gimple.cc:129
tree gimple_switch_default_label(const gswitch *gs)
Definition gimple.h:4892
void gimple_call_set_fn(gcall *gs, tree fn)
Definition gimple.h:3180
location_t gimple_nonartificial_location(const gimple *g)
Definition gimple.h:1934
bool gimple_assign_ssa_name_copy_p(gimple *)
Definition gimple.cc:1779
void gimple_resx_set_region(gresx *resx_stmt, int region)
Definition gimple.h:4795
void gimple_call_set_arg(gcall *gs, unsigned index, tree arg)
Definition gimple.h:3336
tree gimple_return_retval(const greturn *gs)
Definition gimple.h:6700
void gimple_omp_parallel_set_child_fn(gomp_parallel *omp_parallel_stmt, tree child_fn)
Definition gimple.h:5740
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:4716
void gimple_phi_set_arg(gphi *phi, unsigned index, struct phi_arg_d *phiarg)
Definition gimple.h:4633
gcond * gimple_build_cond_from_tree(tree, tree, tree)
Definition gimple.cc:549
location_t * gimple_phi_arg_location_ptr(gphi *phi, size_t i)
Definition gimple.h:4732
void set_bb_seq(basic_block bb, gimple_seq seq)
Definition gimple.h:1783
bool gimple_call_noreturn_p(const gcall *s)
Definition gimple.h:3486
enum gimple_statement_structure_enum gimple_statement_structure(gimple *gs)
Definition gimple.h:1812
void gimple_omp_section_set_last(gimple *g)
Definition gimple.h:2389
bool gimple_call_from_new_or_delete(const gcall *s)
Definition gimple.h:3454
bool gimple_has_mem_ops(const gimple *g)
Definition gimple.h:2127
gimple_seq gimple_transaction_body(const gtransaction *transaction_stmt)
Definition gimple.h:6599
gimple * gimple_seq_last_nondebug_stmt(gimple_seq s)
Definition gimple.h:4932
bool gimple_omp_section_last_p(const gimple *g)
Definition gimple.h:2379
tree * gimple_transaction_label_uninst_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6625
tree gimple_goto_dest(const gimple *gs)
Definition gimple.h:3908
void gimple_switch_set_default_label(gswitch *gs, tree label)
Definition gimple.h:4902
tree * gimple_vuse_ptr(gimple *g)
Definition gimple.h:2199
tree * gimple_phi_arg_def_ptr(gphi *phi, size_t index)
Definition gimple.h:4692
tree * gimple_eh_filter_types_ptr(gimple *gs)
Definition gimple.h:4274
tree gimple_assign_rhs1(const gassign *gs)
Definition gimple.h:2660
void gimple_call_reset_alias_info(gcall *)
Definition gimple.cc:209
#define GIMPLE_DEBUG_BIND_NOVALUE
Definition gimple.h:5010
bool gimple_modified_p(const gimple *g)
Definition gimple.h:2245
tree gimple_omp_sections_control(const gimple *gs)
Definition gimple.h:6380
tree gimple_omp_task_clauses(const gimple *gs)
Definition gimple.h:5778
void gimple_transaction_set_label_uninst(gtransaction *transaction_stmt, tree label)
Definition gimple.h:6669
bool gimple_omp_ordered_standalone_p(const gimple *g)
Definition gimple.h:2400
tree gimple_eh_must_not_throw_fndecl(const geh_mnt *eh_mnt_stmt)
Definition gimple.h:4325
location_t * gimple_location_ptr(gimple *g)
Definition gimple.h:1916
tree gimple_asm_output_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4075
basic_block gimple_bb(const gimple *g)
Definition gimple.h:1860
bool nonfreeing_call_p(gimple *)
Definition gimple.cc:2980
int gimple_eh_dispatch_region(const geh_dispatch *eh_dispatch_stmt)
Definition gimple.h:4803
bool gimple_debug_bind_has_value_p(gimple *dbg)
Definition gimple.h:5027
bool gimple_assign_single_p(const gimple *gs)
Definition gimple.h:2898
gimple_statement_structure_enum
Definition gimple.h:847
@ LAST_GSS_ENUM
Definition gimple.h:849
tree gimple_get_lhs(const gimple *)
Definition gimple.cc:1938
tree gimple_omp_parallel_child_fn(const gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5722
gimple_seq gimple_wce_cleanup(gimple *gs)
Definition gimple.h:4499
gtransaction * gimple_build_transaction(gimple_seq)
Definition gimple.cc:1318
tree * gimple_assign_rhs2_ptr(gassign *gs)
Definition gimple.h:2729
void gimple_switch_set_num_labels(gswitch *g, unsigned nlabels)
Definition gimple.h:4833
tree gimple_omp_taskreg_clauses(const gimple *gs)
Definition gimple.h:5920
void gimple_omp_task_set_copy_fn(gimple *gs, tree copy_fn)
Definition gimple.h:6041
void gimple_omp_atomic_load_set_lhs(gomp_atomic_load *load_stmt, tree lhs)
Definition gimple.h:6439
tree * gimple_omp_for_incr_ptr(gimple *gs, size_t i)
Definition gimple.h:5640
gdebug * gimple_build_debug_inline_entry(tree, location_t CXX_MEM_STAT_INFO)
void gimple_move_vops(gimple *, gimple *)
Definition gimple.cc:2236
void gimple_seq_set_first(gimple_seq *ps, gimple_seq_node first)
Definition gimple.h:1741
bool gimple_call_builtin_p(const gimple *)
Definition gimple.cc:2874
gimple_seq gimple_omp_for_pre_body(const gimple *gs)
Definition gimple.h:5674
void gimple_call_set_va_arg_pack(gcall *s, bool pass_arg_pack_p)
Definition gimple.h:3464
bool gimple_omp_atomic_weak_p(const gimple *g)
Definition gimple.h:2469
tree * gimple_omp_teams_clauses_ptr(gimple *gs)
Definition gimple.h:6257
bool gimple_asm_clobbers_memory_p(const gasm *)
Definition gimple.cc:2935
gomp_teams * gimple_build_omp_teams(gimple_seq, tree)
Definition gimple.cc:1265
tree gimple_cond_rhs(const gcond *gs)
Definition gimple.h:3710
plf_mask
Definition gimple.h:216
@ GF_PLF_2
Definition gimple.h:218
@ GF_PLF_1
Definition gimple.h:217
enum omp_memory_order gimple_omp_atomic_memory_order(const gimple *g)
Definition gimple.h:2491
tree gimple_omp_task_copy_fn(const gimple *gs)
Definition gimple.h:6021
void gimple_cond_make_true(gcond *gs)
Definition gimple.h:3796
tree gimple_switch_label(const gswitch *gs, unsigned index)
Definition gimple.h:4872
gimple * gimple_build_omp_masked(gimple_seq, tree)
Definition gimple.cc:1079
int gimple_call_flags(const gimple *)
Definition gimple.cc:1541
gimple_seq gimple_try_eval(const gimple *gs)
Definition gimple.h:4426
gomp_ordered * gimple_build_omp_ordered(gimple_seq, tree)
Definition gimple.cc:1129
gimple_seq * bb_seq_addr(basic_block bb)
Definition gimple.h:1775
void gimple_asm_set_label_op(gasm *asm_stmt, unsigned index, tree label_op)
Definition gimple.h:4124
void gimple_seq_add_stmt_without_update(gimple_seq *, gimple *)
Definition gimple.cc:1370
void gimple_set_lhs(gimple *, tree)
Definition gimple.cc:1957
struct pt_solution * gimple_call_clobber_set(gcall *call_stmt)
Definition gimple.h:3620
void gimple_omp_atomic_set_weak(gimple *g)
Definition gimple.h:2480
tree gimple_omp_target_child_fn(const gomp_target *omp_target_stmt)
Definition gimple.h:6190
gomp_sections * gimple_build_omp_sections(gimple_seq, tree)
Definition gimple.cc:1181
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:662
tree gimple_call_arg(const gcall *gs, unsigned index)
Definition gimple.h:3301
tree gimple_transaction_label_over(const gtransaction *transaction_stmt)
Definition gimple.h:6631
tree gimple_assign_lhs(const gassign *gs)
Definition gimple.h:2609
void gimple_try_set_cleanup(gtry *try_stmt, gimple_seq cleanup)
Definition gimple.h:4480
bool gimple_omp_parallel_combined_p(const gimple *g)
Definition gimple.h:2421
void gimple_debug_bind_set_var(gimple *dbg, tree var)
Definition gimple.h:4990
tree gimple_omp_single_clauses(const gimple *gs)
Definition gimple.h:6111
bool gimple_call_tail_p(const gcall *s)
Definition gimple.h:3367
void gimple_omp_single_set_clauses(gomp_single *omp_single_stmt, tree clauses)
Definition gimple.h:6131
bool gimple_nop_p(const gimple *g)
Definition gimple.h:6832
unsigned gimple_phi_capacity(const gimple *gs)
Definition gimple.h:4538
tree * gimple_omp_critical_name_ptr(gomp_critical *crit_stmt)
Definition gimple.h:5189
tree gimple_cond_true_label(const gcond *gs)
Definition gimple.h:3746
tree * gimple_omp_target_data_arg_ptr(gomp_target *omp_target_stmt)
Definition gimple.h:6228
bool gimple_asm_volatile_p(const gasm *asm_stmt)
Definition gimple.h:4144
size_t const gimple_ops_offset_[]
Definition gimple.cc:60
tree * gimple_transaction_label_over_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6637
struct gimple_temp_hash_elt elt_t
tree gimple_call_nonnull_arg(gcall *)
Definition gimple.cc:1744
void gimple_set_location(gimple *, location_t)
Definition gimple.h:1905
gimple * gimple_build_nop(void)
Definition gimple.cc:597
gimple_seq gimple_omp_body(const gimple *gs)
Definition gimple.h:5162
bool gimple_builtin_call_types_compatible_p(const gimple *, tree)
Definition gimple.cc:2819
int gimple_lineno(const gimple *stmt)
Definition gimple.h:1957
void gimple_seq_set_location(gimple_seq, location_t)
Definition gimple.cc:3365
void gimple_call_set_internal_fn(gcall *call_stmt, enum internal_fn fn)
Definition gimple.h:3208
bool gimple_call_nocf_check_p(const gcall *gs)
Definition gimple.h:3024
tree gimple_phi_arg_def(const gphi *gs, size_t index)
Definition gimple.h:4661
void gimple_phi_arg_set_location(gphi *phi, size_t i, location_t loc)
Definition gimple.h:4724
void gimple_omp_teams_set_clauses(gomp_teams *omp_teams_stmt, tree clauses)
Definition gimple.h:6267
void gimple_cond_set_true_label(gcond *gs, tree label)
Definition gimple.h:3756
gcall * gimple_call_copy_skip_args(gcall *, bitmap)
Definition gimple.cc:2461
tree gimple_omp_scan_clauses(const gomp_scan *scan_stmt)
Definition gimple.h:5266
void gimple_try_set_kind(gtry *gs, enum gimple_try_flags kind)
Definition gimple.h:4393
void gimple_cond_set_lhs(gcond *gs, tree lhs)
Definition gimple.h:3701
void gimple_omp_for_set_initial(gimple *gs, size_t i, tree initial)
Definition gimple.h:5585
void gimple_debug_source_bind_set_value(gimple *dbg, tree value)
Definition gimple.h:5093
enum tree_code gimple_expr_code(const gimple *stmt)
Definition gimple.h:3872
bool gimple_call_must_tail_p(const gcall *s)
Definition gimple.h:3387
tree gimple_omp_critical_name(const gomp_critical *crit_stmt)
Definition gimple.h:5179
tree gimple_call_chain(const gcall *gs)
Definition gimple.h:3252
gimple * gimple_build_wce(gimple_seq)
Definition gimple.cc:776
gomp_scan * gimple_build_omp_scan(gimple_seq, tree)
Definition gimple.cc:1162
void gimple_seq_add_seq(gimple_seq *, gimple_seq)
Definition gimple.cc:1385
struct pt_solution * gimple_call_use_set(gcall *call_stmt)
Definition gimple.h:3603
void gimple_call_set_ctrl_altering(gcall *s, bool ctrl_altering_p)
Definition gimple.h:3085
void gimple_omp_for_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5487
void gimple_set_modified(gimple *s, bool modifiedp)
Definition gimple.h:2255
void gimple_label_set_label(glabel *gs, tree label)
Definition gimple.h:3899
tree gimple_omp_taskreg_child_fn(const gimple *gs)
Definition gimple.h:5954
bool is_gimple_omp(const gimple *stmt)
Definition gimple.h:6741
void gimple_cond_set_false_label(gcond *gs, tree label)
Definition gimple.h:3766
bool gimple_has_volatile_ops(const gimple *stmt)
Definition gimple.h:2265
bool gimple_assign_copy_p(gimple *)
Definition gimple.cc:1769
void gimple_set_has_volatile_ops(gimple *stmt, bool volatilep)
Definition gimple.h:2277
void gimple_call_set_nocf_check(gcall *gs, bool nocf_check)
Definition gimple.h:3032
tree gimple_omp_for_clauses(const gimple *gs)
Definition gimple.h:5465
#define gcc_gimple_checking_assert(EXPR)
Definition gimple.h:98
bool gimple_visited_p(gimple *stmt)
Definition gimple.h:2019
tree * gimple_call_arg_ptr(gcall *gs, unsigned index)
Definition gimple.h:3319
void gimple_seq_discard(gimple_seq)
Definition gimple.cc:3374
bool is_gimple_omp_offloaded(const gimple *stmt)
Definition gimple.h:6805
void gimple_omp_parallel_set_clauses(gomp_parallel *omp_parallel_stmt, tree clauses)
Definition gimple.h:5712
void gimple_omp_task_set_arg_size(gimple *gs, tree arg_size)
Definition gimple.h:6071
gimple_try_flags
Definition gimple.h:518
@ GIMPLE_TRY_FINALLY
Definition gimple.h:523
@ GIMPLE_TRY_CATCH_IS_CLEANUP
Definition gimple.h:527
@ GIMPLE_TRY_KIND
Definition gimple.h:524
@ GIMPLE_TRY_CATCH
Definition gimple.h:520
void gimple_set_num_ops(gimple *gs, unsigned num_ops)
Definition gimple.h:2524
void gimple_seq_add_stmt(gimple_seq *, gimple *)
Definition gimple.cc:1353
tree * gimple_omp_parallel_child_fn_ptr(gomp_parallel *omp_parallel_stmt)
Definition gimple.h:5731
void gimple_eh_filter_set_failure(geh_filter *eh_filter_stmt, gimple_seq failure)
Definition gimple.h:4316
const char * gimple_asm_string(const gasm *asm_stmt)
Definition gimple.h:4135
gimple_seq * gimple_eh_filter_failure_ptr(gimple *gs)
Definition gimple.h:4285
uint64_t gimple_alloc_counts[]
Definition gimple.cc:85
void gimple_omp_for_set_final(gimple *gs, size_t i, tree final)
Definition gimple.h:5618
void gimple_bind_set_block(gbind *bind_stmt, tree block)
Definition gimple.h:4010
tree * gimple_phi_result_ptr(gphi *gs)
Definition gimple.h:4575
tree gimple_omp_taskreg_data_arg(const gimple *gs)
Definition gimple.h:5988
gimple * gimple_build_omp_section(gimple_seq)
Definition gimple.cc:1035
void gimple_set_uid(gimple *g, unsigned uid)
Definition gimple.h:2070
unsigned int gimple_transaction_subcode(const gtransaction *transaction_stmt)
Definition gimple.h:6645
tree gimple_omp_for_index(const gimple *gs, size_t i)
Definition gimple.h:5530
geh_dispatch * gimple_build_eh_dispatch(int)
Definition gimple.cc:839
gomp_continue * gimple_build_omp_continue(tree, tree)
Definition gimple.cc:1113
enum gimple_statement_structure_enum const gss_for_code_[]
Definition gimple.cc:78
void gimple_call_set_return_slot_opt(gcall *s, bool return_slot_opt_p)
Definition gimple.h:3397
void gimple_asm_set_input_op(gasm *asm_stmt, unsigned index, tree in_op)
Definition gimple.h:4064
void preprocess_case_label_vec_for_gimple(vec< tree > &, tree, tree *)
Definition gimple.cc:3198
bool is_gimple_omp_oacc(const gimple *stmt)
Definition gimple.h:6756
gimple_seq * gimple_transaction_body_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6591
gimple_seq gimple_bind_body(const gbind *gs)
Definition gimple.h:3962
void gimple_set_plf(gimple *stmt, enum plf_mask plf, bool val_p)
Definition gimple.h:2036
bool gimple_omp_return_nowait_p(const gimple *g)
Definition gimple.h:2335
void gimple_omp_for_set_kind(gomp_for *g, int kind)
Definition gimple.h:5407
void gimple_omp_ordered_standalone(gimple *g)
Definition gimple.h:2410
tree gimple_omp_atomic_load_lhs(const gomp_atomic_load *load_stmt)
Definition gimple.h:6448
enum gimple_try_flags gimple_try_kind(const gimple *gs)
Definition gimple.h:4383
tree * gimple_omp_task_clauses_ptr(gimple *gs)
Definition gimple.h:5788
void gimple_return_set_retval(greturn *gs, tree retval)
Definition gimple.h:6709
unsigned gimple_asm_nclobbers(const gasm *asm_stmt)
Definition gimple.h:4039
void gimple_omp_scan_set_clauses(gomp_scan *scan_stmt, tree clauses)
Definition gimple.h:5286
bool gimple_try_catch_is_cleanup(const gimple *gs)
Definition gimple.h:4405
gomp_parallel * gimple_build_omp_parallel(gimple_seq, tree, tree, tree)
Definition gimple.cc:987
void gimple_omp_taskreg_set_data_arg(gimple *gs, tree data_arg)
Definition gimple.h:6010
void gimple_call_set_fndecl(gcall *gs, tree decl)
Definition gimple.h:3190
tree * gimple_call_fn_ptr(gcall *gs)
Definition gimple.h:3164
bool empty_body_p(gimple_seq)
Definition gimple.cc:1486
tree gimple_call_lhs(const gcall *gs)
Definition gimple.h:2958
unsigned get_gimple_rhs_num_ops(enum tree_code)
Definition gimple.cc:2405
void gimple_eh_filter_set_types(geh_filter *eh_filter_stmt, tree types)
Definition gimple.h:4306
void gimple_set_vdef(gimple *g, tree vdef)
Definition gimple.h:2233
void gimple_omp_atomic_set_memory_order(gimple *g, enum omp_memory_order mo)
Definition gimple.h:2503
void gimple_wce_set_cleanup_eh_only(gimple *gs, bool eh_only_p)
Definition gimple.h:4528
void gimple_asm_set_clobber_op(gasm *asm_stmt, unsigned index, tree clobber_op)
Definition gimple.h:4105
tree gimple_vuse(const gimple *g)
Definition gimple.h:2175
bool gimple_inexpensive_call_p(gcall *)
Definition gimple.cc:3407
tree * gimple_call_lhs_ptr(gcall *gs)
Definition gimple.h:2974
void gimple_omp_return_set_lhs(gimple *g, tree lhs)
Definition gimple.h:2345
tree * gimple_transaction_label_norm_ptr(gtransaction *transaction_stmt)
Definition gimple.h:6613
tree gimple_omp_target_data_arg(const gomp_target *omp_target_stmt)
Definition gimple.h:6219
void gimple_omp_scope_set_clauses(gimple *gs, tree clauses)
Definition gimple.h:5386
const char * gimple_filename(const gimple *stmt)
Definition gimple.h:1948
gomp_atomic_store * gimple_build_omp_atomic_store(tree, enum omp_memory_order)
Definition gimple.cc:1294
uint64_t gimple_alloc_sizes[]
Definition gimple.cc:86
void gimple_call_set_by_descriptor(gcall *s, bool by_descriptor_p)
Definition gimple.h:3574
void gimple_cond_set_condition(gcond *stmt, enum tree_code code, tree lhs, tree rhs)
Definition gimple.h:3856
tree gimple_assign_rhs2(const gassign *gs)
Definition gimple.h:2709
tree gimple_omp_taskgroup_clauses(const gimple *gs)
Definition gimple.h:5295
void gimple_set_op(gimple *gs, unsigned i, tree op)
Definition gimple.h:2578
geh_filter * gimple_build_eh_filter(tree, gimple_seq)
Definition gimple.cc:712
void gimple_omp_set_body(gimple *gs, gimple_seq body)
Definition gimple.h:5170
void gimple_eh_must_not_throw_set_fndecl(geh_mnt *eh_mnt_stmt, tree decl)
Definition gimple.h:4333
void gimple_call_set_must_tail(gcall *s, bool must_tail_p)
Definition gimple.h:3375
gbind * gimple_build_bind(tree, gimple_seq, tree)
Definition gimple.cc:608
void gimple_set_no_warning(gimple *stmt, bool no_warning)
Definition gimple.h:1983
tree * gimple_omp_for_final_ptr(gimple *gs, size_t i)
Definition gimple.h:5607
gimple * gimple_build_assume(tree, gimple_seq)
Definition gimple.cc:1306
void gimple_omp_parallel_set_data_arg(gomp_parallel *omp_parallel_stmt, tree data_arg)
Definition gimple.h:5769
bool gimple_assign_load_p(const gimple *)
Definition gimple.cc:1815
tree gimple_omp_critical_clauses(const gomp_critical *crit_stmt)
Definition gimple.h:5208
gimple_seq * gimple_bind_body_ptr(gbind *bind_stmt)
Definition gimple.h:3954
int gimple_call_return_flags(const gcall *)
Definition gimple.cc:1698
tree * gimple_omp_masked_clauses_ptr(gimple *gs)
Definition gimple.h:5341
bool gimple_phi_arg_has_location(const gphi *phi, size_t i)
Definition gimple.h:4740
gimple_seq_node gimple_seq_first(gimple_seq s)
Definition gimple.h:1684
int gimple_resx_region(const gresx *resx_stmt)
Definition gimple.h:4787
void gimple_omp_critical_set_clauses(gomp_critical *crit_stmt, tree clauses)
Definition gimple.h:5228
void gimple_switch_set_label(gswitch *gs, unsigned index, tree label)
Definition gimple.h:4881
bool gimple_has_side_effects(const gimple *)
Definition gimple.cc:2252
gcall * gimple_build_call_vec(tree, const vec< tree > &)
Definition gimple.cc:245
tree * gimple_omp_continue_control_use_ptr(gomp_continue *cont_stmt)
Definition gimple.h:6527
void gimple_assign_set_nontemporal_move(gimple *gs, bool nontemporal)
Definition gimple.h:2838
bool infer_nonnull_range(gimple *, tree)
Definition gimple.cc:3061
gimple * gimple_build_omp_master(gimple_seq)
Definition gimple.cc:1065
unsigned gimple_num_args(const gimple *gs)
Definition gimple.h:4748
tree * gimple_omp_critical_clauses_ptr(gomp_critical *crit_stmt)
Definition gimple.h:5218
bool gimple_no_warning_p(const gimple *stmt)
Definition gimple.h:1975
unsigned gimple_phi_num_args(const gimple *gs)
Definition gimple.h:4550
void sort_case_labels(vec< tree > &)
Definition gimple.cc:3173
tree gimple_call_fndecl(const gcall *gs)
Definition gimple.h:3220
alias_set_type gimple_get_alias_set(tree)
Definition gimple.cc:2748
bool infer_nonnull_range_by_attribute(gimple *, tree)
Definition gimple.cc:3090
tree gimple_omp_teams_data_arg(const gomp_teams *omp_teams_stmt)
Definition gimple.h:6303
void gimple_omp_taskreg_set_child_fn(gimple *gs, tree child_fn)
Definition gimple.h:5976
void gimple_omp_target_set_data_arg(gomp_target *omp_target_stmt, tree data_arg)
Definition gimple.h:6237
tree gimple_bind_vars(const gbind *bind_stmt)
Definition gimple.h:3927
struct phi_arg_d * gimple_phi_arg(gphi *gs, unsigned index)
Definition gimple.h:4602
bool gimple_debug_source_bind_p(const gimple *s)
Definition gimple.h:5039
tree gimple_asm_input_op(const gasm *asm_stmt, unsigned index)
Definition gimple.h:4055
geh_else * gimple_build_eh_else(gimple_seq, gimple_seq)
Definition gimple.cc:739
gomp_atomic_load * gimple_build_omp_atomic_load(tree, tree, enum omp_memory_order)
Definition gimple.cc:1279
gimple_seq gimple_catch_handler(const gcatch *catch_stmt)
Definition gimple.h:4236
unsigned int gimple_plf(gimple *stmt, enum plf_mask plf)
Definition gimple.h:2056
tree * gimple_omp_atomic_load_lhs_ptr(gomp_atomic_load *load_stmt)
Definition gimple.h:6457
void gimple_asm_set_input(gasm *asm_stmt, bool input_p)
Definition gimple.h:4186
tree * gimple_omp_single_clauses_ptr(gimple *gs)
Definition gimple.h:6121
gimple_seq gimple_seq_alloc_with_stmt(gimple *stmt)
Definition gimple.h:1758
bool gimple_call_internal_p(const gcall *gs)
Definition gimple.h:3009
gimple_seq * gimple_try_cleanup_ptr(gimple *gs)
Definition gimple.h:4436
void gimple_omp_teams_set_child_fn(gomp_teams *omp_teams_stmt, tree child_fn)
Definition gimple.h:6293
gassign * gimple_build_assign(tree, tree CXX_MEM_STAT_INFO)
gimple_seq * phi_nodes_ptr(basic_block bb)
Definition gimple.h:4652
void gimple_assign_set_rhs_code(gimple *s, enum tree_code code)
Definition gimple.h:2874
tree gimple_arg(const gimple *gs, unsigned int i)
Definition gimple.h:4763
void gimple_set_do_not_emit_location(gimple *g)
Definition gimple.h:6891
tree gimple_phi_arg_def_from_edge(const gphi *gs, const_edge e)
Definition gimple.h:4676
#define LOCATION_LOCUS(LOC)
Definition input.h:184
#define LOCATION_BLOCK(LOC)
Definition input.h:187
#define LOCATION_FILE(LOC)
Definition input.h:181
#define LOCATION_LINE(LOC)
Definition input.h:182
#define UNKNOWN_LOCATION
Definition input.h:32
i
Definition poly-int.h:772
static int failure
Definition reload1.cc:665
#define CXX_MEM_STAT_INFO
Definition statistics.h:58
tree variable_size(tree size)
Definition stor-layout.cc:67
Definition basic-block.h:117
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:550
unsigned char nl
Definition gimple.h:562
unsigned char nc
Definition gimple.h:561
unsigned char no
Definition gimple.h:560
unsigned char ni
Definition gimple.h:559
const char * string
Definition gimple.h:555
tree op[1]
Definition gimple.h:568
Definition gimple.h:904
static enum gimple_code code_
Definition gimple.h:905
Definition gimple.h:390
tree block
Definition gimple.h:403
tree vars
Definition gimple.h:395
gimple_seq body
Definition gimple.h:406
Definition gimple.h:353
struct pt_solution call_used
Definition gimple.h:357
tree op[1]
Definition gimple.h:370
struct pt_solution call_clobbered
Definition gimple.h:358
static enum gimple_code code_
Definition gimple.h:372
enum internal_fn internal_fn
Definition gimple.h:363
union gcall::@46 u
tree fntype
Definition gimple.h:362
Definition gimple.h:413
gimple_seq handler
Definition gimple.h:420
tree types
Definition gimple.h:417
Definition gimple.h:858
static enum gimple_code code_
Definition gimple.h:860
Definition gimple.h:868
Definition gimple.h:495
Definition gimple.h:442
gimple_seq e_body
Definition gimple.h:446
gimple_seq n_body
Definition gimple.h:446
Definition gimple.h:427
gimple_seq failure
Definition gimple.h:436
tree types
Definition gimple.h:432
Definition gimple.h:452
tree fndecl
Definition gimple.h:456
Definition gimple.h:877
gimple_seq phi_nodes
Definition basic-block.h:88
gimple_seq seq
Definition basic-block.h:85
Definition gimple.h:586
enum tree_code cond
Definition gimple.h:588
tree index
Definition gimple.h:591
tree initial
Definition gimple.h:594
tree incr
Definition gimple.h:600
Definition gimple.h:795
tree guard
Definition gimple.h:799
gimple_seq body
Definition gimple.h:802
Definition gimple.h:480
int region
Definition gimple.h:485
tree val
Definition gimple.h:775
tree data_arg
Definition gimple.h:641
tree child_fn
Definition gimple.h:637
tree clauses
Definition gimple.h:633
Definition gimple.h:787
Definition gimple.h:723
tree clauses
Definition gimple.h:727
Definition gimple.h:646
Definition gimple.h:379
gimple_seq body
Definition gimple.h:383
Definition gimple.h:533
gimple_seq cleanup
Definition gimple.h:543
tree vdef
Definition gimple.h:330
tree vuse
Definition gimple.h:331
Definition gimple.h:339
tree op[1]
Definition gimple.h:346
Definition gimple.h:295
struct use_optype_d * use_ops
Definition gimple.h:303
Definition gimple.h:310
tree op[1]
Definition gimple.h:317
Definition gimple-iterator.h:26
Definition gimple.h:1655
tree temp
Definition gimple.h:1657
tree val
Definition gimple.h:1656
Definition gimple.h:225
unsigned int visited
Definition gimple.h:235
unsigned pad
Definition gimple.h:256
unsigned int plf
Definition gimple.h:246
unsigned int subcode
Definition gimple.h:262
basic_block bb
Definition gimple.h:278
gimple * next
Definition gimple.h:286
enum gimple_code code
Definition gimple.h:228
unsigned int no_warning
Definition gimple.h:231
unsigned int nontemporal_move
Definition gimple.h:239
unsigned uid
Definition gimple.h:267
unsigned modified
Definition gimple.h:250
gimple * prev
Definition gimple.h:287
location_t location
Definition gimple.h:271
unsigned has_volatile_ops
Definition gimple.h:253
unsigned num_ops
Definition gimple.h:274
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:709
tree control_def
Definition gimple.h:713
tree control_use
Definition gimple.h:716
Definition gimple.h:574
tree name
Definition gimple.h:582
tree clauses
Definition gimple.h:578
Definition gimple.h:606
gimple_seq pre_body
Definition gimple.h:621
size_t collapse
Definition gimple.h:614
struct gimple_omp_for_iter * iter
Definition gimple.h:617
tree clauses
Definition gimple.h:610
Definition gimple.h:743
Definition gimple.h:655
Definition gimple.h:749
Definition gimple.h:691
tree clauses
Definition gimple.h:695
tree control
Definition gimple.h:700
Definition gimple.h:731
Definition gimple.h:662
Definition gimple.h:670
tree copy_fn
Definition gimple.h:675
tree arg_size
Definition gimple.h:679
tree arg_align
Definition gimple.h:680
Definition gimple.h:737
Definition gimple.h:462
unsigned nargs
Definition gimple.h:467
unsigned capacity
Definition gimple.h:466
struct phi_arg_d args[1]
Definition gimple.h:473
tree result
Definition gimple.h:470
Definition gimple.h:489
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:504
gimple_seq cleanup
Definition gimple.h:513
gimple_seq eval
Definition gimple.h:509
static bool test(U *p)
Definition tree-ssa-alias.h:29
bitmap vars
Definition tree-ssa-alias.h:69
T type
Definition gimple.h:42
Definition gimple.h:41
T type
Definition gimple.h:41
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:821
#define CONST_CAST_GIMPLE(X)
Definition system.h:1204
#define gcc_unreachable()
Definition system.h:848
#define false
Definition system.h:895
#define bool
Definition system.h:893
#define gcc_checking_assert(EXPR)
Definition system.h:828
#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:597
clobber_kind
Definition tree-core.h:992
tree copy_fn(tree fn, tree &parms, tree &result)
Definition tree-inline.cc:6659
static bitmap visited
Definition tree-ssa-dce.cc:536
tree chainon(tree op1, tree op2)
Definition tree.cc:3457
tree build_pointer_type(tree to_type)
Definition tree.cc:7023
location_t set_block(location_t loc, tree block)
Definition tree.cc:14586
location_t * block_nonartificial_location(tree block)
Definition tree.cc:11844
#define boolean_false_node
Definition tree.h:4515
#define SSA_NAME_DEF_STMT(NODE)
Definition tree.h:2097
#define boolean_true_node
Definition tree.h:4516
#define TREE_CODE_CLASS(CODE)
Definition tree.h:202
#define CASE_LOW(NODE)
Definition tree.h:1395
constexpr opt_code all_warnings
Definition tree.h:6838
#define TREE_CODE(NODE)
Definition tree.h:324
constexpr opt_code no_warning
Definition tree.h:6836
#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:1269
#define SSA_VAR_P(DECL)
Definition tree.h:2670
#define CLOBBER_KIND(NODE)
Definition tree.h:1273
tree build1_loc(location_t loc, enum tree_code code, tree type, tree arg1 CXX_MEM_STAT_INFO)
Definition tree.h:4749
#define CASE_HIGH(NODE)
Definition tree.h:1396
#define NULL_TREE
Definition tree.h:317
struct gimple_bb_info gimple
Definition basic-block.h:136