LCOV - code coverage report
Current view: top level - gcc - gimple.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 97.5 % 1752 1709
Test Date: 2026-02-28 14:20:25 Functions: 98.3 % 177 174
Legend: Lines:     hit not hit

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

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.