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