Home | History | Annotate | Line # | Download | only in gcc
gimple.h revision 1.3
      1  1.1  mrg /* Gimple IR definitions.
      2  1.1  mrg 
      3  1.3  mrg    Copyright (C) 2007-2013 Free Software Foundation, Inc.
      4  1.1  mrg    Contributed by Aldy Hernandez <aldyh (at) redhat.com>
      5  1.1  mrg 
      6  1.1  mrg This file is part of GCC.
      7  1.1  mrg 
      8  1.1  mrg GCC is free software; you can redistribute it and/or modify it under
      9  1.1  mrg the terms of the GNU General Public License as published by the Free
     10  1.1  mrg Software Foundation; either version 3, or (at your option) any later
     11  1.1  mrg version.
     12  1.1  mrg 
     13  1.1  mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     14  1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     15  1.1  mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     16  1.1  mrg for more details.
     17  1.1  mrg 
     18  1.1  mrg You should have received a copy of the GNU General Public License
     19  1.1  mrg along with GCC; see the file COPYING3.  If not see
     20  1.1  mrg <http://www.gnu.org/licenses/>.  */
     21  1.1  mrg 
     22  1.1  mrg #ifndef GCC_GIMPLE_H
     23  1.1  mrg #define GCC_GIMPLE_H
     24  1.1  mrg 
     25  1.1  mrg #include "pointer-set.h"
     26  1.1  mrg #include "vec.h"
     27  1.1  mrg #include "ggc.h"
     28  1.1  mrg #include "basic-block.h"
     29  1.3  mrg #include "tree.h"
     30  1.1  mrg #include "tree-ssa-operands.h"
     31  1.3  mrg #include "tree-ssa-alias.h"
     32  1.3  mrg #include "internal-fn.h"
     33  1.1  mrg 
     34  1.3  mrg typedef gimple gimple_seq_node;
     35  1.1  mrg 
     36  1.1  mrg /* For each block, the PHI nodes that need to be rewritten are stored into
     37  1.1  mrg    these vectors.  */
     38  1.3  mrg typedef vec<gimple> gimple_vec;
     39  1.1  mrg 
     40  1.1  mrg enum gimple_code {
     41  1.1  mrg #define DEFGSCODE(SYM, STRING, STRUCT)	SYM,
     42  1.1  mrg #include "gimple.def"
     43  1.1  mrg #undef DEFGSCODE
     44  1.1  mrg     LAST_AND_UNUSED_GIMPLE_CODE
     45  1.1  mrg };
     46  1.1  mrg 
     47  1.1  mrg extern const char *const gimple_code_name[];
     48  1.1  mrg extern const unsigned char gimple_rhs_class_table[];
     49  1.1  mrg 
     50  1.1  mrg /* Error out if a gimple tuple is addressed incorrectly.  */
     51  1.1  mrg #if defined ENABLE_GIMPLE_CHECKING
     52  1.3  mrg #define gcc_gimple_checking_assert(EXPR) gcc_assert (EXPR)
     53  1.1  mrg extern void gimple_check_failed (const_gimple, const char *, int,          \
     54  1.1  mrg                                  const char *, enum gimple_code,           \
     55  1.1  mrg 				 enum tree_code) ATTRIBUTE_NORETURN;
     56  1.1  mrg 
     57  1.1  mrg #define GIMPLE_CHECK(GS, CODE)						\
     58  1.1  mrg   do {									\
     59  1.1  mrg     const_gimple __gs = (GS);						\
     60  1.1  mrg     if (gimple_code (__gs) != (CODE))					\
     61  1.1  mrg       gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__,	\
     62  1.1  mrg 	  		   (CODE), ERROR_MARK);				\
     63  1.1  mrg   } while (0)
     64  1.1  mrg #else  /* not ENABLE_GIMPLE_CHECKING  */
     65  1.3  mrg #define gcc_gimple_checking_assert(EXPR) ((void)(0 && (EXPR)))
     66  1.1  mrg #define GIMPLE_CHECK(GS, CODE)			(void)0
     67  1.1  mrg #endif
     68  1.1  mrg 
     69  1.1  mrg /* Class of GIMPLE expressions suitable for the RHS of assignments.  See
     70  1.1  mrg    get_gimple_rhs_class.  */
     71  1.1  mrg enum gimple_rhs_class
     72  1.1  mrg {
     73  1.1  mrg   GIMPLE_INVALID_RHS,	/* The expression cannot be used on the RHS.  */
     74  1.3  mrg   GIMPLE_TERNARY_RHS,	/* The expression is a ternary operation.  */
     75  1.1  mrg   GIMPLE_BINARY_RHS,	/* The expression is a binary operation.  */
     76  1.1  mrg   GIMPLE_UNARY_RHS,	/* The expression is a unary operation.  */
     77  1.1  mrg   GIMPLE_SINGLE_RHS	/* The expression is a single object (an SSA
     78  1.1  mrg 			   name, a _DECL, a _REF, etc.  */
     79  1.1  mrg };
     80  1.1  mrg 
     81  1.1  mrg /* Specific flags for individual GIMPLE statements.  These flags are
     82  1.1  mrg    always stored in gimple_statement_base.subcode and they may only be
     83  1.1  mrg    defined for statement codes that do not use sub-codes.
     84  1.1  mrg 
     85  1.1  mrg    Values for the masks can overlap as long as the overlapping values
     86  1.1  mrg    are never used in the same statement class.
     87  1.1  mrg 
     88  1.1  mrg    The maximum mask value that can be defined is 1 << 15 (i.e., each
     89  1.1  mrg    statement code can hold up to 16 bitflags).
     90  1.1  mrg 
     91  1.1  mrg    Keep this list sorted.  */
     92  1.1  mrg enum gf_mask {
     93  1.1  mrg     GF_ASM_INPUT		= 1 << 0,
     94  1.1  mrg     GF_ASM_VOLATILE		= 1 << 1,
     95  1.3  mrg     GF_CALL_FROM_THUNK		= 1 << 0,
     96  1.3  mrg     GF_CALL_RETURN_SLOT_OPT	= 1 << 1,
     97  1.3  mrg     GF_CALL_TAILCALL		= 1 << 2,
     98  1.3  mrg     GF_CALL_VA_ARG_PACK		= 1 << 3,
     99  1.3  mrg     GF_CALL_NOTHROW		= 1 << 4,
    100  1.3  mrg     GF_CALL_ALLOCA_FOR_VAR	= 1 << 5,
    101  1.3  mrg     GF_CALL_INTERNAL		= 1 << 6,
    102  1.1  mrg     GF_OMP_PARALLEL_COMBINED	= 1 << 0,
    103  1.1  mrg 
    104  1.1  mrg     /* True on an GIMPLE_OMP_RETURN statement if the return does not require
    105  1.1  mrg        a thread synchronization via some sort of barrier.  The exact barrier
    106  1.1  mrg        that would otherwise be emitted is dependent on the OMP statement with
    107  1.1  mrg        which this return is associated.  */
    108  1.1  mrg     GF_OMP_RETURN_NOWAIT	= 1 << 0,
    109  1.1  mrg 
    110  1.1  mrg     GF_OMP_SECTION_LAST		= 1 << 0,
    111  1.3  mrg     GF_OMP_ATOMIC_NEED_VALUE	= 1 << 0,
    112  1.1  mrg     GF_PREDICT_TAKEN		= 1 << 15
    113  1.1  mrg };
    114  1.1  mrg 
    115  1.3  mrg /* Currently, there are only two types of gimple debug stmt.  Others are
    116  1.1  mrg    envisioned, for example, to enable the generation of is_stmt notes
    117  1.1  mrg    in line number information, to mark sequence points, etc.  This
    118  1.1  mrg    subcode is to be used to tell them apart.  */
    119  1.1  mrg enum gimple_debug_subcode {
    120  1.3  mrg   GIMPLE_DEBUG_BIND = 0,
    121  1.3  mrg   GIMPLE_DEBUG_SOURCE_BIND = 1
    122  1.1  mrg };
    123  1.1  mrg 
    124  1.1  mrg /* Masks for selecting a pass local flag (PLF) to work on.  These
    125  1.1  mrg    masks are used by gimple_set_plf and gimple_plf.  */
    126  1.1  mrg enum plf_mask {
    127  1.1  mrg     GF_PLF_1	= 1 << 0,
    128  1.1  mrg     GF_PLF_2	= 1 << 1
    129  1.1  mrg };
    130  1.1  mrg 
    131  1.1  mrg /* Iterator object for GIMPLE statement sequences.  */
    132  1.1  mrg 
    133  1.1  mrg typedef struct
    134  1.1  mrg {
    135  1.1  mrg   /* Sequence node holding the current statement.  */
    136  1.1  mrg   gimple_seq_node ptr;
    137  1.1  mrg 
    138  1.1  mrg   /* Sequence and basic block holding the statement.  These fields
    139  1.1  mrg      are necessary to handle edge cases such as when statement is
    140  1.1  mrg      added to an empty basic block or when the last statement of a
    141  1.1  mrg      block/sequence is removed.  */
    142  1.3  mrg   gimple_seq *seq;
    143  1.1  mrg   basic_block bb;
    144  1.1  mrg } gimple_stmt_iterator;
    145  1.1  mrg 
    146  1.1  mrg 
    147  1.1  mrg /* Data structure definitions for GIMPLE tuples.  NOTE: word markers
    148  1.1  mrg    are for 64 bit hosts.  */
    149  1.1  mrg 
    150  1.3  mrg struct GTY((chain_next ("%h.next"))) gimple_statement_base {
    151  1.1  mrg   /* [ WORD 1 ]
    152  1.1  mrg      Main identifying code for a tuple.  */
    153  1.1  mrg   ENUM_BITFIELD(gimple_code) code : 8;
    154  1.1  mrg 
    155  1.1  mrg   /* Nonzero if a warning should not be emitted on this tuple.  */
    156  1.1  mrg   unsigned int no_warning	: 1;
    157  1.1  mrg 
    158  1.1  mrg   /* Nonzero if this tuple has been visited.  Passes are responsible
    159  1.1  mrg      for clearing this bit before using it.  */
    160  1.1  mrg   unsigned int visited		: 1;
    161  1.1  mrg 
    162  1.1  mrg   /* Nonzero if this tuple represents a non-temporal move.  */
    163  1.1  mrg   unsigned int nontemporal_move	: 1;
    164  1.1  mrg 
    165  1.1  mrg   /* Pass local flags.  These flags are free for any pass to use as
    166  1.1  mrg      they see fit.  Passes should not assume that these flags contain
    167  1.1  mrg      any useful value when the pass starts.  Any initial state that
    168  1.1  mrg      the pass requires should be set on entry to the pass.  See
    169  1.1  mrg      gimple_set_plf and gimple_plf for usage.  */
    170  1.1  mrg   unsigned int plf		: 2;
    171  1.1  mrg 
    172  1.1  mrg   /* Nonzero if this statement has been modified and needs to have its
    173  1.1  mrg      operands rescanned.  */
    174  1.1  mrg   unsigned modified 		: 1;
    175  1.1  mrg 
    176  1.1  mrg   /* Nonzero if this statement contains volatile operands.  */
    177  1.1  mrg   unsigned has_volatile_ops 	: 1;
    178  1.1  mrg 
    179  1.1  mrg   /* Padding to get subcode to 16 bit alignment.  */
    180  1.1  mrg   unsigned pad			: 1;
    181  1.1  mrg 
    182  1.1  mrg   /* The SUBCODE field can be used for tuple-specific flags for tuples
    183  1.1  mrg      that do not require subcodes.  Note that SUBCODE should be at
    184  1.1  mrg      least as wide as tree codes, as several tuples store tree codes
    185  1.1  mrg      in there.  */
    186  1.1  mrg   unsigned int subcode		: 16;
    187  1.1  mrg 
    188  1.1  mrg   /* UID of this statement.  This is used by passes that want to
    189  1.1  mrg      assign IDs to statements.  It must be assigned and used by each
    190  1.1  mrg      pass.  By default it should be assumed to contain garbage.  */
    191  1.1  mrg   unsigned uid;
    192  1.1  mrg 
    193  1.1  mrg   /* [ WORD 2 ]
    194  1.1  mrg      Locus information for debug info.  */
    195  1.1  mrg   location_t location;
    196  1.1  mrg 
    197  1.1  mrg   /* Number of operands in this tuple.  */
    198  1.1  mrg   unsigned num_ops;
    199  1.1  mrg 
    200  1.1  mrg   /* [ WORD 3 ]
    201  1.1  mrg      Basic block holding this statement.  */
    202  1.3  mrg   basic_block bb;
    203  1.1  mrg 
    204  1.3  mrg   /* [ WORD 4-5 ]
    205  1.3  mrg      Linked lists of gimple statements.  The next pointers form
    206  1.3  mrg      a NULL terminated list, the prev pointers are a cyclic list.
    207  1.3  mrg      A gimple statement is hence also a double-ended list of
    208  1.3  mrg      statements, with the pointer itself being the first element,
    209  1.3  mrg      and the prev pointer being the last.  */
    210  1.3  mrg   gimple next;
    211  1.3  mrg   gimple GTY((skip)) prev;
    212  1.1  mrg };
    213  1.1  mrg 
    214  1.1  mrg 
    215  1.1  mrg /* Base structure for tuples with operands.  */
    216  1.1  mrg 
    217  1.1  mrg struct GTY(()) gimple_statement_with_ops_base
    218  1.1  mrg {
    219  1.3  mrg   /* [ WORD 1-6 ]  */
    220  1.1  mrg   struct gimple_statement_base gsbase;
    221  1.1  mrg 
    222  1.3  mrg   /* [ WORD 7 ]
    223  1.1  mrg      SSA operand vectors.  NOTE: It should be possible to
    224  1.1  mrg      amalgamate these vectors with the operand vector OP.  However,
    225  1.1  mrg      the SSA operand vectors are organized differently and contain
    226  1.1  mrg      more information (like immediate use chaining).  */
    227  1.1  mrg   struct use_optype_d GTY((skip (""))) *use_ops;
    228  1.1  mrg };
    229  1.1  mrg 
    230  1.1  mrg 
    231  1.1  mrg /* Statements that take register operands.  */
    232  1.1  mrg 
    233  1.1  mrg struct GTY(()) gimple_statement_with_ops
    234  1.1  mrg {
    235  1.3  mrg   /* [ WORD 1-7 ]  */
    236  1.1  mrg   struct gimple_statement_with_ops_base opbase;
    237  1.1  mrg 
    238  1.3  mrg   /* [ WORD 8 ]
    239  1.1  mrg      Operand vector.  NOTE!  This must always be the last field
    240  1.1  mrg      of this structure.  In particular, this means that this
    241  1.1  mrg      structure cannot be embedded inside another one.  */
    242  1.1  mrg   tree GTY((length ("%h.opbase.gsbase.num_ops"))) op[1];
    243  1.1  mrg };
    244  1.1  mrg 
    245  1.1  mrg 
    246  1.1  mrg /* Base for statements that take both memory and register operands.  */
    247  1.1  mrg 
    248  1.1  mrg struct GTY(()) gimple_statement_with_memory_ops_base
    249  1.1  mrg {
    250  1.3  mrg   /* [ WORD 1-7 ]  */
    251  1.1  mrg   struct gimple_statement_with_ops_base opbase;
    252  1.1  mrg 
    253  1.3  mrg   /* [ WORD 8-9 ]
    254  1.1  mrg      Virtual operands for this statement.  The GC will pick them
    255  1.1  mrg      up via the ssa_names array.  */
    256  1.1  mrg   tree GTY((skip (""))) vdef;
    257  1.1  mrg   tree GTY((skip (""))) vuse;
    258  1.1  mrg };
    259  1.1  mrg 
    260  1.1  mrg 
    261  1.1  mrg /* Statements that take both memory and register operands.  */
    262  1.1  mrg 
    263  1.1  mrg struct GTY(()) gimple_statement_with_memory_ops
    264  1.1  mrg {
    265  1.3  mrg   /* [ WORD 1-9 ]  */
    266  1.3  mrg   struct gimple_statement_with_memory_ops_base membase;
    267  1.3  mrg 
    268  1.3  mrg   /* [ WORD 10 ]
    269  1.3  mrg      Operand vector.  NOTE!  This must always be the last field
    270  1.3  mrg      of this structure.  In particular, this means that this
    271  1.3  mrg      structure cannot be embedded inside another one.  */
    272  1.3  mrg   tree GTY((length ("%h.membase.opbase.gsbase.num_ops"))) op[1];
    273  1.3  mrg };
    274  1.3  mrg 
    275  1.3  mrg 
    276  1.3  mrg /* Call statements that take both memory and register operands.  */
    277  1.3  mrg 
    278  1.3  mrg struct GTY(()) gimple_statement_call
    279  1.3  mrg {
    280  1.3  mrg   /* [ WORD 1-9 ]  */
    281  1.1  mrg   struct gimple_statement_with_memory_ops_base membase;
    282  1.1  mrg 
    283  1.3  mrg   /* [ WORD 10-13 ]  */
    284  1.3  mrg   struct pt_solution call_used;
    285  1.3  mrg   struct pt_solution call_clobbered;
    286  1.3  mrg 
    287  1.3  mrg   /* [ WORD 14 ]  */
    288  1.3  mrg   union GTY ((desc ("%1.membase.opbase.gsbase.subcode & GF_CALL_INTERNAL"))) {
    289  1.3  mrg     tree GTY ((tag ("0"))) fntype;
    290  1.3  mrg     enum internal_fn GTY ((tag ("GF_CALL_INTERNAL"))) internal_fn;
    291  1.3  mrg   } u;
    292  1.3  mrg 
    293  1.3  mrg   /* [ WORD 15 ]
    294  1.1  mrg      Operand vector.  NOTE!  This must always be the last field
    295  1.1  mrg      of this structure.  In particular, this means that this
    296  1.1  mrg      structure cannot be embedded inside another one.  */
    297  1.1  mrg   tree GTY((length ("%h.membase.opbase.gsbase.num_ops"))) op[1];
    298  1.1  mrg };
    299  1.1  mrg 
    300  1.1  mrg 
    301  1.1  mrg /* OpenMP statements (#pragma omp).  */
    302  1.1  mrg 
    303  1.1  mrg struct GTY(()) gimple_statement_omp {
    304  1.3  mrg   /* [ WORD 1-6 ]  */
    305  1.1  mrg   struct gimple_statement_base gsbase;
    306  1.1  mrg 
    307  1.3  mrg   /* [ WORD 7 ]  */
    308  1.1  mrg   gimple_seq body;
    309  1.1  mrg };
    310  1.1  mrg 
    311  1.1  mrg 
    312  1.1  mrg /* GIMPLE_BIND */
    313  1.1  mrg 
    314  1.1  mrg struct GTY(()) gimple_statement_bind {
    315  1.3  mrg   /* [ WORD 1-6 ]  */
    316  1.1  mrg   struct gimple_statement_base gsbase;
    317  1.1  mrg 
    318  1.3  mrg   /* [ WORD 7 ]
    319  1.1  mrg      Variables declared in this scope.  */
    320  1.1  mrg   tree vars;
    321  1.1  mrg 
    322  1.3  mrg   /* [ WORD 8 ]
    323  1.1  mrg      This is different than the BLOCK field in gimple_statement_base,
    324  1.1  mrg      which is analogous to TREE_BLOCK (i.e., the lexical block holding
    325  1.1  mrg      this statement).  This field is the equivalent of BIND_EXPR_BLOCK
    326  1.1  mrg      in tree land (i.e., the lexical scope defined by this bind).  See
    327  1.1  mrg      gimple-low.c.  */
    328  1.1  mrg   tree block;
    329  1.1  mrg 
    330  1.3  mrg   /* [ WORD 9 ]  */
    331  1.1  mrg   gimple_seq body;
    332  1.1  mrg };
    333  1.1  mrg 
    334  1.1  mrg 
    335  1.1  mrg /* GIMPLE_CATCH */
    336  1.1  mrg 
    337  1.1  mrg struct GTY(()) gimple_statement_catch {
    338  1.3  mrg   /* [ WORD 1-6 ]  */
    339  1.1  mrg   struct gimple_statement_base gsbase;
    340  1.1  mrg 
    341  1.3  mrg   /* [ WORD 7 ]  */
    342  1.1  mrg   tree types;
    343  1.1  mrg 
    344  1.3  mrg   /* [ WORD 8 ]  */
    345  1.1  mrg   gimple_seq handler;
    346  1.1  mrg };
    347  1.1  mrg 
    348  1.1  mrg 
    349  1.1  mrg /* GIMPLE_EH_FILTER */
    350  1.1  mrg 
    351  1.1  mrg struct GTY(()) gimple_statement_eh_filter {
    352  1.3  mrg   /* [ WORD 1-6 ]  */
    353  1.1  mrg   struct gimple_statement_base gsbase;
    354  1.1  mrg 
    355  1.3  mrg   /* [ WORD 7 ]
    356  1.1  mrg      Filter types.  */
    357  1.1  mrg   tree types;
    358  1.1  mrg 
    359  1.3  mrg   /* [ WORD 8 ]
    360  1.1  mrg      Failure actions.  */
    361  1.1  mrg   gimple_seq failure;
    362  1.1  mrg };
    363  1.1  mrg 
    364  1.3  mrg /* GIMPLE_EH_ELSE */
    365  1.3  mrg 
    366  1.3  mrg struct GTY(()) gimple_statement_eh_else {
    367  1.3  mrg   /* [ WORD 1-6 ]  */
    368  1.3  mrg   struct gimple_statement_base gsbase;
    369  1.3  mrg 
    370  1.3  mrg   /* [ WORD 7,8 ] */
    371  1.3  mrg   gimple_seq n_body, e_body;
    372  1.3  mrg };
    373  1.1  mrg 
    374  1.1  mrg /* GIMPLE_EH_MUST_NOT_THROW */
    375  1.1  mrg 
    376  1.1  mrg struct GTY(()) gimple_statement_eh_mnt {
    377  1.3  mrg   /* [ WORD 1-6 ]  */
    378  1.1  mrg   struct gimple_statement_base gsbase;
    379  1.1  mrg 
    380  1.3  mrg   /* [ WORD 7 ] Abort function decl.  */
    381  1.1  mrg   tree fndecl;
    382  1.1  mrg };
    383  1.1  mrg 
    384  1.1  mrg /* GIMPLE_PHI */
    385  1.1  mrg 
    386  1.1  mrg struct GTY(()) gimple_statement_phi {
    387  1.3  mrg   /* [ WORD 1-6 ]  */
    388  1.1  mrg   struct gimple_statement_base gsbase;
    389  1.1  mrg 
    390  1.3  mrg   /* [ WORD 7 ]  */
    391  1.1  mrg   unsigned capacity;
    392  1.1  mrg   unsigned nargs;
    393  1.1  mrg 
    394  1.3  mrg   /* [ WORD 8 ]  */
    395  1.1  mrg   tree result;
    396  1.1  mrg 
    397  1.3  mrg   /* [ WORD 9 ]  */
    398  1.1  mrg   struct phi_arg_d GTY ((length ("%h.nargs"))) args[1];
    399  1.1  mrg };
    400  1.1  mrg 
    401  1.1  mrg 
    402  1.1  mrg /* GIMPLE_RESX, GIMPLE_EH_DISPATCH */
    403  1.1  mrg 
    404  1.1  mrg struct GTY(()) gimple_statement_eh_ctrl
    405  1.1  mrg {
    406  1.3  mrg   /* [ WORD 1-6 ]  */
    407  1.1  mrg   struct gimple_statement_base gsbase;
    408  1.1  mrg 
    409  1.3  mrg   /* [ WORD 7 ]
    410  1.1  mrg      Exception region number.  */
    411  1.1  mrg   int region;
    412  1.1  mrg };
    413  1.1  mrg 
    414  1.1  mrg 
    415  1.1  mrg /* GIMPLE_TRY */
    416  1.1  mrg 
    417  1.1  mrg struct GTY(()) gimple_statement_try {
    418  1.3  mrg   /* [ WORD 1-6 ]  */
    419  1.1  mrg   struct gimple_statement_base gsbase;
    420  1.1  mrg 
    421  1.3  mrg   /* [ WORD 7 ]
    422  1.1  mrg      Expression to evaluate.  */
    423  1.1  mrg   gimple_seq eval;
    424  1.1  mrg 
    425  1.3  mrg   /* [ WORD 8 ]
    426  1.1  mrg      Cleanup expression.  */
    427  1.1  mrg   gimple_seq cleanup;
    428  1.1  mrg };
    429  1.1  mrg 
    430  1.1  mrg /* Kind of GIMPLE_TRY statements.  */
    431  1.1  mrg enum gimple_try_flags
    432  1.1  mrg {
    433  1.1  mrg   /* A try/catch.  */
    434  1.1  mrg   GIMPLE_TRY_CATCH = 1 << 0,
    435  1.1  mrg 
    436  1.1  mrg   /* A try/finally.  */
    437  1.1  mrg   GIMPLE_TRY_FINALLY = 1 << 1,
    438  1.1  mrg   GIMPLE_TRY_KIND = GIMPLE_TRY_CATCH | GIMPLE_TRY_FINALLY,
    439  1.1  mrg 
    440  1.1  mrg   /* Analogous to TRY_CATCH_IS_CLEANUP.  */
    441  1.1  mrg   GIMPLE_TRY_CATCH_IS_CLEANUP = 1 << 2
    442  1.1  mrg };
    443  1.1  mrg 
    444  1.1  mrg /* GIMPLE_WITH_CLEANUP_EXPR */
    445  1.1  mrg 
    446  1.1  mrg struct GTY(()) gimple_statement_wce {
    447  1.3  mrg   /* [ WORD 1-6 ]  */
    448  1.1  mrg   struct gimple_statement_base gsbase;
    449  1.1  mrg 
    450  1.1  mrg   /* Subcode: CLEANUP_EH_ONLY.  True if the cleanup should only be
    451  1.1  mrg 	      executed if an exception is thrown, not on normal exit of its
    452  1.1  mrg 	      scope.  This flag is analogous to the CLEANUP_EH_ONLY flag
    453  1.1  mrg 	      in TARGET_EXPRs.  */
    454  1.1  mrg 
    455  1.3  mrg   /* [ WORD 7 ]
    456  1.1  mrg      Cleanup expression.  */
    457  1.1  mrg   gimple_seq cleanup;
    458  1.1  mrg };
    459  1.1  mrg 
    460  1.1  mrg 
    461  1.1  mrg /* GIMPLE_ASM  */
    462  1.1  mrg 
    463  1.1  mrg struct GTY(()) gimple_statement_asm
    464  1.1  mrg {
    465  1.3  mrg   /* [ WORD 1-9 ]  */
    466  1.1  mrg   struct gimple_statement_with_memory_ops_base membase;
    467  1.1  mrg 
    468  1.3  mrg   /* [ WORD 10 ]
    469  1.1  mrg      __asm__ statement.  */
    470  1.1  mrg   const char *string;
    471  1.1  mrg 
    472  1.3  mrg   /* [ WORD 11 ]
    473  1.1  mrg        Number of inputs, outputs, clobbers, labels.  */
    474  1.1  mrg   unsigned char ni;
    475  1.1  mrg   unsigned char no;
    476  1.1  mrg   unsigned char nc;
    477  1.1  mrg   unsigned char nl;
    478  1.1  mrg 
    479  1.3  mrg   /* [ WORD 12 ]
    480  1.1  mrg      Operand vector.  NOTE!  This must always be the last field
    481  1.1  mrg      of this structure.  In particular, this means that this
    482  1.1  mrg      structure cannot be embedded inside another one.  */
    483  1.1  mrg   tree GTY((length ("%h.membase.opbase.gsbase.num_ops"))) op[1];
    484  1.1  mrg };
    485  1.1  mrg 
    486  1.1  mrg /* GIMPLE_OMP_CRITICAL */
    487  1.1  mrg 
    488  1.1  mrg struct GTY(()) gimple_statement_omp_critical {
    489  1.3  mrg   /* [ WORD 1-7 ]  */
    490  1.1  mrg   struct gimple_statement_omp omp;
    491  1.1  mrg 
    492  1.3  mrg   /* [ WORD 8 ]
    493  1.1  mrg      Critical section name.  */
    494  1.1  mrg   tree name;
    495  1.1  mrg };
    496  1.1  mrg 
    497  1.1  mrg 
    498  1.1  mrg struct GTY(()) gimple_omp_for_iter {
    499  1.1  mrg   /* Condition code.  */
    500  1.1  mrg   enum tree_code cond;
    501  1.1  mrg 
    502  1.1  mrg   /* Index variable.  */
    503  1.1  mrg   tree index;
    504  1.1  mrg 
    505  1.1  mrg   /* Initial value.  */
    506  1.1  mrg   tree initial;
    507  1.1  mrg 
    508  1.1  mrg   /* Final value.  */
    509  1.1  mrg   tree final;
    510  1.1  mrg 
    511  1.1  mrg   /* Increment.  */
    512  1.1  mrg   tree incr;
    513  1.1  mrg };
    514  1.1  mrg 
    515  1.1  mrg /* GIMPLE_OMP_FOR */
    516  1.1  mrg 
    517  1.1  mrg struct GTY(()) gimple_statement_omp_for {
    518  1.3  mrg   /* [ WORD 1-7 ]  */
    519  1.1  mrg   struct gimple_statement_omp omp;
    520  1.1  mrg 
    521  1.3  mrg   /* [ WORD 8 ]  */
    522  1.1  mrg   tree clauses;
    523  1.1  mrg 
    524  1.3  mrg   /* [ WORD 9 ]
    525  1.1  mrg      Number of elements in iter array.  */
    526  1.1  mrg   size_t collapse;
    527  1.1  mrg 
    528  1.3  mrg   /* [ WORD 10 ]  */
    529  1.1  mrg   struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
    530  1.1  mrg 
    531  1.3  mrg   /* [ WORD 11 ]
    532  1.1  mrg      Pre-body evaluated before the loop body begins.  */
    533  1.1  mrg   gimple_seq pre_body;
    534  1.1  mrg };
    535  1.1  mrg 
    536  1.1  mrg 
    537  1.1  mrg /* GIMPLE_OMP_PARALLEL */
    538  1.1  mrg 
    539  1.1  mrg struct GTY(()) gimple_statement_omp_parallel {
    540  1.3  mrg   /* [ WORD 1-7 ]  */
    541  1.1  mrg   struct gimple_statement_omp omp;
    542  1.1  mrg 
    543  1.3  mrg   /* [ WORD 8 ]
    544  1.1  mrg      Clauses.  */
    545  1.1  mrg   tree clauses;
    546  1.1  mrg 
    547  1.3  mrg   /* [ WORD 9 ]
    548  1.1  mrg      Child function holding the body of the parallel region.  */
    549  1.1  mrg   tree child_fn;
    550  1.1  mrg 
    551  1.3  mrg   /* [ WORD 10 ]
    552  1.1  mrg      Shared data argument.  */
    553  1.1  mrg   tree data_arg;
    554  1.1  mrg };
    555  1.1  mrg 
    556  1.1  mrg 
    557  1.1  mrg /* GIMPLE_OMP_TASK */
    558  1.1  mrg 
    559  1.1  mrg struct GTY(()) gimple_statement_omp_task {
    560  1.3  mrg   /* [ WORD 1-10 ]  */
    561  1.1  mrg   struct gimple_statement_omp_parallel par;
    562  1.1  mrg 
    563  1.3  mrg   /* [ WORD 11 ]
    564  1.1  mrg      Child function holding firstprivate initialization if needed.  */
    565  1.1  mrg   tree copy_fn;
    566  1.1  mrg 
    567  1.3  mrg   /* [ WORD 12-13 ]
    568  1.1  mrg      Size and alignment in bytes of the argument data block.  */
    569  1.1  mrg   tree arg_size;
    570  1.1  mrg   tree arg_align;
    571  1.1  mrg };
    572  1.1  mrg 
    573  1.1  mrg 
    574  1.1  mrg /* GIMPLE_OMP_SECTION */
    575  1.1  mrg /* Uses struct gimple_statement_omp.  */
    576  1.1  mrg 
    577  1.1  mrg 
    578  1.1  mrg /* GIMPLE_OMP_SECTIONS */
    579  1.1  mrg 
    580  1.1  mrg struct GTY(()) gimple_statement_omp_sections {
    581  1.3  mrg   /* [ WORD 1-7 ]  */
    582  1.1  mrg   struct gimple_statement_omp omp;
    583  1.1  mrg 
    584  1.3  mrg   /* [ WORD 8 ]  */
    585  1.1  mrg   tree clauses;
    586  1.1  mrg 
    587  1.3  mrg   /* [ WORD 9 ]
    588  1.1  mrg      The control variable used for deciding which of the sections to
    589  1.1  mrg      execute.  */
    590  1.1  mrg   tree control;
    591  1.1  mrg };
    592  1.1  mrg 
    593  1.1  mrg /* GIMPLE_OMP_CONTINUE.
    594  1.1  mrg 
    595  1.1  mrg    Note: This does not inherit from gimple_statement_omp, because we
    596  1.1  mrg          do not need the body field.  */
    597  1.1  mrg 
    598  1.1  mrg struct GTY(()) gimple_statement_omp_continue {
    599  1.3  mrg   /* [ WORD 1-6 ]  */
    600  1.1  mrg   struct gimple_statement_base gsbase;
    601  1.1  mrg 
    602  1.3  mrg   /* [ WORD 7 ]  */
    603  1.1  mrg   tree control_def;
    604  1.1  mrg 
    605  1.3  mrg   /* [ WORD 8 ]  */
    606  1.1  mrg   tree control_use;
    607  1.1  mrg };
    608  1.1  mrg 
    609  1.1  mrg /* GIMPLE_OMP_SINGLE */
    610  1.1  mrg 
    611  1.1  mrg struct GTY(()) gimple_statement_omp_single {
    612  1.3  mrg   /* [ WORD 1-7 ]  */
    613  1.1  mrg   struct gimple_statement_omp omp;
    614  1.1  mrg 
    615  1.3  mrg   /* [ WORD 7 ]  */
    616  1.1  mrg   tree clauses;
    617  1.1  mrg };
    618  1.1  mrg 
    619  1.1  mrg 
    620  1.1  mrg /* GIMPLE_OMP_ATOMIC_LOAD.
    621  1.1  mrg    Note: This is based on gimple_statement_base, not g_s_omp, because g_s_omp
    622  1.1  mrg    contains a sequence, which we don't need here.  */
    623  1.1  mrg 
    624  1.1  mrg struct GTY(()) gimple_statement_omp_atomic_load {
    625  1.3  mrg   /* [ WORD 1-6 ]  */
    626  1.1  mrg   struct gimple_statement_base gsbase;
    627  1.1  mrg 
    628  1.3  mrg   /* [ WORD 7-8 ]  */
    629  1.1  mrg   tree rhs, lhs;
    630  1.1  mrg };
    631  1.1  mrg 
    632  1.1  mrg /* GIMPLE_OMP_ATOMIC_STORE.
    633  1.1  mrg    See note on GIMPLE_OMP_ATOMIC_LOAD.  */
    634  1.1  mrg 
    635  1.1  mrg struct GTY(()) gimple_statement_omp_atomic_store {
    636  1.3  mrg   /* [ WORD 1-6 ]  */
    637  1.1  mrg   struct gimple_statement_base gsbase;
    638  1.1  mrg 
    639  1.3  mrg   /* [ WORD 7 ]  */
    640  1.1  mrg   tree val;
    641  1.1  mrg };
    642  1.1  mrg 
    643  1.3  mrg /* GIMPLE_TRANSACTION.  */
    644  1.3  mrg 
    645  1.3  mrg /* Bits to be stored in the GIMPLE_TRANSACTION subcode.  */
    646  1.3  mrg 
    647  1.3  mrg /* The __transaction_atomic was declared [[outer]] or it is
    648  1.3  mrg    __transaction_relaxed.  */
    649  1.3  mrg #define GTMA_IS_OUTER			(1u << 0)
    650  1.3  mrg #define GTMA_IS_RELAXED			(1u << 1)
    651  1.3  mrg #define GTMA_DECLARATION_MASK		(GTMA_IS_OUTER | GTMA_IS_RELAXED)
    652  1.3  mrg 
    653  1.3  mrg /* The transaction is seen to not have an abort.  */
    654  1.3  mrg #define GTMA_HAVE_ABORT			(1u << 2)
    655  1.3  mrg /* The transaction is seen to have loads or stores.  */
    656  1.3  mrg #define GTMA_HAVE_LOAD			(1u << 3)
    657  1.3  mrg #define GTMA_HAVE_STORE			(1u << 4)
    658  1.3  mrg /* The transaction MAY enter serial irrevocable mode in its dynamic scope.  */
    659  1.3  mrg #define GTMA_MAY_ENTER_IRREVOCABLE	(1u << 5)
    660  1.3  mrg /* The transaction WILL enter serial irrevocable mode.
    661  1.3  mrg    An irrevocable block post-dominates the entire transaction, such
    662  1.3  mrg    that all invocations of the transaction will go serial-irrevocable.
    663  1.3  mrg    In such case, we don't bother instrumenting the transaction, and
    664  1.3  mrg    tell the runtime that it should begin the transaction in
    665  1.3  mrg    serial-irrevocable mode.  */
    666  1.3  mrg #define GTMA_DOES_GO_IRREVOCABLE	(1u << 6)
    667  1.3  mrg /* The transaction contains no instrumentation code whatsover, most
    668  1.3  mrg    likely because it is guaranteed to go irrevocable upon entry.  */
    669  1.3  mrg #define GTMA_HAS_NO_INSTRUMENTATION	(1u << 7)
    670  1.3  mrg 
    671  1.3  mrg struct GTY(()) gimple_statement_transaction
    672  1.3  mrg {
    673  1.3  mrg   /* [ WORD 1-9 ]  */
    674  1.3  mrg   struct gimple_statement_with_memory_ops_base gsbase;
    675  1.3  mrg 
    676  1.3  mrg   /* [ WORD 10 ] */
    677  1.3  mrg   gimple_seq body;
    678  1.3  mrg 
    679  1.3  mrg   /* [ WORD 11 ] */
    680  1.3  mrg   tree label;
    681  1.3  mrg };
    682  1.3  mrg 
    683  1.1  mrg #define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP)	SYM,
    684  1.1  mrg enum gimple_statement_structure_enum {
    685  1.1  mrg #include "gsstruct.def"
    686  1.1  mrg     LAST_GSS_ENUM
    687  1.1  mrg };
    688  1.1  mrg #undef DEFGSSTRUCT
    689  1.1  mrg 
    690  1.1  mrg 
    691  1.1  mrg /* Define the overall contents of a gimple tuple.  It may be any of the
    692  1.1  mrg    structures declared above for various types of tuples.  */
    693  1.1  mrg 
    694  1.3  mrg union GTY ((desc ("gimple_statement_structure (&%h)"),
    695  1.3  mrg 	    chain_next ("%h.gsbase.next"), variable_size)) gimple_statement_d {
    696  1.1  mrg   struct gimple_statement_base GTY ((tag ("GSS_BASE"))) gsbase;
    697  1.1  mrg   struct gimple_statement_with_ops GTY ((tag ("GSS_WITH_OPS"))) gsops;
    698  1.1  mrg   struct gimple_statement_with_memory_ops_base GTY ((tag ("GSS_WITH_MEM_OPS_BASE"))) gsmembase;
    699  1.1  mrg   struct gimple_statement_with_memory_ops GTY ((tag ("GSS_WITH_MEM_OPS"))) gsmem;
    700  1.3  mrg   struct gimple_statement_call GTY ((tag ("GSS_CALL"))) gimple_call;
    701  1.1  mrg   struct gimple_statement_omp GTY ((tag ("GSS_OMP"))) omp;
    702  1.1  mrg   struct gimple_statement_bind GTY ((tag ("GSS_BIND"))) gimple_bind;
    703  1.1  mrg   struct gimple_statement_catch GTY ((tag ("GSS_CATCH"))) gimple_catch;
    704  1.1  mrg   struct gimple_statement_eh_filter GTY ((tag ("GSS_EH_FILTER"))) gimple_eh_filter;
    705  1.1  mrg   struct gimple_statement_eh_mnt GTY ((tag ("GSS_EH_MNT"))) gimple_eh_mnt;
    706  1.3  mrg   struct gimple_statement_eh_else GTY ((tag ("GSS_EH_ELSE"))) gimple_eh_else;
    707  1.1  mrg   struct gimple_statement_phi GTY ((tag ("GSS_PHI"))) gimple_phi;
    708  1.1  mrg   struct gimple_statement_eh_ctrl GTY ((tag ("GSS_EH_CTRL"))) gimple_eh_ctrl;
    709  1.1  mrg   struct gimple_statement_try GTY ((tag ("GSS_TRY"))) gimple_try;
    710  1.1  mrg   struct gimple_statement_wce GTY ((tag ("GSS_WCE"))) gimple_wce;
    711  1.1  mrg   struct gimple_statement_asm GTY ((tag ("GSS_ASM"))) gimple_asm;
    712  1.1  mrg   struct gimple_statement_omp_critical GTY ((tag ("GSS_OMP_CRITICAL"))) gimple_omp_critical;
    713  1.1  mrg   struct gimple_statement_omp_for GTY ((tag ("GSS_OMP_FOR"))) gimple_omp_for;
    714  1.1  mrg   struct gimple_statement_omp_parallel GTY ((tag ("GSS_OMP_PARALLEL"))) gimple_omp_parallel;
    715  1.1  mrg   struct gimple_statement_omp_task GTY ((tag ("GSS_OMP_TASK"))) gimple_omp_task;
    716  1.1  mrg   struct gimple_statement_omp_sections GTY ((tag ("GSS_OMP_SECTIONS"))) gimple_omp_sections;
    717  1.1  mrg   struct gimple_statement_omp_single GTY ((tag ("GSS_OMP_SINGLE"))) gimple_omp_single;
    718  1.1  mrg   struct gimple_statement_omp_continue GTY ((tag ("GSS_OMP_CONTINUE"))) gimple_omp_continue;
    719  1.1  mrg   struct gimple_statement_omp_atomic_load GTY ((tag ("GSS_OMP_ATOMIC_LOAD"))) gimple_omp_atomic_load;
    720  1.1  mrg   struct gimple_statement_omp_atomic_store GTY ((tag ("GSS_OMP_ATOMIC_STORE"))) gimple_omp_atomic_store;
    721  1.3  mrg   struct gimple_statement_transaction GTY((tag ("GSS_TRANSACTION"))) gimple_transaction;
    722  1.1  mrg };
    723  1.1  mrg 
    724  1.1  mrg /* In gimple.c.  */
    725  1.1  mrg 
    726  1.1  mrg /* Offset in bytes to the location of the operand vector.
    727  1.1  mrg    Zero if there is no operand vector for this tuple structure.  */
    728  1.1  mrg extern size_t const gimple_ops_offset_[];
    729  1.1  mrg 
    730  1.1  mrg /* Map GIMPLE codes to GSS codes.  */
    731  1.1  mrg extern enum gimple_statement_structure_enum const gss_for_code_[];
    732  1.1  mrg 
    733  1.1  mrg /* This variable holds the currently expanded gimple statement for purposes
    734  1.1  mrg    of comminucating the profile info to the builtin expanders.  */
    735  1.1  mrg extern gimple currently_expanding_gimple_stmt;
    736  1.1  mrg 
    737  1.1  mrg gimple gimple_build_return (tree);
    738  1.1  mrg 
    739  1.1  mrg gimple gimple_build_assign_stat (tree, tree MEM_STAT_DECL);
    740  1.1  mrg #define gimple_build_assign(l,r) gimple_build_assign_stat (l, r MEM_STAT_INFO)
    741  1.1  mrg 
    742  1.3  mrg void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *, tree *);
    743  1.1  mrg 
    744  1.3  mrg gimple
    745  1.3  mrg gimple_build_assign_with_ops (enum tree_code, tree,
    746  1.3  mrg 			      tree, tree CXX_MEM_STAT_INFO);
    747  1.3  mrg gimple
    748  1.3  mrg gimple_build_assign_with_ops (enum tree_code, tree,
    749  1.3  mrg 			      tree, tree, tree CXX_MEM_STAT_INFO);
    750  1.1  mrg 
    751  1.1  mrg gimple gimple_build_debug_bind_stat (tree, tree, gimple MEM_STAT_DECL);
    752  1.1  mrg #define gimple_build_debug_bind(var,val,stmt)			\
    753  1.1  mrg   gimple_build_debug_bind_stat ((var), (val), (stmt) MEM_STAT_INFO)
    754  1.3  mrg gimple gimple_build_debug_source_bind_stat (tree, tree, gimple MEM_STAT_DECL);
    755  1.3  mrg #define gimple_build_debug_source_bind(var,val,stmt)			\
    756  1.3  mrg   gimple_build_debug_source_bind_stat ((var), (val), (stmt) MEM_STAT_INFO)
    757  1.1  mrg 
    758  1.3  mrg gimple gimple_build_call_vec (tree, vec<tree> );
    759  1.1  mrg gimple gimple_build_call (tree, unsigned, ...);
    760  1.3  mrg gimple gimple_build_call_valist (tree, unsigned, va_list);
    761  1.3  mrg gimple gimple_build_call_internal (enum internal_fn, unsigned, ...);
    762  1.3  mrg gimple gimple_build_call_internal_vec (enum internal_fn, vec<tree> );
    763  1.1  mrg gimple gimple_build_call_from_tree (tree);
    764  1.1  mrg gimple gimplify_assign (tree, tree, gimple_seq *);
    765  1.1  mrg gimple gimple_build_cond (enum tree_code, tree, tree, tree, tree);
    766  1.1  mrg gimple gimple_build_label (tree label);
    767  1.1  mrg gimple gimple_build_goto (tree dest);
    768  1.1  mrg gimple gimple_build_nop (void);
    769  1.1  mrg gimple gimple_build_bind (tree, gimple_seq, tree);
    770  1.3  mrg gimple gimple_build_asm_vec (const char *, vec<tree, va_gc> *,
    771  1.3  mrg 			     vec<tree, va_gc> *, vec<tree, va_gc> *,
    772  1.3  mrg 			     vec<tree, va_gc> *);
    773  1.1  mrg gimple gimple_build_catch (tree, gimple_seq);
    774  1.1  mrg gimple gimple_build_eh_filter (tree, gimple_seq);
    775  1.1  mrg gimple gimple_build_eh_must_not_throw (tree);
    776  1.3  mrg gimple gimple_build_eh_else (gimple_seq, gimple_seq);
    777  1.1  mrg gimple gimple_build_try (gimple_seq, gimple_seq, enum gimple_try_flags);
    778  1.1  mrg gimple gimple_build_wce (gimple_seq);
    779  1.1  mrg gimple gimple_build_resx (int);
    780  1.1  mrg gimple gimple_build_eh_dispatch (int);
    781  1.1  mrg gimple gimple_build_switch_nlabels (unsigned, tree, tree);
    782  1.3  mrg gimple gimple_build_switch (tree, tree, vec<tree> );
    783  1.1  mrg gimple gimple_build_omp_parallel (gimple_seq, tree, tree, tree);
    784  1.1  mrg gimple gimple_build_omp_task (gimple_seq, tree, tree, tree, tree, tree, tree);
    785  1.1  mrg gimple gimple_build_omp_for (gimple_seq, tree, size_t, gimple_seq);
    786  1.1  mrg gimple gimple_build_omp_critical (gimple_seq, tree);
    787  1.1  mrg gimple gimple_build_omp_section (gimple_seq);
    788  1.1  mrg gimple gimple_build_omp_continue (tree, tree);
    789  1.1  mrg gimple gimple_build_omp_master (gimple_seq);
    790  1.1  mrg gimple gimple_build_omp_return (bool);
    791  1.1  mrg gimple gimple_build_omp_ordered (gimple_seq);
    792  1.1  mrg gimple gimple_build_omp_sections (gimple_seq, tree);
    793  1.1  mrg gimple gimple_build_omp_sections_switch (void);
    794  1.1  mrg gimple gimple_build_omp_single (gimple_seq, tree);
    795  1.1  mrg gimple gimple_build_cdt (tree, tree);
    796  1.1  mrg gimple gimple_build_omp_atomic_load (tree, tree);
    797  1.1  mrg gimple gimple_build_omp_atomic_store (tree);
    798  1.3  mrg gimple gimple_build_transaction (gimple_seq, tree);
    799  1.1  mrg gimple gimple_build_predict (enum br_predictor, enum prediction);
    800  1.1  mrg enum gimple_statement_structure_enum gss_for_assign (enum tree_code);
    801  1.3  mrg void sort_case_labels (vec<tree> );
    802  1.3  mrg void preprocess_case_label_vec_for_gimple (vec<tree> , tree, tree *);
    803  1.1  mrg void gimple_set_body (tree, gimple_seq);
    804  1.1  mrg gimple_seq gimple_body (tree);
    805  1.1  mrg bool gimple_has_body_p (tree);
    806  1.1  mrg gimple_seq gimple_seq_alloc (void);
    807  1.1  mrg void gimple_seq_free (gimple_seq);
    808  1.1  mrg void gimple_seq_add_seq (gimple_seq *, gimple_seq);
    809  1.1  mrg gimple_seq gimple_seq_copy (gimple_seq);
    810  1.3  mrg bool gimple_call_same_target_p (const_gimple, const_gimple);
    811  1.1  mrg int gimple_call_flags (const_gimple);
    812  1.3  mrg int gimple_call_return_flags (const_gimple);
    813  1.3  mrg int gimple_call_arg_flags (const_gimple, unsigned);
    814  1.3  mrg void gimple_call_reset_alias_info (gimple);
    815  1.1  mrg bool gimple_assign_copy_p (gimple);
    816  1.1  mrg bool gimple_assign_ssa_name_copy_p (gimple);
    817  1.1  mrg bool gimple_assign_unary_nop_p (gimple);
    818  1.3  mrg void gimple_set_bb (gimple, basic_block);
    819  1.1  mrg void gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *, tree);
    820  1.3  mrg void gimple_assign_set_rhs_with_ops_1 (gimple_stmt_iterator *, enum tree_code,
    821  1.3  mrg 				       tree, tree, tree);
    822  1.1  mrg tree gimple_get_lhs (const_gimple);
    823  1.1  mrg void gimple_set_lhs (gimple, tree);
    824  1.1  mrg void gimple_replace_lhs (gimple, tree);
    825  1.1  mrg gimple gimple_copy (gimple);
    826  1.1  mrg void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *, tree *);
    827  1.1  mrg gimple gimple_build_cond_from_tree (tree, tree, tree);
    828  1.1  mrg void gimple_cond_set_condition_from_tree (gimple, tree);
    829  1.1  mrg bool gimple_has_side_effects (const_gimple);
    830  1.1  mrg bool gimple_could_trap_p (gimple);
    831  1.3  mrg bool gimple_could_trap_p_1 (gimple, bool, bool);
    832  1.1  mrg bool gimple_assign_rhs_could_trap_p (gimple);
    833  1.1  mrg void gimple_regimplify_operands (gimple, gimple_stmt_iterator *);
    834  1.1  mrg bool empty_body_p (gimple_seq);
    835  1.1  mrg unsigned get_gimple_rhs_num_ops (enum tree_code);
    836  1.1  mrg #define gimple_alloc(c, n) gimple_alloc_stat (c, n MEM_STAT_INFO)
    837  1.1  mrg gimple gimple_alloc_stat (enum gimple_code, unsigned MEM_STAT_DECL);
    838  1.1  mrg const char *gimple_decl_printable_name (tree, int);
    839  1.3  mrg tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree);
    840  1.3  mrg tree gimple_extract_devirt_binfo_from_cst (tree);
    841  1.1  mrg 
    842  1.1  mrg /* Returns true iff T is a scalar register variable.  */
    843  1.1  mrg extern bool is_gimple_reg (tree);
    844  1.1  mrg /* Returns true iff T is any sort of variable.  */
    845  1.1  mrg extern bool is_gimple_variable (tree);
    846  1.1  mrg /* Returns true iff T is any sort of symbol.  */
    847  1.1  mrg extern bool is_gimple_id (tree);
    848  1.1  mrg /* Returns true iff T is a variable or an INDIRECT_REF (of a variable).  */
    849  1.1  mrg extern bool is_gimple_min_lval (tree);
    850  1.1  mrg /* Returns true iff T is something whose address can be taken.  */
    851  1.1  mrg extern bool is_gimple_addressable (tree);
    852  1.1  mrg /* Returns true iff T is any valid GIMPLE lvalue.  */
    853  1.1  mrg extern bool is_gimple_lvalue (tree);
    854  1.1  mrg 
    855  1.1  mrg /* Returns true iff T is a GIMPLE address.  */
    856  1.1  mrg bool is_gimple_address (const_tree);
    857  1.1  mrg /* Returns true iff T is a GIMPLE invariant address.  */
    858  1.1  mrg bool is_gimple_invariant_address (const_tree);
    859  1.1  mrg /* Returns true iff T is a GIMPLE invariant address at interprocedural
    860  1.1  mrg    level.  */
    861  1.1  mrg bool is_gimple_ip_invariant_address (const_tree);
    862  1.1  mrg /* Returns true iff T is a valid GIMPLE constant.  */
    863  1.1  mrg bool is_gimple_constant (const_tree);
    864  1.1  mrg /* Returns true iff T is a GIMPLE restricted function invariant.  */
    865  1.1  mrg extern bool is_gimple_min_invariant (const_tree);
    866  1.1  mrg /* Returns true iff T is a GIMPLE restricted interprecodural invariant.  */
    867  1.1  mrg extern bool is_gimple_ip_invariant (const_tree);
    868  1.1  mrg /* Returns true iff T is a GIMPLE rvalue.  */
    869  1.1  mrg extern bool is_gimple_val (tree);
    870  1.1  mrg /* Returns true iff T is a GIMPLE asm statement input.  */
    871  1.1  mrg extern bool is_gimple_asm_val (tree);
    872  1.3  mrg /* Returns true iff T is a valid address operand of a MEM_REF.  */
    873  1.3  mrg bool is_gimple_mem_ref_addr (tree);
    874  1.1  mrg 
    875  1.1  mrg /* Returns true iff T is a valid if-statement condition.  */
    876  1.1  mrg extern bool is_gimple_condexpr (tree);
    877  1.1  mrg 
    878  1.1  mrg /* Returns true iff T is a valid call address expression.  */
    879  1.1  mrg extern bool is_gimple_call_addr (tree);
    880  1.3  mrg 
    881  1.3  mrg /* Return TRUE iff stmt is a call to a built-in function.  */
    882  1.3  mrg extern bool is_gimple_builtin_call (gimple stmt);
    883  1.1  mrg 
    884  1.1  mrg extern void recalculate_side_effects (tree);
    885  1.3  mrg extern bool gimple_compare_field_offset (tree, tree);
    886  1.3  mrg extern tree gimple_register_canonical_type (tree);
    887  1.3  mrg extern void print_gimple_types_stats (const char *);
    888  1.1  mrg extern void free_gimple_type_tables (void);
    889  1.1  mrg extern tree gimple_unsigned_type (tree);
    890  1.1  mrg extern tree gimple_signed_type (tree);
    891  1.1  mrg extern alias_set_type gimple_get_alias_set (tree);
    892  1.1  mrg extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
    893  1.1  mrg 				   unsigned *);
    894  1.3  mrg typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
    895  1.1  mrg extern bool walk_stmt_load_store_addr_ops (gimple, void *,
    896  1.3  mrg 					   walk_stmt_load_store_addr_fn,
    897  1.3  mrg 					   walk_stmt_load_store_addr_fn,
    898  1.3  mrg 					   walk_stmt_load_store_addr_fn);
    899  1.1  mrg extern bool walk_stmt_load_store_ops (gimple, void *,
    900  1.3  mrg 				      walk_stmt_load_store_addr_fn,
    901  1.3  mrg 				      walk_stmt_load_store_addr_fn);
    902  1.1  mrg extern bool gimple_ior_addresses_taken (bitmap, gimple);
    903  1.3  mrg extern bool gimple_call_builtin_p (gimple, enum built_in_class);
    904  1.3  mrg extern bool gimple_call_builtin_p (gimple, enum built_in_function);
    905  1.3  mrg extern bool gimple_asm_clobbers_memory_p (const_gimple);
    906  1.1  mrg 
    907  1.1  mrg /* In gimplify.c  */
    908  1.1  mrg extern tree create_tmp_var_raw (tree, const char *);
    909  1.1  mrg extern tree create_tmp_var_name (const char *);
    910  1.1  mrg extern tree create_tmp_var (tree, const char *);
    911  1.3  mrg extern tree create_tmp_reg (tree, const char *);
    912  1.1  mrg extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq *);
    913  1.1  mrg extern tree get_formal_tmp_var (tree, gimple_seq *);
    914  1.1  mrg extern void declare_vars (tree, gimple, bool);
    915  1.1  mrg extern void annotate_all_with_location (gimple_seq, location_t);
    916  1.1  mrg 
    917  1.1  mrg /* Validation of GIMPLE expressions.  Note that these predicates only check
    918  1.1  mrg    the basic form of the expression, they don't recurse to make sure that
    919  1.1  mrg    underlying nodes are also of the right form.  */
    920  1.1  mrg typedef bool (*gimple_predicate)(tree);
    921  1.1  mrg 
    922  1.1  mrg 
    923  1.1  mrg /* FIXME we should deduce this from the predicate.  */
    924  1.1  mrg enum fallback {
    925  1.1  mrg   fb_none = 0,		/* Do not generate a temporary.  */
    926  1.1  mrg 
    927  1.1  mrg   fb_rvalue = 1,	/* Generate an rvalue to hold the result of a
    928  1.1  mrg 			   gimplified expression.  */
    929  1.1  mrg 
    930  1.1  mrg   fb_lvalue = 2,	/* Generate an lvalue to hold the result of a
    931  1.1  mrg 			   gimplified expression.  */
    932  1.1  mrg 
    933  1.1  mrg   fb_mayfail = 4,	/* Gimplification may fail.  Error issued
    934  1.1  mrg 			   afterwards.  */
    935  1.1  mrg   fb_either= fb_rvalue | fb_lvalue
    936  1.1  mrg };
    937  1.1  mrg 
    938  1.1  mrg typedef int fallback_t;
    939  1.1  mrg 
    940  1.1  mrg enum gimplify_status {
    941  1.1  mrg   GS_ERROR	= -2,	/* Something Bad Seen.  */
    942  1.1  mrg   GS_UNHANDLED	= -1,	/* A langhook result for "I dunno".  */
    943  1.1  mrg   GS_OK		= 0,	/* We did something, maybe more to do.  */
    944  1.1  mrg   GS_ALL_DONE	= 1	/* The expression is fully gimplified.  */
    945  1.1  mrg };
    946  1.1  mrg 
    947  1.1  mrg struct gimplify_ctx
    948  1.1  mrg {
    949  1.1  mrg   struct gimplify_ctx *prev_context;
    950  1.1  mrg 
    951  1.3  mrg   vec<gimple> bind_expr_stack;
    952  1.1  mrg   tree temps;
    953  1.1  mrg   gimple_seq conditional_cleanups;
    954  1.1  mrg   tree exit_label;
    955  1.1  mrg   tree return_temp;
    956  1.1  mrg 
    957  1.3  mrg   vec<tree> case_labels;
    958  1.1  mrg   /* The formal temporary table.  Should this be persistent?  */
    959  1.1  mrg   htab_t temp_htab;
    960  1.1  mrg 
    961  1.1  mrg   int conditions;
    962  1.1  mrg   bool save_stack;
    963  1.1  mrg   bool into_ssa;
    964  1.1  mrg   bool allow_rhs_cond_expr;
    965  1.3  mrg   bool in_cleanup_point_expr;
    966  1.1  mrg };
    967  1.1  mrg 
    968  1.3  mrg /* Return true if gimplify_one_sizepos doesn't need to gimplify
    969  1.3  mrg    expr (when in TYPE_SIZE{,_UNIT} and similar type/decl size/bitsize
    970  1.3  mrg    fields).  */
    971  1.3  mrg static inline bool
    972  1.3  mrg is_gimple_sizepos (tree expr)
    973  1.3  mrg {
    974  1.3  mrg   /* gimplify_one_sizepos doesn't need to do anything if the value isn't there,
    975  1.3  mrg      is constant, or contains A PLACEHOLDER_EXPR.  We also don't want to do
    976  1.3  mrg      anything if it's already a VAR_DECL.  If it's a VAR_DECL from another
    977  1.3  mrg      function, the gimplifier will want to replace it with a new variable,
    978  1.3  mrg      but that will cause problems if this type is from outside the function.
    979  1.3  mrg      It's OK to have that here.  */
    980  1.3  mrg   return (expr == NULL_TREE
    981  1.3  mrg 	  || TREE_CONSTANT (expr)
    982  1.3  mrg 	  || TREE_CODE (expr) == VAR_DECL
    983  1.3  mrg 	  || CONTAINS_PLACEHOLDER_P (expr));
    984  1.3  mrg }
    985  1.3  mrg 
    986  1.1  mrg extern enum gimplify_status gimplify_expr (tree *, gimple_seq *, gimple_seq *,
    987  1.1  mrg 					   bool (*) (tree), fallback_t);
    988  1.1  mrg extern void gimplify_type_sizes (tree, gimple_seq *);
    989  1.1  mrg extern void gimplify_one_sizepos (tree *, gimple_seq *);
    990  1.3  mrg enum gimplify_status gimplify_self_mod_expr (tree *, gimple_seq *, gimple_seq *,
    991  1.3  mrg 					     bool, tree);
    992  1.1  mrg extern bool gimplify_stmt (tree *, gimple_seq *);
    993  1.3  mrg extern gimple gimplify_body (tree, bool);
    994  1.1  mrg extern void push_gimplify_context (struct gimplify_ctx *);
    995  1.1  mrg extern void pop_gimplify_context (gimple);
    996  1.1  mrg extern void gimplify_and_add (tree, gimple_seq *);
    997  1.1  mrg 
    998  1.1  mrg /* Miscellaneous helpers.  */
    999  1.1  mrg extern void gimple_add_tmp_var (tree);
   1000  1.1  mrg extern gimple gimple_current_bind_expr (void);
   1001  1.3  mrg extern vec<gimple> gimple_bind_expr_stack (void);
   1002  1.1  mrg extern tree voidify_wrapper_expr (tree, tree);
   1003  1.1  mrg extern tree build_and_jump (tree *);
   1004  1.1  mrg extern tree force_labels_r (tree *, int *, void *);
   1005  1.1  mrg extern enum gimplify_status gimplify_va_arg_expr (tree *, gimple_seq *,
   1006  1.1  mrg 						  gimple_seq *);
   1007  1.1  mrg struct gimplify_omp_ctx;
   1008  1.1  mrg extern void omp_firstprivatize_variable (struct gimplify_omp_ctx *, tree);
   1009  1.1  mrg extern tree gimple_boolify (tree);
   1010  1.1  mrg extern gimple_predicate rhs_predicate_for (tree);
   1011  1.1  mrg extern tree canonicalize_cond_expr_cond (tree);
   1012  1.1  mrg 
   1013  1.1  mrg /* In omp-low.c.  */
   1014  1.1  mrg extern tree omp_reduction_init (tree, tree);
   1015  1.1  mrg 
   1016  1.3  mrg /* In trans-mem.c.  */
   1017  1.3  mrg extern void diagnose_tm_safe_errors (tree);
   1018  1.3  mrg extern void compute_transaction_bits (void);
   1019  1.3  mrg 
   1020  1.1  mrg /* In tree-nested.c.  */
   1021  1.1  mrg extern void lower_nested_functions (tree);
   1022  1.1  mrg extern void insert_field_into_struct (tree, tree);
   1023  1.1  mrg 
   1024  1.1  mrg /* In gimplify.c.  */
   1025  1.1  mrg extern void gimplify_function_tree (tree);
   1026  1.1  mrg 
   1027  1.1  mrg /* In cfgexpand.c.  */
   1028  1.1  mrg extern tree gimple_assign_rhs_to_tree (gimple);
   1029  1.1  mrg 
   1030  1.1  mrg /* In builtins.c  */
   1031  1.1  mrg extern bool validate_gimple_arglist (const_gimple, ...);
   1032  1.1  mrg 
   1033  1.1  mrg /* In tree-ssa.c  */
   1034  1.1  mrg extern bool tree_ssa_useless_type_conversion (tree);
   1035  1.1  mrg extern tree tree_ssa_strip_useless_type_conversions (tree);
   1036  1.1  mrg extern bool useless_type_conversion_p (tree, tree);
   1037  1.1  mrg extern bool types_compatible_p (tree, tree);
   1038  1.1  mrg 
   1039  1.3  mrg /* Return the first node in GIMPLE sequence S.  */
   1040  1.3  mrg 
   1041  1.3  mrg static inline gimple_seq_node
   1042  1.3  mrg gimple_seq_first (gimple_seq s)
   1043  1.3  mrg {
   1044  1.3  mrg   return s;
   1045  1.3  mrg }
   1046  1.3  mrg 
   1047  1.3  mrg 
   1048  1.3  mrg /* Return the first statement in GIMPLE sequence S.  */
   1049  1.3  mrg 
   1050  1.3  mrg static inline gimple
   1051  1.3  mrg gimple_seq_first_stmt (gimple_seq s)
   1052  1.3  mrg {
   1053  1.3  mrg   gimple_seq_node n = gimple_seq_first (s);
   1054  1.3  mrg   return n;
   1055  1.3  mrg }
   1056  1.3  mrg 
   1057  1.3  mrg 
   1058  1.3  mrg /* Return the last node in GIMPLE sequence S.  */
   1059  1.3  mrg 
   1060  1.3  mrg static inline gimple_seq_node
   1061  1.3  mrg gimple_seq_last (gimple_seq s)
   1062  1.3  mrg {
   1063  1.3  mrg   return s ? s->gsbase.prev : NULL;
   1064  1.3  mrg }
   1065  1.3  mrg 
   1066  1.3  mrg 
   1067  1.3  mrg /* Return the last statement in GIMPLE sequence S.  */
   1068  1.3  mrg 
   1069  1.3  mrg static inline gimple
   1070  1.3  mrg gimple_seq_last_stmt (gimple_seq s)
   1071  1.3  mrg {
   1072  1.3  mrg   gimple_seq_node n = gimple_seq_last (s);
   1073  1.3  mrg   return n;
   1074  1.3  mrg }
   1075  1.3  mrg 
   1076  1.3  mrg 
   1077  1.3  mrg /* Set the last node in GIMPLE sequence *PS to LAST.  */
   1078  1.3  mrg 
   1079  1.3  mrg static inline void
   1080  1.3  mrg gimple_seq_set_last (gimple_seq *ps, gimple_seq_node last)
   1081  1.3  mrg {
   1082  1.3  mrg   (*ps)->gsbase.prev = last;
   1083  1.3  mrg }
   1084  1.3  mrg 
   1085  1.3  mrg 
   1086  1.3  mrg /* Set the first node in GIMPLE sequence *PS to FIRST.  */
   1087  1.3  mrg 
   1088  1.3  mrg static inline void
   1089  1.3  mrg gimple_seq_set_first (gimple_seq *ps, gimple_seq_node first)
   1090  1.3  mrg {
   1091  1.3  mrg   *ps = first;
   1092  1.3  mrg }
   1093  1.3  mrg 
   1094  1.3  mrg 
   1095  1.3  mrg /* Return true if GIMPLE sequence S is empty.  */
   1096  1.3  mrg 
   1097  1.3  mrg static inline bool
   1098  1.3  mrg gimple_seq_empty_p (gimple_seq s)
   1099  1.3  mrg {
   1100  1.3  mrg   return s == NULL;
   1101  1.3  mrg }
   1102  1.3  mrg 
   1103  1.3  mrg 
   1104  1.3  mrg void gimple_seq_add_stmt (gimple_seq *, gimple);
   1105  1.3  mrg 
   1106  1.3  mrg /* Link gimple statement GS to the end of the sequence *SEQ_P.  If
   1107  1.3  mrg    *SEQ_P is NULL, a new sequence is allocated.  This function is
   1108  1.3  mrg    similar to gimple_seq_add_stmt, but does not scan the operands.
   1109  1.3  mrg    During gimplification, we need to manipulate statement sequences
   1110  1.3  mrg    before the def/use vectors have been constructed.  */
   1111  1.3  mrg void gimple_seq_add_stmt_without_update (gimple_seq *, gimple);
   1112  1.3  mrg 
   1113  1.3  mrg /* Allocate a new sequence and initialize its first element with STMT.  */
   1114  1.3  mrg 
   1115  1.3  mrg static inline gimple_seq
   1116  1.3  mrg gimple_seq_alloc_with_stmt (gimple stmt)
   1117  1.3  mrg {
   1118  1.3  mrg   gimple_seq seq = NULL;
   1119  1.3  mrg   gimple_seq_add_stmt (&seq, stmt);
   1120  1.3  mrg   return seq;
   1121  1.3  mrg }
   1122  1.3  mrg 
   1123  1.3  mrg 
   1124  1.3  mrg /* Returns the sequence of statements in BB.  */
   1125  1.3  mrg 
   1126  1.3  mrg static inline gimple_seq
   1127  1.3  mrg bb_seq (const_basic_block bb)
   1128  1.3  mrg {
   1129  1.3  mrg   return (!(bb->flags & BB_RTL)) ? bb->il.gimple.seq : NULL;
   1130  1.3  mrg }
   1131  1.3  mrg 
   1132  1.3  mrg static inline gimple_seq *
   1133  1.3  mrg bb_seq_addr (basic_block bb)
   1134  1.3  mrg {
   1135  1.3  mrg   return (!(bb->flags & BB_RTL)) ? &bb->il.gimple.seq : NULL;
   1136  1.3  mrg }
   1137  1.3  mrg 
   1138  1.3  mrg /* Sets the sequence of statements in BB to SEQ.  */
   1139  1.3  mrg 
   1140  1.3  mrg static inline void
   1141  1.3  mrg set_bb_seq (basic_block bb, gimple_seq seq)
   1142  1.3  mrg {
   1143  1.3  mrg   gcc_checking_assert (!(bb->flags & BB_RTL));
   1144  1.3  mrg   bb->il.gimple.seq = seq;
   1145  1.3  mrg }
   1146  1.3  mrg 
   1147  1.3  mrg 
   1148  1.1  mrg /* Return the code for GIMPLE statement G.  */
   1149  1.1  mrg 
   1150  1.1  mrg static inline enum gimple_code
   1151  1.1  mrg gimple_code (const_gimple g)
   1152  1.1  mrg {
   1153  1.1  mrg   return g->gsbase.code;
   1154  1.1  mrg }
   1155  1.1  mrg 
   1156  1.1  mrg 
   1157  1.1  mrg /* Return the GSS code used by a GIMPLE code.  */
   1158  1.1  mrg 
   1159  1.1  mrg static inline enum gimple_statement_structure_enum
   1160  1.1  mrg gss_for_code (enum gimple_code code)
   1161  1.1  mrg {
   1162  1.3  mrg   gcc_gimple_checking_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE);
   1163  1.1  mrg   return gss_for_code_[code];
   1164  1.1  mrg }
   1165  1.1  mrg 
   1166  1.1  mrg 
   1167  1.1  mrg /* Return which GSS code is used by GS.  */
   1168  1.1  mrg 
   1169  1.1  mrg static inline enum gimple_statement_structure_enum
   1170  1.1  mrg gimple_statement_structure (gimple gs)
   1171  1.1  mrg {
   1172  1.1  mrg   return gss_for_code (gimple_code (gs));
   1173  1.1  mrg }
   1174  1.1  mrg 
   1175  1.1  mrg 
   1176  1.1  mrg /* Return true if statement G has sub-statements.  This is only true for
   1177  1.1  mrg    High GIMPLE statements.  */
   1178  1.1  mrg 
   1179  1.1  mrg static inline bool
   1180  1.1  mrg gimple_has_substatements (gimple g)
   1181  1.1  mrg {
   1182  1.1  mrg   switch (gimple_code (g))
   1183  1.1  mrg     {
   1184  1.1  mrg     case GIMPLE_BIND:
   1185  1.1  mrg     case GIMPLE_CATCH:
   1186  1.1  mrg     case GIMPLE_EH_FILTER:
   1187  1.3  mrg     case GIMPLE_EH_ELSE:
   1188  1.1  mrg     case GIMPLE_TRY:
   1189  1.1  mrg     case GIMPLE_OMP_FOR:
   1190  1.1  mrg     case GIMPLE_OMP_MASTER:
   1191  1.1  mrg     case GIMPLE_OMP_ORDERED:
   1192  1.1  mrg     case GIMPLE_OMP_SECTION:
   1193  1.1  mrg     case GIMPLE_OMP_PARALLEL:
   1194  1.1  mrg     case GIMPLE_OMP_TASK:
   1195  1.1  mrg     case GIMPLE_OMP_SECTIONS:
   1196  1.1  mrg     case GIMPLE_OMP_SINGLE:
   1197  1.1  mrg     case GIMPLE_OMP_CRITICAL:
   1198  1.1  mrg     case GIMPLE_WITH_CLEANUP_EXPR:
   1199  1.3  mrg     case GIMPLE_TRANSACTION:
   1200  1.1  mrg       return true;
   1201  1.1  mrg 
   1202  1.1  mrg     default:
   1203  1.1  mrg       return false;
   1204  1.1  mrg     }
   1205  1.1  mrg }
   1206  1.1  mrg 
   1207  1.1  mrg 
   1208  1.1  mrg /* Return the basic block holding statement G.  */
   1209  1.1  mrg 
   1210  1.3  mrg static inline basic_block
   1211  1.1  mrg gimple_bb (const_gimple g)
   1212  1.1  mrg {
   1213  1.1  mrg   return g->gsbase.bb;
   1214  1.1  mrg }
   1215  1.1  mrg 
   1216  1.1  mrg 
   1217  1.1  mrg /* Return the lexical scope block holding statement G.  */
   1218  1.1  mrg 
   1219  1.1  mrg static inline tree
   1220  1.1  mrg gimple_block (const_gimple g)
   1221  1.1  mrg {
   1222  1.3  mrg   return LOCATION_BLOCK (g->gsbase.location);
   1223  1.1  mrg }
   1224  1.1  mrg 
   1225  1.1  mrg 
   1226  1.1  mrg /* Set BLOCK to be the lexical scope block holding statement G.  */
   1227  1.1  mrg 
   1228  1.1  mrg static inline void
   1229  1.1  mrg gimple_set_block (gimple g, tree block)
   1230  1.1  mrg {
   1231  1.3  mrg   if (block)
   1232  1.3  mrg     g->gsbase.location =
   1233  1.3  mrg 	COMBINE_LOCATION_DATA (line_table, g->gsbase.location, block);
   1234  1.3  mrg   else
   1235  1.3  mrg     g->gsbase.location = LOCATION_LOCUS (g->gsbase.location);
   1236  1.1  mrg }
   1237  1.1  mrg 
   1238  1.1  mrg 
   1239  1.1  mrg /* Return location information for statement G.  */
   1240  1.1  mrg 
   1241  1.1  mrg static inline location_t
   1242  1.1  mrg gimple_location (const_gimple g)
   1243  1.1  mrg {
   1244  1.1  mrg   return g->gsbase.location;
   1245  1.1  mrg }
   1246  1.1  mrg 
   1247  1.1  mrg /* Return pointer to location information for statement G.  */
   1248  1.1  mrg 
   1249  1.1  mrg static inline const location_t *
   1250  1.1  mrg gimple_location_ptr (const_gimple g)
   1251  1.1  mrg {
   1252  1.1  mrg   return &g->gsbase.location;
   1253  1.1  mrg }
   1254  1.1  mrg 
   1255  1.1  mrg 
   1256  1.1  mrg /* Set location information for statement G.  */
   1257  1.1  mrg 
   1258  1.1  mrg static inline void
   1259  1.1  mrg gimple_set_location (gimple g, location_t location)
   1260  1.1  mrg {
   1261  1.1  mrg   g->gsbase.location = location;
   1262  1.1  mrg }
   1263  1.1  mrg 
   1264  1.1  mrg 
   1265  1.1  mrg /* Return true if G contains location information.  */
   1266  1.1  mrg 
   1267  1.1  mrg static inline bool
   1268  1.1  mrg gimple_has_location (const_gimple g)
   1269  1.1  mrg {
   1270  1.3  mrg   return LOCATION_LOCUS (gimple_location (g)) != UNKNOWN_LOCATION;
   1271  1.1  mrg }
   1272  1.1  mrg 
   1273  1.1  mrg 
   1274  1.1  mrg /* Return the file name of the location of STMT.  */
   1275  1.1  mrg 
   1276  1.1  mrg static inline const char *
   1277  1.1  mrg gimple_filename (const_gimple stmt)
   1278  1.1  mrg {
   1279  1.1  mrg   return LOCATION_FILE (gimple_location (stmt));
   1280  1.1  mrg }
   1281  1.1  mrg 
   1282  1.1  mrg 
   1283  1.1  mrg /* Return the line number of the location of STMT.  */
   1284  1.1  mrg 
   1285  1.1  mrg static inline int
   1286  1.1  mrg gimple_lineno (const_gimple stmt)
   1287  1.1  mrg {
   1288  1.1  mrg   return LOCATION_LINE (gimple_location (stmt));
   1289  1.1  mrg }
   1290  1.1  mrg 
   1291  1.1  mrg 
   1292  1.1  mrg /* Determine whether SEQ is a singleton. */
   1293  1.1  mrg 
   1294  1.1  mrg static inline bool
   1295  1.1  mrg gimple_seq_singleton_p (gimple_seq seq)
   1296  1.1  mrg {
   1297  1.1  mrg   return ((gimple_seq_first (seq) != NULL)
   1298  1.1  mrg 	  && (gimple_seq_first (seq) == gimple_seq_last (seq)));
   1299  1.1  mrg }
   1300  1.1  mrg 
   1301  1.1  mrg /* Return true if no warnings should be emitted for statement STMT.  */
   1302  1.1  mrg 
   1303  1.1  mrg static inline bool
   1304  1.1  mrg gimple_no_warning_p (const_gimple stmt)
   1305  1.1  mrg {
   1306  1.1  mrg   return stmt->gsbase.no_warning;
   1307  1.1  mrg }
   1308  1.1  mrg 
   1309  1.1  mrg /* Set the no_warning flag of STMT to NO_WARNING.  */
   1310  1.1  mrg 
   1311  1.1  mrg static inline void
   1312  1.1  mrg gimple_set_no_warning (gimple stmt, bool no_warning)
   1313  1.1  mrg {
   1314  1.1  mrg   stmt->gsbase.no_warning = (unsigned) no_warning;
   1315  1.1  mrg }
   1316  1.1  mrg 
   1317  1.1  mrg /* Set the visited status on statement STMT to VISITED_P.  */
   1318  1.1  mrg 
   1319  1.1  mrg static inline void
   1320  1.1  mrg gimple_set_visited (gimple stmt, bool visited_p)
   1321  1.1  mrg {
   1322  1.1  mrg   stmt->gsbase.visited = (unsigned) visited_p;
   1323  1.1  mrg }
   1324  1.1  mrg 
   1325  1.1  mrg 
   1326  1.1  mrg /* Return the visited status for statement STMT.  */
   1327  1.1  mrg 
   1328  1.1  mrg static inline bool
   1329  1.1  mrg gimple_visited_p (gimple stmt)
   1330  1.1  mrg {
   1331  1.1  mrg   return stmt->gsbase.visited;
   1332  1.1  mrg }
   1333  1.1  mrg 
   1334  1.1  mrg 
   1335  1.1  mrg /* Set pass local flag PLF on statement STMT to VAL_P.  */
   1336  1.1  mrg 
   1337  1.1  mrg static inline void
   1338  1.1  mrg gimple_set_plf (gimple stmt, enum plf_mask plf, bool val_p)
   1339  1.1  mrg {
   1340  1.1  mrg   if (val_p)
   1341  1.1  mrg     stmt->gsbase.plf |= (unsigned int) plf;
   1342  1.1  mrg   else
   1343  1.1  mrg     stmt->gsbase.plf &= ~((unsigned int) plf);
   1344  1.1  mrg }
   1345  1.1  mrg 
   1346  1.1  mrg 
   1347  1.1  mrg /* Return the value of pass local flag PLF on statement STMT.  */
   1348  1.1  mrg 
   1349  1.1  mrg static inline unsigned int
   1350  1.1  mrg gimple_plf (gimple stmt, enum plf_mask plf)
   1351  1.1  mrg {
   1352  1.1  mrg   return stmt->gsbase.plf & ((unsigned int) plf);
   1353  1.1  mrg }
   1354  1.1  mrg 
   1355  1.1  mrg 
   1356  1.1  mrg /* Set the UID of statement.  */
   1357  1.1  mrg 
   1358  1.1  mrg static inline void
   1359  1.1  mrg gimple_set_uid (gimple g, unsigned uid)
   1360  1.1  mrg {
   1361  1.1  mrg   g->gsbase.uid = uid;
   1362  1.1  mrg }
   1363  1.1  mrg 
   1364  1.1  mrg 
   1365  1.1  mrg /* Return the UID of statement.  */
   1366  1.1  mrg 
   1367  1.1  mrg static inline unsigned
   1368  1.1  mrg gimple_uid (const_gimple g)
   1369  1.1  mrg {
   1370  1.1  mrg   return g->gsbase.uid;
   1371  1.1  mrg }
   1372  1.1  mrg 
   1373  1.1  mrg 
   1374  1.3  mrg /* Make statement G a singleton sequence.  */
   1375  1.3  mrg 
   1376  1.3  mrg static inline void
   1377  1.3  mrg gimple_init_singleton (gimple g)
   1378  1.3  mrg {
   1379  1.3  mrg   g->gsbase.next = NULL;
   1380  1.3  mrg   g->gsbase.prev = g;
   1381  1.3  mrg }
   1382  1.3  mrg 
   1383  1.3  mrg 
   1384  1.1  mrg /* Return true if GIMPLE statement G has register or memory operands.  */
   1385  1.1  mrg 
   1386  1.1  mrg static inline bool
   1387  1.1  mrg gimple_has_ops (const_gimple g)
   1388  1.1  mrg {
   1389  1.1  mrg   return gimple_code (g) >= GIMPLE_COND && gimple_code (g) <= GIMPLE_RETURN;
   1390  1.1  mrg }
   1391  1.1  mrg 
   1392  1.1  mrg 
   1393  1.1  mrg /* Return true if GIMPLE statement G has memory operands.  */
   1394  1.1  mrg 
   1395  1.1  mrg static inline bool
   1396  1.1  mrg gimple_has_mem_ops (const_gimple g)
   1397  1.1  mrg {
   1398  1.1  mrg   return gimple_code (g) >= GIMPLE_ASSIGN && gimple_code (g) <= GIMPLE_RETURN;
   1399  1.1  mrg }
   1400  1.1  mrg 
   1401  1.1  mrg 
   1402  1.1  mrg /* Return the set of USE operands for statement G.  */
   1403  1.1  mrg 
   1404  1.1  mrg static inline struct use_optype_d *
   1405  1.1  mrg gimple_use_ops (const_gimple g)
   1406  1.1  mrg {
   1407  1.1  mrg   if (!gimple_has_ops (g))
   1408  1.1  mrg     return NULL;
   1409  1.1  mrg   return g->gsops.opbase.use_ops;
   1410  1.1  mrg }
   1411  1.1  mrg 
   1412  1.1  mrg 
   1413  1.1  mrg /* Set USE to be the set of USE operands for statement G.  */
   1414  1.1  mrg 
   1415  1.1  mrg static inline void
   1416  1.1  mrg gimple_set_use_ops (gimple g, struct use_optype_d *use)
   1417  1.1  mrg {
   1418  1.3  mrg   gcc_gimple_checking_assert (gimple_has_ops (g));
   1419  1.1  mrg   g->gsops.opbase.use_ops = use;
   1420  1.1  mrg }
   1421  1.1  mrg 
   1422  1.1  mrg 
   1423  1.1  mrg /* Return the set of VUSE operand for statement G.  */
   1424  1.1  mrg 
   1425  1.1  mrg static inline use_operand_p
   1426  1.1  mrg gimple_vuse_op (const_gimple g)
   1427  1.1  mrg {
   1428  1.1  mrg   struct use_optype_d *ops;
   1429  1.1  mrg   if (!gimple_has_mem_ops (g))
   1430  1.1  mrg     return NULL_USE_OPERAND_P;
   1431  1.1  mrg   ops = g->gsops.opbase.use_ops;
   1432  1.1  mrg   if (ops
   1433  1.1  mrg       && USE_OP_PTR (ops)->use == &g->gsmembase.vuse)
   1434  1.1  mrg     return USE_OP_PTR (ops);
   1435  1.1  mrg   return NULL_USE_OPERAND_P;
   1436  1.1  mrg }
   1437  1.1  mrg 
   1438  1.1  mrg /* Return the set of VDEF operand for statement G.  */
   1439  1.1  mrg 
   1440  1.1  mrg static inline def_operand_p
   1441  1.3  mrg gimple_vdef_op (gimple g)
   1442  1.1  mrg {
   1443  1.1  mrg   if (!gimple_has_mem_ops (g))
   1444  1.1  mrg     return NULL_DEF_OPERAND_P;
   1445  1.3  mrg   if (g->gsmembase.vdef)
   1446  1.3  mrg     return &g->gsmembase.vdef;
   1447  1.1  mrg   return NULL_DEF_OPERAND_P;
   1448  1.1  mrg }
   1449  1.1  mrg 
   1450  1.1  mrg 
   1451  1.1  mrg /* Return the single VUSE operand of the statement G.  */
   1452  1.1  mrg 
   1453  1.1  mrg static inline tree
   1454  1.1  mrg gimple_vuse (const_gimple g)
   1455  1.1  mrg {
   1456  1.1  mrg   if (!gimple_has_mem_ops (g))
   1457  1.1  mrg     return NULL_TREE;
   1458  1.1  mrg   return g->gsmembase.vuse;
   1459  1.1  mrg }
   1460  1.1  mrg 
   1461  1.1  mrg /* Return the single VDEF operand of the statement G.  */
   1462  1.1  mrg 
   1463  1.1  mrg static inline tree
   1464  1.1  mrg gimple_vdef (const_gimple g)
   1465  1.1  mrg {
   1466  1.1  mrg   if (!gimple_has_mem_ops (g))
   1467  1.1  mrg     return NULL_TREE;
   1468  1.1  mrg   return g->gsmembase.vdef;
   1469  1.1  mrg }
   1470  1.1  mrg 
   1471  1.1  mrg /* Return the single VUSE operand of the statement G.  */
   1472  1.1  mrg 
   1473  1.1  mrg static inline tree *
   1474  1.1  mrg gimple_vuse_ptr (gimple g)
   1475  1.1  mrg {
   1476  1.1  mrg   if (!gimple_has_mem_ops (g))
   1477  1.1  mrg     return NULL;
   1478  1.1  mrg   return &g->gsmembase.vuse;
   1479  1.1  mrg }
   1480  1.1  mrg 
   1481  1.1  mrg /* Return the single VDEF operand of the statement G.  */
   1482  1.1  mrg 
   1483  1.1  mrg static inline tree *
   1484  1.1  mrg gimple_vdef_ptr (gimple g)
   1485  1.1  mrg {
   1486  1.1  mrg   if (!gimple_has_mem_ops (g))
   1487  1.1  mrg     return NULL;
   1488  1.1  mrg   return &g->gsmembase.vdef;
   1489  1.1  mrg }
   1490  1.1  mrg 
   1491  1.1  mrg /* Set the single VUSE operand of the statement G.  */
   1492  1.1  mrg 
   1493  1.1  mrg static inline void
   1494  1.1  mrg gimple_set_vuse (gimple g, tree vuse)
   1495  1.1  mrg {
   1496  1.3  mrg   gcc_gimple_checking_assert (gimple_has_mem_ops (g));
   1497  1.1  mrg   g->gsmembase.vuse = vuse;
   1498  1.1  mrg }
   1499  1.1  mrg 
   1500  1.1  mrg /* Set the single VDEF operand of the statement G.  */
   1501  1.1  mrg 
   1502  1.1  mrg static inline void
   1503  1.1  mrg gimple_set_vdef (gimple g, tree vdef)
   1504  1.1  mrg {
   1505  1.3  mrg   gcc_gimple_checking_assert (gimple_has_mem_ops (g));
   1506  1.1  mrg   g->gsmembase.vdef = vdef;
   1507  1.1  mrg }
   1508  1.1  mrg 
   1509  1.1  mrg 
   1510  1.1  mrg /* Return true if statement G has operands and the modified field has
   1511  1.1  mrg    been set.  */
   1512  1.1  mrg 
   1513  1.1  mrg static inline bool
   1514  1.1  mrg gimple_modified_p (const_gimple g)
   1515  1.1  mrg {
   1516  1.1  mrg   return (gimple_has_ops (g)) ? (bool) g->gsbase.modified : false;
   1517  1.1  mrg }
   1518  1.1  mrg 
   1519  1.1  mrg 
   1520  1.3  mrg /* Set the MODIFIED flag to MODIFIEDP, iff the gimple statement G has
   1521  1.3  mrg    a MODIFIED field.  */
   1522  1.3  mrg 
   1523  1.3  mrg static inline void
   1524  1.3  mrg gimple_set_modified (gimple s, bool modifiedp)
   1525  1.3  mrg {
   1526  1.3  mrg   if (gimple_has_ops (s))
   1527  1.3  mrg     s->gsbase.modified = (unsigned) modifiedp;
   1528  1.3  mrg }
   1529  1.3  mrg 
   1530  1.3  mrg 
   1531  1.1  mrg /* Return the tree code for the expression computed by STMT.  This is
   1532  1.1  mrg    only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN.  For
   1533  1.1  mrg    GIMPLE_CALL, return CALL_EXPR as the expression code for
   1534  1.1  mrg    consistency.  This is useful when the caller needs to deal with the
   1535  1.1  mrg    three kinds of computation that GIMPLE supports.  */
   1536  1.1  mrg 
   1537  1.1  mrg static inline enum tree_code
   1538  1.1  mrg gimple_expr_code (const_gimple stmt)
   1539  1.1  mrg {
   1540  1.1  mrg   enum gimple_code code = gimple_code (stmt);
   1541  1.1  mrg   if (code == GIMPLE_ASSIGN || code == GIMPLE_COND)
   1542  1.1  mrg     return (enum tree_code) stmt->gsbase.subcode;
   1543  1.1  mrg   else
   1544  1.3  mrg     {
   1545  1.3  mrg       gcc_gimple_checking_assert (code == GIMPLE_CALL);
   1546  1.3  mrg       return CALL_EXPR;
   1547  1.3  mrg     }
   1548  1.1  mrg }
   1549  1.1  mrg 
   1550  1.1  mrg 
   1551  1.1  mrg /* Mark statement S as modified, and update it.  */
   1552  1.1  mrg 
   1553  1.1  mrg static inline void
   1554  1.1  mrg update_stmt (gimple s)
   1555  1.1  mrg {
   1556  1.1  mrg   if (gimple_has_ops (s))
   1557  1.1  mrg     {
   1558  1.1  mrg       gimple_set_modified (s, true);
   1559  1.1  mrg       update_stmt_operands (s);
   1560  1.1  mrg     }
   1561  1.1  mrg }
   1562  1.1  mrg 
   1563  1.1  mrg /* Update statement S if it has been optimized.  */
   1564  1.1  mrg 
   1565  1.1  mrg static inline void
   1566  1.1  mrg update_stmt_if_modified (gimple s)
   1567  1.1  mrg {
   1568  1.1  mrg   if (gimple_modified_p (s))
   1569  1.1  mrg     update_stmt_operands (s);
   1570  1.1  mrg }
   1571  1.1  mrg 
   1572  1.1  mrg /* Return true if statement STMT contains volatile operands.  */
   1573  1.1  mrg 
   1574  1.1  mrg static inline bool
   1575  1.1  mrg gimple_has_volatile_ops (const_gimple stmt)
   1576  1.1  mrg {
   1577  1.1  mrg   if (gimple_has_mem_ops (stmt))
   1578  1.1  mrg     return stmt->gsbase.has_volatile_ops;
   1579  1.1  mrg   else
   1580  1.1  mrg     return false;
   1581  1.1  mrg }
   1582  1.1  mrg 
   1583  1.1  mrg 
   1584  1.1  mrg /* Set the HAS_VOLATILE_OPS flag to VOLATILEP.  */
   1585  1.1  mrg 
   1586  1.1  mrg static inline void
   1587  1.1  mrg gimple_set_has_volatile_ops (gimple stmt, bool volatilep)
   1588  1.1  mrg {
   1589  1.1  mrg   if (gimple_has_mem_ops (stmt))
   1590  1.1  mrg     stmt->gsbase.has_volatile_ops = (unsigned) volatilep;
   1591  1.1  mrg }
   1592  1.1  mrg 
   1593  1.3  mrg /* Return true if BB is in a transaction.  */
   1594  1.3  mrg 
   1595  1.3  mrg static inline bool
   1596  1.3  mrg block_in_transaction (basic_block bb)
   1597  1.3  mrg {
   1598  1.3  mrg   return flag_tm && bb->flags & BB_IN_TRANSACTION;
   1599  1.3  mrg }
   1600  1.3  mrg 
   1601  1.3  mrg /* Return true if STMT is in a transaction.  */
   1602  1.3  mrg 
   1603  1.3  mrg static inline bool
   1604  1.3  mrg gimple_in_transaction (gimple stmt)
   1605  1.3  mrg {
   1606  1.3  mrg   return block_in_transaction (gimple_bb (stmt));
   1607  1.3  mrg }
   1608  1.1  mrg 
   1609  1.1  mrg /* Return true if statement STMT may access memory.  */
   1610  1.1  mrg 
   1611  1.1  mrg static inline bool
   1612  1.1  mrg gimple_references_memory_p (gimple stmt)
   1613  1.1  mrg {
   1614  1.1  mrg   return gimple_has_mem_ops (stmt) && gimple_vuse (stmt);
   1615  1.1  mrg }
   1616  1.1  mrg 
   1617  1.1  mrg 
   1618  1.1  mrg /* Return the subcode for OMP statement S.  */
   1619  1.1  mrg 
   1620  1.1  mrg static inline unsigned
   1621  1.1  mrg gimple_omp_subcode (const_gimple s)
   1622  1.1  mrg {
   1623  1.3  mrg   gcc_gimple_checking_assert (gimple_code (s) >= GIMPLE_OMP_ATOMIC_LOAD
   1624  1.1  mrg 	      && gimple_code (s) <= GIMPLE_OMP_SINGLE);
   1625  1.1  mrg   return s->gsbase.subcode;
   1626  1.1  mrg }
   1627  1.1  mrg 
   1628  1.1  mrg /* Set the subcode for OMP statement S to SUBCODE.  */
   1629  1.1  mrg 
   1630  1.1  mrg static inline void
   1631  1.1  mrg gimple_omp_set_subcode (gimple s, unsigned int subcode)
   1632  1.1  mrg {
   1633  1.1  mrg   /* We only have 16 bits for the subcode.  Assert that we are not
   1634  1.1  mrg      overflowing it.  */
   1635  1.3  mrg   gcc_gimple_checking_assert (subcode < (1 << 16));
   1636  1.1  mrg   s->gsbase.subcode = subcode;
   1637  1.1  mrg }
   1638  1.1  mrg 
   1639  1.1  mrg /* Set the nowait flag on OMP_RETURN statement S.  */
   1640  1.1  mrg 
   1641  1.1  mrg static inline void
   1642  1.1  mrg gimple_omp_return_set_nowait (gimple s)
   1643  1.1  mrg {
   1644  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_OMP_RETURN);
   1645  1.1  mrg   s->gsbase.subcode |= GF_OMP_RETURN_NOWAIT;
   1646  1.1  mrg }
   1647  1.1  mrg 
   1648  1.1  mrg 
   1649  1.1  mrg /* Return true if OMP return statement G has the GF_OMP_RETURN_NOWAIT
   1650  1.1  mrg    flag set.  */
   1651  1.1  mrg 
   1652  1.1  mrg static inline bool
   1653  1.1  mrg gimple_omp_return_nowait_p (const_gimple g)
   1654  1.1  mrg {
   1655  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_RETURN);
   1656  1.1  mrg   return (gimple_omp_subcode (g) & GF_OMP_RETURN_NOWAIT) != 0;
   1657  1.1  mrg }
   1658  1.1  mrg 
   1659  1.1  mrg 
   1660  1.1  mrg /* Return true if OMP section statement G has the GF_OMP_SECTION_LAST
   1661  1.1  mrg    flag set.  */
   1662  1.1  mrg 
   1663  1.1  mrg static inline bool
   1664  1.1  mrg gimple_omp_section_last_p (const_gimple g)
   1665  1.1  mrg {
   1666  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
   1667  1.1  mrg   return (gimple_omp_subcode (g) & GF_OMP_SECTION_LAST) != 0;
   1668  1.1  mrg }
   1669  1.1  mrg 
   1670  1.1  mrg 
   1671  1.1  mrg /* Set the GF_OMP_SECTION_LAST flag on G.  */
   1672  1.1  mrg 
   1673  1.1  mrg static inline void
   1674  1.1  mrg gimple_omp_section_set_last (gimple g)
   1675  1.1  mrg {
   1676  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
   1677  1.1  mrg   g->gsbase.subcode |= GF_OMP_SECTION_LAST;
   1678  1.1  mrg }
   1679  1.1  mrg 
   1680  1.1  mrg 
   1681  1.1  mrg /* Return true if OMP parallel statement G has the
   1682  1.1  mrg    GF_OMP_PARALLEL_COMBINED flag set.  */
   1683  1.1  mrg 
   1684  1.1  mrg static inline bool
   1685  1.1  mrg gimple_omp_parallel_combined_p (const_gimple g)
   1686  1.1  mrg {
   1687  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
   1688  1.1  mrg   return (gimple_omp_subcode (g) & GF_OMP_PARALLEL_COMBINED) != 0;
   1689  1.1  mrg }
   1690  1.1  mrg 
   1691  1.1  mrg 
   1692  1.1  mrg /* Set the GF_OMP_PARALLEL_COMBINED field in G depending on the boolean
   1693  1.1  mrg    value of COMBINED_P.  */
   1694  1.1  mrg 
   1695  1.1  mrg static inline void
   1696  1.1  mrg gimple_omp_parallel_set_combined_p (gimple g, bool combined_p)
   1697  1.1  mrg {
   1698  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
   1699  1.1  mrg   if (combined_p)
   1700  1.1  mrg     g->gsbase.subcode |= GF_OMP_PARALLEL_COMBINED;
   1701  1.1  mrg   else
   1702  1.1  mrg     g->gsbase.subcode &= ~GF_OMP_PARALLEL_COMBINED;
   1703  1.1  mrg }
   1704  1.1  mrg 
   1705  1.1  mrg 
   1706  1.3  mrg /* Return true if OMP atomic load/store statement G has the
   1707  1.3  mrg    GF_OMP_ATOMIC_NEED_VALUE flag set.  */
   1708  1.3  mrg 
   1709  1.3  mrg static inline bool
   1710  1.3  mrg gimple_omp_atomic_need_value_p (const_gimple g)
   1711  1.3  mrg {
   1712  1.3  mrg   if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
   1713  1.3  mrg     GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
   1714  1.3  mrg   return (gimple_omp_subcode (g) & GF_OMP_ATOMIC_NEED_VALUE) != 0;
   1715  1.3  mrg }
   1716  1.3  mrg 
   1717  1.3  mrg 
   1718  1.3  mrg /* Set the GF_OMP_ATOMIC_NEED_VALUE flag on G.  */
   1719  1.3  mrg 
   1720  1.3  mrg static inline void
   1721  1.3  mrg gimple_omp_atomic_set_need_value (gimple g)
   1722  1.3  mrg {
   1723  1.3  mrg   if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
   1724  1.3  mrg     GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
   1725  1.3  mrg   g->gsbase.subcode |= GF_OMP_ATOMIC_NEED_VALUE;
   1726  1.3  mrg }
   1727  1.3  mrg 
   1728  1.3  mrg 
   1729  1.1  mrg /* Return the number of operands for statement GS.  */
   1730  1.1  mrg 
   1731  1.1  mrg static inline unsigned
   1732  1.1  mrg gimple_num_ops (const_gimple gs)
   1733  1.1  mrg {
   1734  1.1  mrg   return gs->gsbase.num_ops;
   1735  1.1  mrg }
   1736  1.1  mrg 
   1737  1.1  mrg 
   1738  1.1  mrg /* Set the number of operands for statement GS.  */
   1739  1.1  mrg 
   1740  1.1  mrg static inline void
   1741  1.1  mrg gimple_set_num_ops (gimple gs, unsigned num_ops)
   1742  1.1  mrg {
   1743  1.1  mrg   gs->gsbase.num_ops = num_ops;
   1744  1.1  mrg }
   1745  1.1  mrg 
   1746  1.1  mrg 
   1747  1.1  mrg /* Return the array of operands for statement GS.  */
   1748  1.1  mrg 
   1749  1.1  mrg static inline tree *
   1750  1.1  mrg gimple_ops (gimple gs)
   1751  1.1  mrg {
   1752  1.1  mrg   size_t off;
   1753  1.1  mrg 
   1754  1.1  mrg   /* All the tuples have their operand vector at the very bottom
   1755  1.1  mrg      of the structure.  Note that those structures that do not
   1756  1.1  mrg      have an operand vector have a zero offset.  */
   1757  1.1  mrg   off = gimple_ops_offset_[gimple_statement_structure (gs)];
   1758  1.3  mrg   gcc_gimple_checking_assert (off != 0);
   1759  1.1  mrg 
   1760  1.1  mrg   return (tree *) ((char *) gs + off);
   1761  1.1  mrg }
   1762  1.1  mrg 
   1763  1.1  mrg 
   1764  1.1  mrg /* Return operand I for statement GS.  */
   1765  1.1  mrg 
   1766  1.1  mrg static inline tree
   1767  1.1  mrg gimple_op (const_gimple gs, unsigned i)
   1768  1.1  mrg {
   1769  1.1  mrg   if (gimple_has_ops (gs))
   1770  1.1  mrg     {
   1771  1.3  mrg       gcc_gimple_checking_assert (i < gimple_num_ops (gs));
   1772  1.1  mrg       return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
   1773  1.1  mrg     }
   1774  1.1  mrg   else
   1775  1.1  mrg     return NULL_TREE;
   1776  1.1  mrg }
   1777  1.1  mrg 
   1778  1.1  mrg /* Return a pointer to operand I for statement GS.  */
   1779  1.1  mrg 
   1780  1.1  mrg static inline tree *
   1781  1.1  mrg gimple_op_ptr (const_gimple gs, unsigned i)
   1782  1.1  mrg {
   1783  1.1  mrg   if (gimple_has_ops (gs))
   1784  1.1  mrg     {
   1785  1.3  mrg       gcc_gimple_checking_assert (i < gimple_num_ops (gs));
   1786  1.1  mrg       return gimple_ops (CONST_CAST_GIMPLE (gs)) + i;
   1787  1.1  mrg     }
   1788  1.1  mrg   else
   1789  1.1  mrg     return NULL;
   1790  1.1  mrg }
   1791  1.1  mrg 
   1792  1.1  mrg /* Set operand I of statement GS to OP.  */
   1793  1.1  mrg 
   1794  1.1  mrg static inline void
   1795  1.1  mrg gimple_set_op (gimple gs, unsigned i, tree op)
   1796  1.1  mrg {
   1797  1.3  mrg   gcc_gimple_checking_assert (gimple_has_ops (gs) && i < gimple_num_ops (gs));
   1798  1.1  mrg 
   1799  1.1  mrg   /* Note.  It may be tempting to assert that OP matches
   1800  1.1  mrg      is_gimple_operand, but that would be wrong.  Different tuples
   1801  1.1  mrg      accept slightly different sets of tree operands.  Each caller
   1802  1.1  mrg      should perform its own validation.  */
   1803  1.1  mrg   gimple_ops (gs)[i] = op;
   1804  1.1  mrg }
   1805  1.1  mrg 
   1806  1.1  mrg /* Return true if GS is a GIMPLE_ASSIGN.  */
   1807  1.1  mrg 
   1808  1.1  mrg static inline bool
   1809  1.1  mrg is_gimple_assign (const_gimple gs)
   1810  1.1  mrg {
   1811  1.1  mrg   return gimple_code (gs) == GIMPLE_ASSIGN;
   1812  1.1  mrg }
   1813  1.1  mrg 
   1814  1.1  mrg /* Determine if expression CODE is one of the valid expressions that can
   1815  1.1  mrg    be used on the RHS of GIMPLE assignments.  */
   1816  1.1  mrg 
   1817  1.1  mrg static inline enum gimple_rhs_class
   1818  1.1  mrg get_gimple_rhs_class (enum tree_code code)
   1819  1.1  mrg {
   1820  1.1  mrg   return (enum gimple_rhs_class) gimple_rhs_class_table[(int) code];
   1821  1.1  mrg }
   1822  1.1  mrg 
   1823  1.1  mrg /* Return the LHS of assignment statement GS.  */
   1824  1.1  mrg 
   1825  1.1  mrg static inline tree
   1826  1.1  mrg gimple_assign_lhs (const_gimple gs)
   1827  1.1  mrg {
   1828  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1829  1.1  mrg   return gimple_op (gs, 0);
   1830  1.1  mrg }
   1831  1.1  mrg 
   1832  1.1  mrg 
   1833  1.1  mrg /* Return a pointer to the LHS of assignment statement GS.  */
   1834  1.1  mrg 
   1835  1.1  mrg static inline tree *
   1836  1.1  mrg gimple_assign_lhs_ptr (const_gimple gs)
   1837  1.1  mrg {
   1838  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1839  1.1  mrg   return gimple_op_ptr (gs, 0);
   1840  1.1  mrg }
   1841  1.1  mrg 
   1842  1.1  mrg 
   1843  1.1  mrg /* Set LHS to be the LHS operand of assignment statement GS.  */
   1844  1.1  mrg 
   1845  1.1  mrg static inline void
   1846  1.1  mrg gimple_assign_set_lhs (gimple gs, tree lhs)
   1847  1.1  mrg {
   1848  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1849  1.1  mrg   gimple_set_op (gs, 0, lhs);
   1850  1.1  mrg 
   1851  1.1  mrg   if (lhs && TREE_CODE (lhs) == SSA_NAME)
   1852  1.1  mrg     SSA_NAME_DEF_STMT (lhs) = gs;
   1853  1.1  mrg }
   1854  1.1  mrg 
   1855  1.1  mrg 
   1856  1.1  mrg /* Return the first operand on the RHS of assignment statement GS.  */
   1857  1.1  mrg 
   1858  1.1  mrg static inline tree
   1859  1.1  mrg gimple_assign_rhs1 (const_gimple gs)
   1860  1.1  mrg {
   1861  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1862  1.1  mrg   return gimple_op (gs, 1);
   1863  1.1  mrg }
   1864  1.1  mrg 
   1865  1.1  mrg 
   1866  1.1  mrg /* Return a pointer to the first operand on the RHS of assignment
   1867  1.1  mrg    statement GS.  */
   1868  1.1  mrg 
   1869  1.1  mrg static inline tree *
   1870  1.1  mrg gimple_assign_rhs1_ptr (const_gimple gs)
   1871  1.1  mrg {
   1872  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1873  1.1  mrg   return gimple_op_ptr (gs, 1);
   1874  1.1  mrg }
   1875  1.1  mrg 
   1876  1.1  mrg /* Set RHS to be the first operand on the RHS of assignment statement GS.  */
   1877  1.1  mrg 
   1878  1.1  mrg static inline void
   1879  1.1  mrg gimple_assign_set_rhs1 (gimple gs, tree rhs)
   1880  1.1  mrg {
   1881  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1882  1.1  mrg 
   1883  1.1  mrg   gimple_set_op (gs, 1, rhs);
   1884  1.1  mrg }
   1885  1.1  mrg 
   1886  1.1  mrg 
   1887  1.1  mrg /* Return the second operand on the RHS of assignment statement GS.
   1888  1.1  mrg    If GS does not have two operands, NULL is returned instead.  */
   1889  1.1  mrg 
   1890  1.1  mrg static inline tree
   1891  1.1  mrg gimple_assign_rhs2 (const_gimple gs)
   1892  1.1  mrg {
   1893  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1894  1.1  mrg 
   1895  1.1  mrg   if (gimple_num_ops (gs) >= 3)
   1896  1.1  mrg     return gimple_op (gs, 2);
   1897  1.1  mrg   else
   1898  1.1  mrg     return NULL_TREE;
   1899  1.1  mrg }
   1900  1.1  mrg 
   1901  1.1  mrg 
   1902  1.1  mrg /* Return a pointer to the second operand on the RHS of assignment
   1903  1.1  mrg    statement GS.  */
   1904  1.1  mrg 
   1905  1.1  mrg static inline tree *
   1906  1.1  mrg gimple_assign_rhs2_ptr (const_gimple gs)
   1907  1.1  mrg {
   1908  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1909  1.1  mrg   return gimple_op_ptr (gs, 2);
   1910  1.1  mrg }
   1911  1.1  mrg 
   1912  1.1  mrg 
   1913  1.1  mrg /* Set RHS to be the second operand on the RHS of assignment statement GS.  */
   1914  1.1  mrg 
   1915  1.1  mrg static inline void
   1916  1.1  mrg gimple_assign_set_rhs2 (gimple gs, tree rhs)
   1917  1.1  mrg {
   1918  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1919  1.1  mrg 
   1920  1.1  mrg   gimple_set_op (gs, 2, rhs);
   1921  1.1  mrg }
   1922  1.1  mrg 
   1923  1.3  mrg /* Return the third operand on the RHS of assignment statement GS.
   1924  1.3  mrg    If GS does not have two operands, NULL is returned instead.  */
   1925  1.3  mrg 
   1926  1.3  mrg static inline tree
   1927  1.3  mrg gimple_assign_rhs3 (const_gimple gs)
   1928  1.3  mrg {
   1929  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1930  1.3  mrg 
   1931  1.3  mrg   if (gimple_num_ops (gs) >= 4)
   1932  1.3  mrg     return gimple_op (gs, 3);
   1933  1.3  mrg   else
   1934  1.3  mrg     return NULL_TREE;
   1935  1.3  mrg }
   1936  1.3  mrg 
   1937  1.3  mrg /* Return a pointer to the third operand on the RHS of assignment
   1938  1.3  mrg    statement GS.  */
   1939  1.3  mrg 
   1940  1.3  mrg static inline tree *
   1941  1.3  mrg gimple_assign_rhs3_ptr (const_gimple gs)
   1942  1.3  mrg {
   1943  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1944  1.3  mrg   return gimple_op_ptr (gs, 3);
   1945  1.3  mrg }
   1946  1.3  mrg 
   1947  1.3  mrg 
   1948  1.3  mrg /* Set RHS to be the third operand on the RHS of assignment statement GS.  */
   1949  1.3  mrg 
   1950  1.3  mrg static inline void
   1951  1.3  mrg gimple_assign_set_rhs3 (gimple gs, tree rhs)
   1952  1.3  mrg {
   1953  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1954  1.3  mrg 
   1955  1.3  mrg   gimple_set_op (gs, 3, rhs);
   1956  1.3  mrg }
   1957  1.3  mrg 
   1958  1.3  mrg /* A wrapper around gimple_assign_set_rhs_with_ops_1, for callers which expect
   1959  1.3  mrg    to see only a maximum of two operands.  */
   1960  1.3  mrg 
   1961  1.3  mrg static inline void
   1962  1.3  mrg gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
   1963  1.3  mrg 				tree op1, tree op2)
   1964  1.3  mrg {
   1965  1.3  mrg   gimple_assign_set_rhs_with_ops_1 (gsi, code, op1, op2, NULL);
   1966  1.3  mrg }
   1967  1.3  mrg 
   1968  1.3  mrg /* A wrapper around extract_ops_from_tree_1, for callers which expect
   1969  1.3  mrg    to see only a maximum of two operands.  */
   1970  1.3  mrg 
   1971  1.3  mrg static inline void
   1972  1.3  mrg extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0,
   1973  1.3  mrg 		       tree *op1)
   1974  1.3  mrg {
   1975  1.3  mrg   tree op2;
   1976  1.3  mrg   extract_ops_from_tree_1 (expr, code, op0, op1, &op2);
   1977  1.3  mrg   gcc_assert (op2 == NULL_TREE);
   1978  1.3  mrg }
   1979  1.3  mrg 
   1980  1.1  mrg /* Returns true if GS is a nontemporal move.  */
   1981  1.1  mrg 
   1982  1.1  mrg static inline bool
   1983  1.1  mrg gimple_assign_nontemporal_move_p (const_gimple gs)
   1984  1.1  mrg {
   1985  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1986  1.1  mrg   return gs->gsbase.nontemporal_move;
   1987  1.1  mrg }
   1988  1.1  mrg 
   1989  1.1  mrg /* Sets nontemporal move flag of GS to NONTEMPORAL.  */
   1990  1.1  mrg 
   1991  1.1  mrg static inline void
   1992  1.1  mrg gimple_assign_set_nontemporal_move (gimple gs, bool nontemporal)
   1993  1.1  mrg {
   1994  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   1995  1.1  mrg   gs->gsbase.nontemporal_move = nontemporal;
   1996  1.1  mrg }
   1997  1.1  mrg 
   1998  1.1  mrg 
   1999  1.1  mrg /* Return the code of the expression computed on the rhs of assignment
   2000  1.1  mrg    statement GS.  In case that the RHS is a single object, returns the
   2001  1.1  mrg    tree code of the object.  */
   2002  1.1  mrg 
   2003  1.1  mrg static inline enum tree_code
   2004  1.1  mrg gimple_assign_rhs_code (const_gimple gs)
   2005  1.1  mrg {
   2006  1.1  mrg   enum tree_code code;
   2007  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
   2008  1.1  mrg 
   2009  1.3  mrg   code = (enum tree_code) gs->gsbase.subcode;
   2010  1.3  mrg   /* While we initially set subcode to the TREE_CODE of the rhs for
   2011  1.3  mrg      GIMPLE_SINGLE_RHS assigns we do not update that subcode to stay
   2012  1.3  mrg      in sync when we rewrite stmts into SSA form or do SSA propagations.  */
   2013  1.1  mrg   if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
   2014  1.1  mrg     code = TREE_CODE (gimple_assign_rhs1 (gs));
   2015  1.1  mrg 
   2016  1.1  mrg   return code;
   2017  1.1  mrg }
   2018  1.1  mrg 
   2019  1.1  mrg 
   2020  1.1  mrg /* Set CODE to be the code for the expression computed on the RHS of
   2021  1.1  mrg    assignment S.  */
   2022  1.1  mrg 
   2023  1.1  mrg static inline void
   2024  1.1  mrg gimple_assign_set_rhs_code (gimple s, enum tree_code code)
   2025  1.1  mrg {
   2026  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_ASSIGN);
   2027  1.1  mrg   s->gsbase.subcode = code;
   2028  1.1  mrg }
   2029  1.1  mrg 
   2030  1.1  mrg 
   2031  1.1  mrg /* Return the gimple rhs class of the code of the expression computed on
   2032  1.1  mrg    the rhs of assignment statement GS.
   2033  1.1  mrg    This will never return GIMPLE_INVALID_RHS.  */
   2034  1.1  mrg 
   2035  1.1  mrg static inline enum gimple_rhs_class
   2036  1.1  mrg gimple_assign_rhs_class (const_gimple gs)
   2037  1.1  mrg {
   2038  1.1  mrg   return get_gimple_rhs_class (gimple_assign_rhs_code (gs));
   2039  1.1  mrg }
   2040  1.1  mrg 
   2041  1.3  mrg /* Return true if GS is an assignment with a singleton RHS, i.e.,
   2042  1.3  mrg    there is no operator associated with the assignment itself.
   2043  1.3  mrg    Unlike gimple_assign_copy_p, this predicate returns true for
   2044  1.3  mrg    any RHS operand, including those that perform an operation
   2045  1.3  mrg    and do not have the semantics of a copy, such as COND_EXPR.  */
   2046  1.3  mrg 
   2047  1.3  mrg static inline bool
   2048  1.3  mrg gimple_assign_single_p (gimple gs)
   2049  1.3  mrg {
   2050  1.3  mrg   return (is_gimple_assign (gs)
   2051  1.3  mrg           && gimple_assign_rhs_class (gs) == GIMPLE_SINGLE_RHS);
   2052  1.3  mrg }
   2053  1.3  mrg 
   2054  1.3  mrg /* Return true if GS performs a store to its lhs.  */
   2055  1.3  mrg 
   2056  1.3  mrg static inline bool
   2057  1.3  mrg gimple_store_p (gimple gs)
   2058  1.3  mrg {
   2059  1.3  mrg   tree lhs = gimple_get_lhs (gs);
   2060  1.3  mrg   return lhs && !is_gimple_reg (lhs);
   2061  1.3  mrg }
   2062  1.3  mrg 
   2063  1.3  mrg /* Return true if GS is an assignment that loads from its rhs1.  */
   2064  1.3  mrg 
   2065  1.3  mrg static inline bool
   2066  1.3  mrg gimple_assign_load_p (gimple gs)
   2067  1.3  mrg {
   2068  1.3  mrg   tree rhs;
   2069  1.3  mrg   if (!gimple_assign_single_p (gs))
   2070  1.3  mrg     return false;
   2071  1.3  mrg   rhs = gimple_assign_rhs1 (gs);
   2072  1.3  mrg   if (TREE_CODE (rhs) == WITH_SIZE_EXPR)
   2073  1.3  mrg     return true;
   2074  1.3  mrg   rhs = get_base_address (rhs);
   2075  1.3  mrg   return (DECL_P (rhs)
   2076  1.3  mrg 	  || TREE_CODE (rhs) == MEM_REF || TREE_CODE (rhs) == TARGET_MEM_REF);
   2077  1.3  mrg }
   2078  1.3  mrg 
   2079  1.1  mrg 
   2080  1.1  mrg /* Return true if S is a type-cast assignment.  */
   2081  1.1  mrg 
   2082  1.1  mrg static inline bool
   2083  1.1  mrg gimple_assign_cast_p (gimple s)
   2084  1.1  mrg {
   2085  1.1  mrg   if (is_gimple_assign (s))
   2086  1.1  mrg     {
   2087  1.1  mrg       enum tree_code sc = gimple_assign_rhs_code (s);
   2088  1.1  mrg       return CONVERT_EXPR_CODE_P (sc)
   2089  1.1  mrg 	     || sc == VIEW_CONVERT_EXPR
   2090  1.1  mrg 	     || sc == FIX_TRUNC_EXPR;
   2091  1.1  mrg     }
   2092  1.1  mrg 
   2093  1.1  mrg   return false;
   2094  1.1  mrg }
   2095  1.1  mrg 
   2096  1.3  mrg /* Return true if S is a clobber statement.  */
   2097  1.3  mrg 
   2098  1.3  mrg static inline bool
   2099  1.3  mrg gimple_clobber_p (gimple s)
   2100  1.3  mrg {
   2101  1.3  mrg   return gimple_assign_single_p (s)
   2102  1.3  mrg          && TREE_CLOBBER_P (gimple_assign_rhs1 (s));
   2103  1.3  mrg }
   2104  1.1  mrg 
   2105  1.1  mrg /* Return true if GS is a GIMPLE_CALL.  */
   2106  1.1  mrg 
   2107  1.1  mrg static inline bool
   2108  1.1  mrg is_gimple_call (const_gimple gs)
   2109  1.1  mrg {
   2110  1.1  mrg   return gimple_code (gs) == GIMPLE_CALL;
   2111  1.1  mrg }
   2112  1.1  mrg 
   2113  1.1  mrg /* Return the LHS of call statement GS.  */
   2114  1.1  mrg 
   2115  1.1  mrg static inline tree
   2116  1.1  mrg gimple_call_lhs (const_gimple gs)
   2117  1.1  mrg {
   2118  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2119  1.1  mrg   return gimple_op (gs, 0);
   2120  1.1  mrg }
   2121  1.1  mrg 
   2122  1.1  mrg 
   2123  1.1  mrg /* Return a pointer to the LHS of call statement GS.  */
   2124  1.1  mrg 
   2125  1.1  mrg static inline tree *
   2126  1.1  mrg gimple_call_lhs_ptr (const_gimple gs)
   2127  1.1  mrg {
   2128  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2129  1.1  mrg   return gimple_op_ptr (gs, 0);
   2130  1.1  mrg }
   2131  1.1  mrg 
   2132  1.1  mrg 
   2133  1.1  mrg /* Set LHS to be the LHS operand of call statement GS.  */
   2134  1.1  mrg 
   2135  1.1  mrg static inline void
   2136  1.1  mrg gimple_call_set_lhs (gimple gs, tree lhs)
   2137  1.1  mrg {
   2138  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2139  1.1  mrg   gimple_set_op (gs, 0, lhs);
   2140  1.1  mrg   if (lhs && TREE_CODE (lhs) == SSA_NAME)
   2141  1.1  mrg     SSA_NAME_DEF_STMT (lhs) = gs;
   2142  1.1  mrg }
   2143  1.1  mrg 
   2144  1.1  mrg 
   2145  1.3  mrg /* Return true if call GS calls an internal-only function, as enumerated
   2146  1.3  mrg    by internal_fn.  */
   2147  1.3  mrg 
   2148  1.3  mrg static inline bool
   2149  1.3  mrg gimple_call_internal_p (const_gimple gs)
   2150  1.3  mrg {
   2151  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2152  1.3  mrg   return (gs->gsbase.subcode & GF_CALL_INTERNAL) != 0;
   2153  1.3  mrg }
   2154  1.3  mrg 
   2155  1.3  mrg 
   2156  1.3  mrg /* Return the target of internal call GS.  */
   2157  1.3  mrg 
   2158  1.3  mrg static inline enum internal_fn
   2159  1.3  mrg gimple_call_internal_fn (const_gimple gs)
   2160  1.3  mrg {
   2161  1.3  mrg   gcc_gimple_checking_assert (gimple_call_internal_p (gs));
   2162  1.3  mrg   return gs->gimple_call.u.internal_fn;
   2163  1.3  mrg }
   2164  1.3  mrg 
   2165  1.3  mrg 
   2166  1.3  mrg /* Return the function type of the function called by GS.  */
   2167  1.3  mrg 
   2168  1.3  mrg static inline tree
   2169  1.3  mrg gimple_call_fntype (const_gimple gs)
   2170  1.3  mrg {
   2171  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2172  1.3  mrg   if (gimple_call_internal_p (gs))
   2173  1.3  mrg     return NULL_TREE;
   2174  1.3  mrg   return gs->gimple_call.u.fntype;
   2175  1.3  mrg }
   2176  1.3  mrg 
   2177  1.3  mrg /* Set the type of the function called by GS to FNTYPE.  */
   2178  1.3  mrg 
   2179  1.3  mrg static inline void
   2180  1.3  mrg gimple_call_set_fntype (gimple gs, tree fntype)
   2181  1.3  mrg {
   2182  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2183  1.3  mrg   gcc_gimple_checking_assert (!gimple_call_internal_p (gs));
   2184  1.3  mrg   gs->gimple_call.u.fntype = fntype;
   2185  1.3  mrg }
   2186  1.3  mrg 
   2187  1.3  mrg 
   2188  1.1  mrg /* Return the tree node representing the function called by call
   2189  1.1  mrg    statement GS.  */
   2190  1.1  mrg 
   2191  1.1  mrg static inline tree
   2192  1.1  mrg gimple_call_fn (const_gimple gs)
   2193  1.1  mrg {
   2194  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2195  1.1  mrg   return gimple_op (gs, 1);
   2196  1.1  mrg }
   2197  1.1  mrg 
   2198  1.1  mrg /* Return a pointer to the tree node representing the function called by call
   2199  1.1  mrg    statement GS.  */
   2200  1.1  mrg 
   2201  1.1  mrg static inline tree *
   2202  1.1  mrg gimple_call_fn_ptr (const_gimple gs)
   2203  1.1  mrg {
   2204  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2205  1.1  mrg   return gimple_op_ptr (gs, 1);
   2206  1.1  mrg }
   2207  1.1  mrg 
   2208  1.1  mrg 
   2209  1.1  mrg /* Set FN to be the function called by call statement GS.  */
   2210  1.1  mrg 
   2211  1.1  mrg static inline void
   2212  1.1  mrg gimple_call_set_fn (gimple gs, tree fn)
   2213  1.1  mrg {
   2214  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2215  1.3  mrg   gcc_gimple_checking_assert (!gimple_call_internal_p (gs));
   2216  1.1  mrg   gimple_set_op (gs, 1, fn);
   2217  1.1  mrg }
   2218  1.1  mrg 
   2219  1.1  mrg 
   2220  1.1  mrg /* Set FNDECL to be the function called by call statement GS.  */
   2221  1.1  mrg 
   2222  1.1  mrg static inline void
   2223  1.1  mrg gimple_call_set_fndecl (gimple gs, tree decl)
   2224  1.1  mrg {
   2225  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2226  1.3  mrg   gcc_gimple_checking_assert (!gimple_call_internal_p (gs));
   2227  1.1  mrg   gimple_set_op (gs, 1, build_fold_addr_expr_loc (gimple_location (gs), decl));
   2228  1.1  mrg }
   2229  1.1  mrg 
   2230  1.1  mrg 
   2231  1.3  mrg /* Set internal function FN to be the function called by call statement GS.  */
   2232  1.3  mrg 
   2233  1.3  mrg static inline void
   2234  1.3  mrg gimple_call_set_internal_fn (gimple gs, enum internal_fn fn)
   2235  1.3  mrg {
   2236  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2237  1.3  mrg   gcc_gimple_checking_assert (gimple_call_internal_p (gs));
   2238  1.3  mrg   gs->gimple_call.u.internal_fn = fn;
   2239  1.3  mrg }
   2240  1.3  mrg 
   2241  1.3  mrg 
   2242  1.3  mrg /* Given a valid GIMPLE_CALL function address return the FUNCTION_DECL
   2243  1.3  mrg    associated with the callee if known.  Otherwise return NULL_TREE.  */
   2244  1.3  mrg 
   2245  1.3  mrg static inline tree
   2246  1.3  mrg gimple_call_addr_fndecl (const_tree fn)
   2247  1.3  mrg {
   2248  1.3  mrg   if (fn && TREE_CODE (fn) == ADDR_EXPR)
   2249  1.3  mrg     {
   2250  1.3  mrg       tree fndecl = TREE_OPERAND (fn, 0);
   2251  1.3  mrg       if (TREE_CODE (fndecl) == MEM_REF
   2252  1.3  mrg 	  && TREE_CODE (TREE_OPERAND (fndecl, 0)) == ADDR_EXPR
   2253  1.3  mrg 	  && integer_zerop (TREE_OPERAND (fndecl, 1)))
   2254  1.3  mrg 	fndecl = TREE_OPERAND (TREE_OPERAND (fndecl, 0), 0);
   2255  1.3  mrg       if (TREE_CODE (fndecl) == FUNCTION_DECL)
   2256  1.3  mrg 	return fndecl;
   2257  1.3  mrg     }
   2258  1.3  mrg   return NULL_TREE;
   2259  1.3  mrg }
   2260  1.3  mrg 
   2261  1.1  mrg /* If a given GIMPLE_CALL's callee is a FUNCTION_DECL, return it.
   2262  1.1  mrg    Otherwise return NULL.  This function is analogous to
   2263  1.1  mrg    get_callee_fndecl in tree land.  */
   2264  1.1  mrg 
   2265  1.1  mrg static inline tree
   2266  1.1  mrg gimple_call_fndecl (const_gimple gs)
   2267  1.1  mrg {
   2268  1.3  mrg   return gimple_call_addr_fndecl (gimple_call_fn (gs));
   2269  1.1  mrg }
   2270  1.1  mrg 
   2271  1.1  mrg 
   2272  1.1  mrg /* Return the type returned by call statement GS.  */
   2273  1.1  mrg 
   2274  1.1  mrg static inline tree
   2275  1.1  mrg gimple_call_return_type (const_gimple gs)
   2276  1.1  mrg {
   2277  1.3  mrg   tree type = gimple_call_fntype (gs);
   2278  1.1  mrg 
   2279  1.3  mrg   if (type == NULL_TREE)
   2280  1.3  mrg     return TREE_TYPE (gimple_call_lhs (gs));
   2281  1.1  mrg 
   2282  1.3  mrg   /* The type returned by a function is the type of its
   2283  1.1  mrg      function type.  */
   2284  1.1  mrg   return TREE_TYPE (type);
   2285  1.1  mrg }
   2286  1.1  mrg 
   2287  1.1  mrg 
   2288  1.1  mrg /* Return the static chain for call statement GS.  */
   2289  1.1  mrg 
   2290  1.1  mrg static inline tree
   2291  1.1  mrg gimple_call_chain (const_gimple gs)
   2292  1.1  mrg {
   2293  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2294  1.1  mrg   return gimple_op (gs, 2);
   2295  1.1  mrg }
   2296  1.1  mrg 
   2297  1.1  mrg 
   2298  1.1  mrg /* Return a pointer to the static chain for call statement GS.  */
   2299  1.1  mrg 
   2300  1.1  mrg static inline tree *
   2301  1.1  mrg gimple_call_chain_ptr (const_gimple gs)
   2302  1.1  mrg {
   2303  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2304  1.1  mrg   return gimple_op_ptr (gs, 2);
   2305  1.1  mrg }
   2306  1.1  mrg 
   2307  1.1  mrg /* Set CHAIN to be the static chain for call statement GS.  */
   2308  1.1  mrg 
   2309  1.1  mrg static inline void
   2310  1.1  mrg gimple_call_set_chain (gimple gs, tree chain)
   2311  1.1  mrg {
   2312  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2313  1.1  mrg 
   2314  1.1  mrg   gimple_set_op (gs, 2, chain);
   2315  1.1  mrg }
   2316  1.1  mrg 
   2317  1.1  mrg 
   2318  1.1  mrg /* Return the number of arguments used by call statement GS.  */
   2319  1.1  mrg 
   2320  1.1  mrg static inline unsigned
   2321  1.1  mrg gimple_call_num_args (const_gimple gs)
   2322  1.1  mrg {
   2323  1.1  mrg   unsigned num_ops;
   2324  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2325  1.1  mrg   num_ops = gimple_num_ops (gs);
   2326  1.1  mrg   return num_ops - 3;
   2327  1.1  mrg }
   2328  1.1  mrg 
   2329  1.1  mrg 
   2330  1.1  mrg /* Return the argument at position INDEX for call statement GS.  */
   2331  1.1  mrg 
   2332  1.1  mrg static inline tree
   2333  1.1  mrg gimple_call_arg (const_gimple gs, unsigned index)
   2334  1.1  mrg {
   2335  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2336  1.1  mrg   return gimple_op (gs, index + 3);
   2337  1.1  mrg }
   2338  1.1  mrg 
   2339  1.1  mrg 
   2340  1.1  mrg /* Return a pointer to the argument at position INDEX for call
   2341  1.1  mrg    statement GS.  */
   2342  1.1  mrg 
   2343  1.1  mrg static inline tree *
   2344  1.1  mrg gimple_call_arg_ptr (const_gimple gs, unsigned index)
   2345  1.1  mrg {
   2346  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2347  1.1  mrg   return gimple_op_ptr (gs, index + 3);
   2348  1.1  mrg }
   2349  1.1  mrg 
   2350  1.1  mrg 
   2351  1.1  mrg /* Set ARG to be the argument at position INDEX for call statement GS.  */
   2352  1.1  mrg 
   2353  1.1  mrg static inline void
   2354  1.1  mrg gimple_call_set_arg (gimple gs, unsigned index, tree arg)
   2355  1.1  mrg {
   2356  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CALL);
   2357  1.1  mrg   gimple_set_op (gs, index + 3, arg);
   2358  1.1  mrg }
   2359  1.1  mrg 
   2360  1.1  mrg 
   2361  1.1  mrg /* If TAIL_P is true, mark call statement S as being a tail call
   2362  1.1  mrg    (i.e., a call just before the exit of a function).  These calls are
   2363  1.1  mrg    candidate for tail call optimization.  */
   2364  1.1  mrg 
   2365  1.1  mrg static inline void
   2366  1.1  mrg gimple_call_set_tail (gimple s, bool tail_p)
   2367  1.1  mrg {
   2368  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2369  1.1  mrg   if (tail_p)
   2370  1.1  mrg     s->gsbase.subcode |= GF_CALL_TAILCALL;
   2371  1.1  mrg   else
   2372  1.1  mrg     s->gsbase.subcode &= ~GF_CALL_TAILCALL;
   2373  1.1  mrg }
   2374  1.1  mrg 
   2375  1.1  mrg 
   2376  1.1  mrg /* Return true if GIMPLE_CALL S is marked as a tail call.  */
   2377  1.1  mrg 
   2378  1.1  mrg static inline bool
   2379  1.1  mrg gimple_call_tail_p (gimple s)
   2380  1.1  mrg {
   2381  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2382  1.1  mrg   return (s->gsbase.subcode & GF_CALL_TAILCALL) != 0;
   2383  1.1  mrg }
   2384  1.1  mrg 
   2385  1.1  mrg 
   2386  1.1  mrg /* If RETURN_SLOT_OPT_P is true mark GIMPLE_CALL S as valid for return
   2387  1.1  mrg    slot optimization.  This transformation uses the target of the call
   2388  1.1  mrg    expansion as the return slot for calls that return in memory.  */
   2389  1.1  mrg 
   2390  1.1  mrg static inline void
   2391  1.1  mrg gimple_call_set_return_slot_opt (gimple s, bool return_slot_opt_p)
   2392  1.1  mrg {
   2393  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2394  1.1  mrg   if (return_slot_opt_p)
   2395  1.1  mrg     s->gsbase.subcode |= GF_CALL_RETURN_SLOT_OPT;
   2396  1.1  mrg   else
   2397  1.1  mrg     s->gsbase.subcode &= ~GF_CALL_RETURN_SLOT_OPT;
   2398  1.1  mrg }
   2399  1.1  mrg 
   2400  1.1  mrg 
   2401  1.1  mrg /* Return true if S is marked for return slot optimization.  */
   2402  1.1  mrg 
   2403  1.1  mrg static inline bool
   2404  1.1  mrg gimple_call_return_slot_opt_p (gimple s)
   2405  1.1  mrg {
   2406  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2407  1.1  mrg   return (s->gsbase.subcode & GF_CALL_RETURN_SLOT_OPT) != 0;
   2408  1.1  mrg }
   2409  1.1  mrg 
   2410  1.1  mrg 
   2411  1.1  mrg /* If FROM_THUNK_P is true, mark GIMPLE_CALL S as being the jump from a
   2412  1.1  mrg    thunk to the thunked-to function.  */
   2413  1.1  mrg 
   2414  1.1  mrg static inline void
   2415  1.1  mrg gimple_call_set_from_thunk (gimple s, bool from_thunk_p)
   2416  1.1  mrg {
   2417  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2418  1.1  mrg   if (from_thunk_p)
   2419  1.1  mrg     s->gsbase.subcode |= GF_CALL_FROM_THUNK;
   2420  1.1  mrg   else
   2421  1.1  mrg     s->gsbase.subcode &= ~GF_CALL_FROM_THUNK;
   2422  1.1  mrg }
   2423  1.1  mrg 
   2424  1.1  mrg 
   2425  1.1  mrg /* Return true if GIMPLE_CALL S is a jump from a thunk.  */
   2426  1.1  mrg 
   2427  1.1  mrg static inline bool
   2428  1.1  mrg gimple_call_from_thunk_p (gimple s)
   2429  1.1  mrg {
   2430  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2431  1.1  mrg   return (s->gsbase.subcode & GF_CALL_FROM_THUNK) != 0;
   2432  1.1  mrg }
   2433  1.1  mrg 
   2434  1.1  mrg 
   2435  1.1  mrg /* If PASS_ARG_PACK_P is true, GIMPLE_CALL S is a stdarg call that needs the
   2436  1.1  mrg    argument pack in its argument list.  */
   2437  1.1  mrg 
   2438  1.1  mrg static inline void
   2439  1.1  mrg gimple_call_set_va_arg_pack (gimple s, bool pass_arg_pack_p)
   2440  1.1  mrg {
   2441  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2442  1.1  mrg   if (pass_arg_pack_p)
   2443  1.1  mrg     s->gsbase.subcode |= GF_CALL_VA_ARG_PACK;
   2444  1.1  mrg   else
   2445  1.1  mrg     s->gsbase.subcode &= ~GF_CALL_VA_ARG_PACK;
   2446  1.1  mrg }
   2447  1.1  mrg 
   2448  1.1  mrg 
   2449  1.1  mrg /* Return true if GIMPLE_CALL S is a stdarg call that needs the
   2450  1.1  mrg    argument pack in its argument list.  */
   2451  1.1  mrg 
   2452  1.1  mrg static inline bool
   2453  1.1  mrg gimple_call_va_arg_pack_p (gimple s)
   2454  1.1  mrg {
   2455  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2456  1.1  mrg   return (s->gsbase.subcode & GF_CALL_VA_ARG_PACK) != 0;
   2457  1.1  mrg }
   2458  1.1  mrg 
   2459  1.1  mrg 
   2460  1.1  mrg /* Return true if S is a noreturn call.  */
   2461  1.1  mrg 
   2462  1.1  mrg static inline bool
   2463  1.1  mrg gimple_call_noreturn_p (gimple s)
   2464  1.1  mrg {
   2465  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2466  1.1  mrg   return (gimple_call_flags (s) & ECF_NORETURN) != 0;
   2467  1.1  mrg }
   2468  1.1  mrg 
   2469  1.1  mrg 
   2470  1.1  mrg /* If NOTHROW_P is true, GIMPLE_CALL S is a call that is known to not throw
   2471  1.1  mrg    even if the called function can throw in other cases.  */
   2472  1.1  mrg 
   2473  1.1  mrg static inline void
   2474  1.1  mrg gimple_call_set_nothrow (gimple s, bool nothrow_p)
   2475  1.1  mrg {
   2476  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2477  1.1  mrg   if (nothrow_p)
   2478  1.1  mrg     s->gsbase.subcode |= GF_CALL_NOTHROW;
   2479  1.1  mrg   else
   2480  1.1  mrg     s->gsbase.subcode &= ~GF_CALL_NOTHROW;
   2481  1.1  mrg }
   2482  1.1  mrg 
   2483  1.1  mrg /* Return true if S is a nothrow call.  */
   2484  1.1  mrg 
   2485  1.1  mrg static inline bool
   2486  1.1  mrg gimple_call_nothrow_p (gimple s)
   2487  1.1  mrg {
   2488  1.1  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2489  1.1  mrg   return (gimple_call_flags (s) & ECF_NOTHROW) != 0;
   2490  1.1  mrg }
   2491  1.1  mrg 
   2492  1.3  mrg /* If FOR_VAR is true, GIMPLE_CALL S is a call to builtin_alloca that
   2493  1.3  mrg    is known to be emitted for VLA objects.  Those are wrapped by
   2494  1.3  mrg    stack_save/stack_restore calls and hence can't lead to unbounded
   2495  1.3  mrg    stack growth even when they occur in loops.  */
   2496  1.3  mrg 
   2497  1.3  mrg static inline void
   2498  1.3  mrg gimple_call_set_alloca_for_var (gimple s, bool for_var)
   2499  1.3  mrg {
   2500  1.3  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2501  1.3  mrg   if (for_var)
   2502  1.3  mrg     s->gsbase.subcode |= GF_CALL_ALLOCA_FOR_VAR;
   2503  1.3  mrg   else
   2504  1.3  mrg     s->gsbase.subcode &= ~GF_CALL_ALLOCA_FOR_VAR;
   2505  1.3  mrg }
   2506  1.3  mrg 
   2507  1.3  mrg /* Return true of S is a call to builtin_alloca emitted for VLA objects.  */
   2508  1.3  mrg 
   2509  1.3  mrg static inline bool
   2510  1.3  mrg gimple_call_alloca_for_var_p (gimple s)
   2511  1.3  mrg {
   2512  1.3  mrg   GIMPLE_CHECK (s, GIMPLE_CALL);
   2513  1.3  mrg   return (s->gsbase.subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
   2514  1.3  mrg }
   2515  1.1  mrg 
   2516  1.1  mrg /* Copy all the GF_CALL_* flags from ORIG_CALL to DEST_CALL.  */
   2517  1.1  mrg 
   2518  1.1  mrg static inline void
   2519  1.1  mrg gimple_call_copy_flags (gimple dest_call, gimple orig_call)
   2520  1.1  mrg {
   2521  1.1  mrg   GIMPLE_CHECK (dest_call, GIMPLE_CALL);
   2522  1.1  mrg   GIMPLE_CHECK (orig_call, GIMPLE_CALL);
   2523  1.1  mrg   dest_call->gsbase.subcode = orig_call->gsbase.subcode;
   2524  1.1  mrg }
   2525  1.1  mrg 
   2526  1.1  mrg 
   2527  1.3  mrg /* Return a pointer to the points-to solution for the set of call-used
   2528  1.3  mrg    variables of the call CALL.  */
   2529  1.3  mrg 
   2530  1.3  mrg static inline struct pt_solution *
   2531  1.3  mrg gimple_call_use_set (gimple call)
   2532  1.3  mrg {
   2533  1.3  mrg   GIMPLE_CHECK (call, GIMPLE_CALL);
   2534  1.3  mrg   return &call->gimple_call.call_used;
   2535  1.3  mrg }
   2536  1.3  mrg 
   2537  1.3  mrg 
   2538  1.3  mrg /* Return a pointer to the points-to solution for the set of call-used
   2539  1.3  mrg    variables of the call CALL.  */
   2540  1.3  mrg 
   2541  1.3  mrg static inline struct pt_solution *
   2542  1.3  mrg gimple_call_clobber_set (gimple call)
   2543  1.3  mrg {
   2544  1.3  mrg   GIMPLE_CHECK (call, GIMPLE_CALL);
   2545  1.3  mrg   return &call->gimple_call.call_clobbered;
   2546  1.3  mrg }
   2547  1.3  mrg 
   2548  1.3  mrg 
   2549  1.1  mrg /* Returns true if this is a GIMPLE_ASSIGN or a GIMPLE_CALL with a
   2550  1.1  mrg    non-NULL lhs.  */
   2551  1.1  mrg 
   2552  1.1  mrg static inline bool
   2553  1.1  mrg gimple_has_lhs (gimple stmt)
   2554  1.1  mrg {
   2555  1.1  mrg   return (is_gimple_assign (stmt)
   2556  1.1  mrg 	  || (is_gimple_call (stmt)
   2557  1.1  mrg 	      && gimple_call_lhs (stmt) != NULL_TREE));
   2558  1.1  mrg }
   2559  1.1  mrg 
   2560  1.1  mrg 
   2561  1.1  mrg /* Return the code of the predicate computed by conditional statement GS.  */
   2562  1.1  mrg 
   2563  1.1  mrg static inline enum tree_code
   2564  1.1  mrg gimple_cond_code (const_gimple gs)
   2565  1.1  mrg {
   2566  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2567  1.1  mrg   return (enum tree_code) gs->gsbase.subcode;
   2568  1.1  mrg }
   2569  1.1  mrg 
   2570  1.1  mrg 
   2571  1.1  mrg /* Set CODE to be the predicate code for the conditional statement GS.  */
   2572  1.1  mrg 
   2573  1.1  mrg static inline void
   2574  1.1  mrg gimple_cond_set_code (gimple gs, enum tree_code code)
   2575  1.1  mrg {
   2576  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2577  1.1  mrg   gs->gsbase.subcode = code;
   2578  1.1  mrg }
   2579  1.1  mrg 
   2580  1.1  mrg 
   2581  1.1  mrg /* Return the LHS of the predicate computed by conditional statement GS.  */
   2582  1.1  mrg 
   2583  1.1  mrg static inline tree
   2584  1.1  mrg gimple_cond_lhs (const_gimple gs)
   2585  1.1  mrg {
   2586  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2587  1.1  mrg   return gimple_op (gs, 0);
   2588  1.1  mrg }
   2589  1.1  mrg 
   2590  1.1  mrg /* Return the pointer to the LHS of the predicate computed by conditional
   2591  1.1  mrg    statement GS.  */
   2592  1.1  mrg 
   2593  1.1  mrg static inline tree *
   2594  1.1  mrg gimple_cond_lhs_ptr (const_gimple gs)
   2595  1.1  mrg {
   2596  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2597  1.1  mrg   return gimple_op_ptr (gs, 0);
   2598  1.1  mrg }
   2599  1.1  mrg 
   2600  1.1  mrg /* Set LHS to be the LHS operand of the predicate computed by
   2601  1.1  mrg    conditional statement GS.  */
   2602  1.1  mrg 
   2603  1.1  mrg static inline void
   2604  1.1  mrg gimple_cond_set_lhs (gimple gs, tree lhs)
   2605  1.1  mrg {
   2606  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2607  1.1  mrg   gimple_set_op (gs, 0, lhs);
   2608  1.1  mrg }
   2609  1.1  mrg 
   2610  1.1  mrg 
   2611  1.1  mrg /* Return the RHS operand of the predicate computed by conditional GS.  */
   2612  1.1  mrg 
   2613  1.1  mrg static inline tree
   2614  1.1  mrg gimple_cond_rhs (const_gimple gs)
   2615  1.1  mrg {
   2616  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2617  1.1  mrg   return gimple_op (gs, 1);
   2618  1.1  mrg }
   2619  1.1  mrg 
   2620  1.1  mrg /* Return the pointer to the RHS operand of the predicate computed by
   2621  1.1  mrg    conditional GS.  */
   2622  1.1  mrg 
   2623  1.1  mrg static inline tree *
   2624  1.1  mrg gimple_cond_rhs_ptr (const_gimple gs)
   2625  1.1  mrg {
   2626  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2627  1.1  mrg   return gimple_op_ptr (gs, 1);
   2628  1.1  mrg }
   2629  1.1  mrg 
   2630  1.1  mrg 
   2631  1.1  mrg /* Set RHS to be the RHS operand of the predicate computed by
   2632  1.1  mrg    conditional statement GS.  */
   2633  1.1  mrg 
   2634  1.1  mrg static inline void
   2635  1.1  mrg gimple_cond_set_rhs (gimple gs, tree rhs)
   2636  1.1  mrg {
   2637  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2638  1.1  mrg   gimple_set_op (gs, 1, rhs);
   2639  1.1  mrg }
   2640  1.1  mrg 
   2641  1.1  mrg 
   2642  1.1  mrg /* Return the label used by conditional statement GS when its
   2643  1.1  mrg    predicate evaluates to true.  */
   2644  1.1  mrg 
   2645  1.1  mrg static inline tree
   2646  1.1  mrg gimple_cond_true_label (const_gimple gs)
   2647  1.1  mrg {
   2648  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2649  1.1  mrg   return gimple_op (gs, 2);
   2650  1.1  mrg }
   2651  1.1  mrg 
   2652  1.1  mrg 
   2653  1.1  mrg /* Set LABEL to be the label used by conditional statement GS when its
   2654  1.1  mrg    predicate evaluates to true.  */
   2655  1.1  mrg 
   2656  1.1  mrg static inline void
   2657  1.1  mrg gimple_cond_set_true_label (gimple gs, tree label)
   2658  1.1  mrg {
   2659  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2660  1.1  mrg   gimple_set_op (gs, 2, label);
   2661  1.1  mrg }
   2662  1.1  mrg 
   2663  1.1  mrg 
   2664  1.1  mrg /* Set LABEL to be the label used by conditional statement GS when its
   2665  1.1  mrg    predicate evaluates to false.  */
   2666  1.1  mrg 
   2667  1.1  mrg static inline void
   2668  1.1  mrg gimple_cond_set_false_label (gimple gs, tree label)
   2669  1.1  mrg {
   2670  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2671  1.1  mrg   gimple_set_op (gs, 3, label);
   2672  1.1  mrg }
   2673  1.1  mrg 
   2674  1.1  mrg 
   2675  1.1  mrg /* Return the label used by conditional statement GS when its
   2676  1.1  mrg    predicate evaluates to false.  */
   2677  1.1  mrg 
   2678  1.1  mrg static inline tree
   2679  1.1  mrg gimple_cond_false_label (const_gimple gs)
   2680  1.1  mrg {
   2681  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_COND);
   2682  1.1  mrg   return gimple_op (gs, 3);
   2683  1.1  mrg }
   2684  1.1  mrg 
   2685  1.1  mrg 
   2686  1.1  mrg /* Set the conditional COND_STMT to be of the form 'if (1 == 0)'.  */
   2687  1.1  mrg 
   2688  1.1  mrg static inline void
   2689  1.1  mrg gimple_cond_make_false (gimple gs)
   2690  1.1  mrg {
   2691  1.1  mrg   gimple_cond_set_lhs (gs, boolean_true_node);
   2692  1.1  mrg   gimple_cond_set_rhs (gs, boolean_false_node);
   2693  1.1  mrg   gs->gsbase.subcode = EQ_EXPR;
   2694  1.1  mrg }
   2695  1.1  mrg 
   2696  1.1  mrg 
   2697  1.1  mrg /* Set the conditional COND_STMT to be of the form 'if (1 == 1)'.  */
   2698  1.1  mrg 
   2699  1.1  mrg static inline void
   2700  1.1  mrg gimple_cond_make_true (gimple gs)
   2701  1.1  mrg {
   2702  1.1  mrg   gimple_cond_set_lhs (gs, boolean_true_node);
   2703  1.1  mrg   gimple_cond_set_rhs (gs, boolean_true_node);
   2704  1.1  mrg   gs->gsbase.subcode = EQ_EXPR;
   2705  1.1  mrg }
   2706  1.1  mrg 
   2707  1.1  mrg /* Check if conditional statemente GS is of the form 'if (1 == 1)',
   2708  1.1  mrg   'if (0 == 0)', 'if (1 != 0)' or 'if (0 != 1)' */
   2709  1.1  mrg 
   2710  1.1  mrg static inline bool
   2711  1.1  mrg gimple_cond_true_p (const_gimple gs)
   2712  1.1  mrg {
   2713  1.1  mrg   tree lhs = gimple_cond_lhs (gs);
   2714  1.1  mrg   tree rhs = gimple_cond_rhs (gs);
   2715  1.1  mrg   enum tree_code code = gimple_cond_code (gs);
   2716  1.1  mrg 
   2717  1.1  mrg   if (lhs != boolean_true_node && lhs != boolean_false_node)
   2718  1.1  mrg     return false;
   2719  1.1  mrg 
   2720  1.1  mrg   if (rhs != boolean_true_node && rhs != boolean_false_node)
   2721  1.1  mrg     return false;
   2722  1.1  mrg 
   2723  1.1  mrg   if (code == NE_EXPR && lhs != rhs)
   2724  1.1  mrg     return true;
   2725  1.1  mrg 
   2726  1.1  mrg   if (code == EQ_EXPR && lhs == rhs)
   2727  1.1  mrg       return true;
   2728  1.1  mrg 
   2729  1.1  mrg   return false;
   2730  1.1  mrg }
   2731  1.1  mrg 
   2732  1.1  mrg /* Check if conditional statement GS is of the form 'if (1 != 1)',
   2733  1.1  mrg    'if (0 != 0)', 'if (1 == 0)' or 'if (0 == 1)' */
   2734  1.1  mrg 
   2735  1.1  mrg static inline bool
   2736  1.1  mrg gimple_cond_false_p (const_gimple gs)
   2737  1.1  mrg {
   2738  1.1  mrg   tree lhs = gimple_cond_lhs (gs);
   2739  1.1  mrg   tree rhs = gimple_cond_rhs (gs);
   2740  1.1  mrg   enum tree_code code = gimple_cond_code (gs);
   2741  1.1  mrg 
   2742  1.1  mrg   if (lhs != boolean_true_node && lhs != boolean_false_node)
   2743  1.1  mrg     return false;
   2744  1.1  mrg 
   2745  1.1  mrg   if (rhs != boolean_true_node && rhs != boolean_false_node)
   2746  1.1  mrg     return false;
   2747  1.1  mrg 
   2748  1.1  mrg   if (code == NE_EXPR && lhs == rhs)
   2749  1.1  mrg     return true;
   2750  1.1  mrg 
   2751  1.1  mrg   if (code == EQ_EXPR && lhs != rhs)
   2752  1.1  mrg       return true;
   2753  1.1  mrg 
   2754  1.1  mrg   return false;
   2755  1.1  mrg }
   2756  1.1  mrg 
   2757  1.1  mrg /* Check if conditional statement GS is of the form 'if (var != 0)' or
   2758  1.1  mrg    'if (var == 1)' */
   2759  1.1  mrg 
   2760  1.1  mrg static inline bool
   2761  1.1  mrg gimple_cond_single_var_p (gimple gs)
   2762  1.1  mrg {
   2763  1.1  mrg   if (gimple_cond_code (gs) == NE_EXPR
   2764  1.1  mrg       && gimple_cond_rhs (gs) == boolean_false_node)
   2765  1.1  mrg     return true;
   2766  1.1  mrg 
   2767  1.1  mrg   if (gimple_cond_code (gs) == EQ_EXPR
   2768  1.1  mrg       && gimple_cond_rhs (gs) == boolean_true_node)
   2769  1.1  mrg     return true;
   2770  1.1  mrg 
   2771  1.1  mrg   return false;
   2772  1.1  mrg }
   2773  1.1  mrg 
   2774  1.1  mrg /* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS.  */
   2775  1.1  mrg 
   2776  1.1  mrg static inline void
   2777  1.1  mrg gimple_cond_set_condition (gimple stmt, enum tree_code code, tree lhs, tree rhs)
   2778  1.1  mrg {
   2779  1.1  mrg   gimple_cond_set_code (stmt, code);
   2780  1.1  mrg   gimple_cond_set_lhs (stmt, lhs);
   2781  1.1  mrg   gimple_cond_set_rhs (stmt, rhs);
   2782  1.1  mrg }
   2783  1.1  mrg 
   2784  1.1  mrg /* Return the LABEL_DECL node used by GIMPLE_LABEL statement GS.  */
   2785  1.1  mrg 
   2786  1.1  mrg static inline tree
   2787  1.1  mrg gimple_label_label (const_gimple gs)
   2788  1.1  mrg {
   2789  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_LABEL);
   2790  1.1  mrg   return gimple_op (gs, 0);
   2791  1.1  mrg }
   2792  1.1  mrg 
   2793  1.1  mrg 
   2794  1.1  mrg /* Set LABEL to be the LABEL_DECL node used by GIMPLE_LABEL statement
   2795  1.1  mrg    GS.  */
   2796  1.1  mrg 
   2797  1.1  mrg static inline void
   2798  1.1  mrg gimple_label_set_label (gimple gs, tree label)
   2799  1.1  mrg {
   2800  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_LABEL);
   2801  1.1  mrg   gimple_set_op (gs, 0, label);
   2802  1.1  mrg }
   2803  1.1  mrg 
   2804  1.1  mrg 
   2805  1.1  mrg /* Return the destination of the unconditional jump GS.  */
   2806  1.1  mrg 
   2807  1.1  mrg static inline tree
   2808  1.1  mrg gimple_goto_dest (const_gimple gs)
   2809  1.1  mrg {
   2810  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_GOTO);
   2811  1.1  mrg   return gimple_op (gs, 0);
   2812  1.1  mrg }
   2813  1.1  mrg 
   2814  1.1  mrg 
   2815  1.1  mrg /* Set DEST to be the destination of the unconditonal jump GS.  */
   2816  1.1  mrg 
   2817  1.1  mrg static inline void
   2818  1.1  mrg gimple_goto_set_dest (gimple gs, tree dest)
   2819  1.1  mrg {
   2820  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_GOTO);
   2821  1.1  mrg   gimple_set_op (gs, 0, dest);
   2822  1.1  mrg }
   2823  1.1  mrg 
   2824  1.1  mrg 
   2825  1.1  mrg /* Return the variables declared in the GIMPLE_BIND statement GS.  */
   2826  1.1  mrg 
   2827  1.1  mrg static inline tree
   2828  1.1  mrg gimple_bind_vars (const_gimple gs)
   2829  1.1  mrg {
   2830  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2831  1.1  mrg   return gs->gimple_bind.vars;
   2832  1.1  mrg }
   2833  1.1  mrg 
   2834  1.1  mrg 
   2835  1.1  mrg /* Set VARS to be the set of variables declared in the GIMPLE_BIND
   2836  1.1  mrg    statement GS.  */
   2837  1.1  mrg 
   2838  1.1  mrg static inline void
   2839  1.1  mrg gimple_bind_set_vars (gimple gs, tree vars)
   2840  1.1  mrg {
   2841  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2842  1.1  mrg   gs->gimple_bind.vars = vars;
   2843  1.1  mrg }
   2844  1.1  mrg 
   2845  1.1  mrg 
   2846  1.1  mrg /* Append VARS to the set of variables declared in the GIMPLE_BIND
   2847  1.1  mrg    statement GS.  */
   2848  1.1  mrg 
   2849  1.1  mrg static inline void
   2850  1.1  mrg gimple_bind_append_vars (gimple gs, tree vars)
   2851  1.1  mrg {
   2852  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2853  1.1  mrg   gs->gimple_bind.vars = chainon (gs->gimple_bind.vars, vars);
   2854  1.1  mrg }
   2855  1.1  mrg 
   2856  1.1  mrg 
   2857  1.3  mrg static inline gimple_seq *
   2858  1.3  mrg gimple_bind_body_ptr (gimple gs)
   2859  1.3  mrg {
   2860  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2861  1.3  mrg   return &gs->gimple_bind.body;
   2862  1.3  mrg }
   2863  1.3  mrg 
   2864  1.1  mrg /* Return the GIMPLE sequence contained in the GIMPLE_BIND statement GS.  */
   2865  1.1  mrg 
   2866  1.1  mrg static inline gimple_seq
   2867  1.1  mrg gimple_bind_body (gimple gs)
   2868  1.1  mrg {
   2869  1.3  mrg   return *gimple_bind_body_ptr (gs);
   2870  1.1  mrg }
   2871  1.1  mrg 
   2872  1.1  mrg 
   2873  1.1  mrg /* Set SEQ to be the GIMPLE sequence contained in the GIMPLE_BIND
   2874  1.1  mrg    statement GS.  */
   2875  1.1  mrg 
   2876  1.1  mrg static inline void
   2877  1.1  mrg gimple_bind_set_body (gimple gs, gimple_seq seq)
   2878  1.1  mrg {
   2879  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2880  1.1  mrg   gs->gimple_bind.body = seq;
   2881  1.1  mrg }
   2882  1.1  mrg 
   2883  1.1  mrg 
   2884  1.1  mrg /* Append a statement to the end of a GIMPLE_BIND's body.  */
   2885  1.1  mrg 
   2886  1.1  mrg static inline void
   2887  1.1  mrg gimple_bind_add_stmt (gimple gs, gimple stmt)
   2888  1.1  mrg {
   2889  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2890  1.1  mrg   gimple_seq_add_stmt (&gs->gimple_bind.body, stmt);
   2891  1.1  mrg }
   2892  1.1  mrg 
   2893  1.1  mrg 
   2894  1.1  mrg /* Append a sequence of statements to the end of a GIMPLE_BIND's body.  */
   2895  1.1  mrg 
   2896  1.1  mrg static inline void
   2897  1.1  mrg gimple_bind_add_seq (gimple gs, gimple_seq seq)
   2898  1.1  mrg {
   2899  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2900  1.1  mrg   gimple_seq_add_seq (&gs->gimple_bind.body, seq);
   2901  1.1  mrg }
   2902  1.1  mrg 
   2903  1.1  mrg 
   2904  1.1  mrg /* Return the TREE_BLOCK node associated with GIMPLE_BIND statement
   2905  1.1  mrg    GS.  This is analogous to the BIND_EXPR_BLOCK field in trees.  */
   2906  1.1  mrg 
   2907  1.1  mrg static inline tree
   2908  1.1  mrg gimple_bind_block (const_gimple gs)
   2909  1.1  mrg {
   2910  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2911  1.1  mrg   return gs->gimple_bind.block;
   2912  1.1  mrg }
   2913  1.1  mrg 
   2914  1.1  mrg 
   2915  1.1  mrg /* Set BLOCK to be the TREE_BLOCK node associated with GIMPLE_BIND
   2916  1.1  mrg    statement GS.  */
   2917  1.1  mrg 
   2918  1.1  mrg static inline void
   2919  1.1  mrg gimple_bind_set_block (gimple gs, tree block)
   2920  1.1  mrg {
   2921  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_BIND);
   2922  1.3  mrg   gcc_gimple_checking_assert (block == NULL_TREE
   2923  1.3  mrg 			      || TREE_CODE (block) == BLOCK);
   2924  1.1  mrg   gs->gimple_bind.block = block;
   2925  1.1  mrg }
   2926  1.1  mrg 
   2927  1.1  mrg 
   2928  1.1  mrg /* Return the number of input operands for GIMPLE_ASM GS.  */
   2929  1.1  mrg 
   2930  1.1  mrg static inline unsigned
   2931  1.1  mrg gimple_asm_ninputs (const_gimple gs)
   2932  1.1  mrg {
   2933  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2934  1.1  mrg   return gs->gimple_asm.ni;
   2935  1.1  mrg }
   2936  1.1  mrg 
   2937  1.1  mrg 
   2938  1.1  mrg /* Return the number of output operands for GIMPLE_ASM GS.  */
   2939  1.1  mrg 
   2940  1.1  mrg static inline unsigned
   2941  1.1  mrg gimple_asm_noutputs (const_gimple gs)
   2942  1.1  mrg {
   2943  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2944  1.1  mrg   return gs->gimple_asm.no;
   2945  1.1  mrg }
   2946  1.1  mrg 
   2947  1.1  mrg 
   2948  1.1  mrg /* Return the number of clobber operands for GIMPLE_ASM GS.  */
   2949  1.1  mrg 
   2950  1.1  mrg static inline unsigned
   2951  1.1  mrg gimple_asm_nclobbers (const_gimple gs)
   2952  1.1  mrg {
   2953  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2954  1.1  mrg   return gs->gimple_asm.nc;
   2955  1.1  mrg }
   2956  1.1  mrg 
   2957  1.1  mrg /* Return the number of label operands for GIMPLE_ASM GS.  */
   2958  1.1  mrg 
   2959  1.1  mrg static inline unsigned
   2960  1.1  mrg gimple_asm_nlabels (const_gimple gs)
   2961  1.1  mrg {
   2962  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2963  1.1  mrg   return gs->gimple_asm.nl;
   2964  1.1  mrg }
   2965  1.1  mrg 
   2966  1.1  mrg /* Return input operand INDEX of GIMPLE_ASM GS.  */
   2967  1.1  mrg 
   2968  1.1  mrg static inline tree
   2969  1.1  mrg gimple_asm_input_op (const_gimple gs, unsigned index)
   2970  1.1  mrg {
   2971  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2972  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.ni);
   2973  1.3  mrg   return gimple_op (gs, index + gs->gimple_asm.no);
   2974  1.1  mrg }
   2975  1.1  mrg 
   2976  1.1  mrg /* Return a pointer to input operand INDEX of GIMPLE_ASM GS.  */
   2977  1.1  mrg 
   2978  1.1  mrg static inline tree *
   2979  1.1  mrg gimple_asm_input_op_ptr (const_gimple gs, unsigned index)
   2980  1.1  mrg {
   2981  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2982  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.ni);
   2983  1.3  mrg   return gimple_op_ptr (gs, index + gs->gimple_asm.no);
   2984  1.1  mrg }
   2985  1.1  mrg 
   2986  1.1  mrg 
   2987  1.1  mrg /* Set IN_OP to be input operand INDEX in GIMPLE_ASM GS.  */
   2988  1.1  mrg 
   2989  1.1  mrg static inline void
   2990  1.1  mrg gimple_asm_set_input_op (gimple gs, unsigned index, tree in_op)
   2991  1.1  mrg {
   2992  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   2993  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.ni
   2994  1.3  mrg 			      && TREE_CODE (in_op) == TREE_LIST);
   2995  1.3  mrg   gimple_set_op (gs, index + gs->gimple_asm.no, in_op);
   2996  1.1  mrg }
   2997  1.1  mrg 
   2998  1.1  mrg 
   2999  1.1  mrg /* Return output operand INDEX of GIMPLE_ASM GS.  */
   3000  1.1  mrg 
   3001  1.1  mrg static inline tree
   3002  1.1  mrg gimple_asm_output_op (const_gimple gs, unsigned index)
   3003  1.1  mrg {
   3004  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3005  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.no);
   3006  1.3  mrg   return gimple_op (gs, index);
   3007  1.1  mrg }
   3008  1.1  mrg 
   3009  1.1  mrg /* Return a pointer to output operand INDEX of GIMPLE_ASM GS.  */
   3010  1.1  mrg 
   3011  1.1  mrg static inline tree *
   3012  1.1  mrg gimple_asm_output_op_ptr (const_gimple gs, unsigned index)
   3013  1.1  mrg {
   3014  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3015  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.no);
   3016  1.3  mrg   return gimple_op_ptr (gs, index);
   3017  1.1  mrg }
   3018  1.1  mrg 
   3019  1.1  mrg 
   3020  1.1  mrg /* Set OUT_OP to be output operand INDEX in GIMPLE_ASM GS.  */
   3021  1.1  mrg 
   3022  1.1  mrg static inline void
   3023  1.1  mrg gimple_asm_set_output_op (gimple gs, unsigned index, tree out_op)
   3024  1.1  mrg {
   3025  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3026  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.no
   3027  1.3  mrg 			      && TREE_CODE (out_op) == TREE_LIST);
   3028  1.3  mrg   gimple_set_op (gs, index, out_op);
   3029  1.1  mrg }
   3030  1.1  mrg 
   3031  1.1  mrg 
   3032  1.1  mrg /* Return clobber operand INDEX of GIMPLE_ASM GS.  */
   3033  1.1  mrg 
   3034  1.1  mrg static inline tree
   3035  1.1  mrg gimple_asm_clobber_op (const_gimple gs, unsigned index)
   3036  1.1  mrg {
   3037  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3038  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.nc);
   3039  1.1  mrg   return gimple_op (gs, index + gs->gimple_asm.ni + gs->gimple_asm.no);
   3040  1.1  mrg }
   3041  1.1  mrg 
   3042  1.1  mrg 
   3043  1.1  mrg /* Set CLOBBER_OP to be clobber operand INDEX in GIMPLE_ASM GS.  */
   3044  1.1  mrg 
   3045  1.1  mrg static inline void
   3046  1.1  mrg gimple_asm_set_clobber_op (gimple gs, unsigned index, tree clobber_op)
   3047  1.1  mrg {
   3048  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3049  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.nc
   3050  1.3  mrg 			      && TREE_CODE (clobber_op) == TREE_LIST);
   3051  1.1  mrg   gimple_set_op (gs, index + gs->gimple_asm.ni + gs->gimple_asm.no, clobber_op);
   3052  1.1  mrg }
   3053  1.1  mrg 
   3054  1.1  mrg /* Return label operand INDEX of GIMPLE_ASM GS.  */
   3055  1.1  mrg 
   3056  1.1  mrg static inline tree
   3057  1.1  mrg gimple_asm_label_op (const_gimple gs, unsigned index)
   3058  1.1  mrg {
   3059  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3060  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.nl);
   3061  1.1  mrg   return gimple_op (gs, index + gs->gimple_asm.ni + gs->gimple_asm.nc);
   3062  1.1  mrg }
   3063  1.1  mrg 
   3064  1.1  mrg /* Set LABEL_OP to be label operand INDEX in GIMPLE_ASM GS.  */
   3065  1.1  mrg 
   3066  1.1  mrg static inline void
   3067  1.1  mrg gimple_asm_set_label_op (gimple gs, unsigned index, tree label_op)
   3068  1.1  mrg {
   3069  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3070  1.3  mrg   gcc_gimple_checking_assert (index < gs->gimple_asm.nl
   3071  1.3  mrg 			      && TREE_CODE (label_op) == TREE_LIST);
   3072  1.1  mrg   gimple_set_op (gs, index + gs->gimple_asm.ni + gs->gimple_asm.nc, label_op);
   3073  1.1  mrg }
   3074  1.1  mrg 
   3075  1.1  mrg /* Return the string representing the assembly instruction in
   3076  1.1  mrg    GIMPLE_ASM GS.  */
   3077  1.1  mrg 
   3078  1.1  mrg static inline const char *
   3079  1.1  mrg gimple_asm_string (const_gimple gs)
   3080  1.1  mrg {
   3081  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3082  1.1  mrg   return gs->gimple_asm.string;
   3083  1.1  mrg }
   3084  1.1  mrg 
   3085  1.1  mrg 
   3086  1.1  mrg /* Return true if GS is an asm statement marked volatile.  */
   3087  1.1  mrg 
   3088  1.1  mrg static inline bool
   3089  1.1  mrg gimple_asm_volatile_p (const_gimple gs)
   3090  1.1  mrg {
   3091  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3092  1.1  mrg   return (gs->gsbase.subcode & GF_ASM_VOLATILE) != 0;
   3093  1.1  mrg }
   3094  1.1  mrg 
   3095  1.1  mrg 
   3096  1.1  mrg /* If VOLATLE_P is true, mark asm statement GS as volatile.  */
   3097  1.1  mrg 
   3098  1.1  mrg static inline void
   3099  1.1  mrg gimple_asm_set_volatile (gimple gs, bool volatile_p)
   3100  1.1  mrg {
   3101  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3102  1.1  mrg   if (volatile_p)
   3103  1.1  mrg     gs->gsbase.subcode |= GF_ASM_VOLATILE;
   3104  1.1  mrg   else
   3105  1.1  mrg     gs->gsbase.subcode &= ~GF_ASM_VOLATILE;
   3106  1.1  mrg }
   3107  1.1  mrg 
   3108  1.1  mrg 
   3109  1.1  mrg /* If INPUT_P is true, mark asm GS as an ASM_INPUT.  */
   3110  1.1  mrg 
   3111  1.1  mrg static inline void
   3112  1.1  mrg gimple_asm_set_input (gimple gs, bool input_p)
   3113  1.1  mrg {
   3114  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3115  1.1  mrg   if (input_p)
   3116  1.1  mrg     gs->gsbase.subcode |= GF_ASM_INPUT;
   3117  1.1  mrg   else
   3118  1.1  mrg     gs->gsbase.subcode &= ~GF_ASM_INPUT;
   3119  1.1  mrg }
   3120  1.1  mrg 
   3121  1.1  mrg 
   3122  1.1  mrg /* Return true if asm GS is an ASM_INPUT.  */
   3123  1.1  mrg 
   3124  1.1  mrg static inline bool
   3125  1.1  mrg gimple_asm_input_p (const_gimple gs)
   3126  1.1  mrg {
   3127  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_ASM);
   3128  1.1  mrg   return (gs->gsbase.subcode & GF_ASM_INPUT) != 0;
   3129  1.1  mrg }
   3130  1.1  mrg 
   3131  1.1  mrg 
   3132  1.1  mrg /* Return the types handled by GIMPLE_CATCH statement GS.  */
   3133  1.1  mrg 
   3134  1.1  mrg static inline tree
   3135  1.1  mrg gimple_catch_types (const_gimple gs)
   3136  1.1  mrg {
   3137  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CATCH);
   3138  1.1  mrg   return gs->gimple_catch.types;
   3139  1.1  mrg }
   3140  1.1  mrg 
   3141  1.1  mrg 
   3142  1.1  mrg /* Return a pointer to the types handled by GIMPLE_CATCH statement GS.  */
   3143  1.1  mrg 
   3144  1.1  mrg static inline tree *
   3145  1.1  mrg gimple_catch_types_ptr (gimple gs)
   3146  1.1  mrg {
   3147  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CATCH);
   3148  1.1  mrg   return &gs->gimple_catch.types;
   3149  1.1  mrg }
   3150  1.1  mrg 
   3151  1.1  mrg 
   3152  1.3  mrg /* Return a pointer to the GIMPLE sequence representing the body of
   3153  1.3  mrg    the handler of GIMPLE_CATCH statement GS.  */
   3154  1.1  mrg 
   3155  1.3  mrg static inline gimple_seq *
   3156  1.3  mrg gimple_catch_handler_ptr (gimple gs)
   3157  1.1  mrg {
   3158  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CATCH);
   3159  1.3  mrg   return &gs->gimple_catch.handler;
   3160  1.1  mrg }
   3161  1.1  mrg 
   3162  1.1  mrg 
   3163  1.3  mrg /* Return the GIMPLE sequence representing the body of the handler of
   3164  1.3  mrg    GIMPLE_CATCH statement GS.  */
   3165  1.1  mrg 
   3166  1.3  mrg static inline gimple_seq
   3167  1.3  mrg gimple_catch_handler (gimple gs)
   3168  1.1  mrg {
   3169  1.3  mrg   return *gimple_catch_handler_ptr (gs);
   3170  1.1  mrg }
   3171  1.1  mrg 
   3172  1.1  mrg 
   3173  1.1  mrg /* Set T to be the set of types handled by GIMPLE_CATCH GS.  */
   3174  1.1  mrg 
   3175  1.1  mrg static inline void
   3176  1.1  mrg gimple_catch_set_types (gimple gs, tree t)
   3177  1.1  mrg {
   3178  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CATCH);
   3179  1.1  mrg   gs->gimple_catch.types = t;
   3180  1.1  mrg }
   3181  1.1  mrg 
   3182  1.1  mrg 
   3183  1.1  mrg /* Set HANDLER to be the body of GIMPLE_CATCH GS.  */
   3184  1.1  mrg 
   3185  1.1  mrg static inline void
   3186  1.1  mrg gimple_catch_set_handler (gimple gs, gimple_seq handler)
   3187  1.1  mrg {
   3188  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_CATCH);
   3189  1.1  mrg   gs->gimple_catch.handler = handler;
   3190  1.1  mrg }
   3191  1.1  mrg 
   3192  1.1  mrg 
   3193  1.1  mrg /* Return the types handled by GIMPLE_EH_FILTER statement GS.  */
   3194  1.1  mrg 
   3195  1.1  mrg static inline tree
   3196  1.1  mrg gimple_eh_filter_types (const_gimple gs)
   3197  1.1  mrg {
   3198  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_FILTER);
   3199  1.1  mrg   return gs->gimple_eh_filter.types;
   3200  1.1  mrg }
   3201  1.1  mrg 
   3202  1.1  mrg 
   3203  1.1  mrg /* Return a pointer to the types handled by GIMPLE_EH_FILTER statement
   3204  1.1  mrg    GS.  */
   3205  1.1  mrg 
   3206  1.1  mrg static inline tree *
   3207  1.1  mrg gimple_eh_filter_types_ptr (gimple gs)
   3208  1.1  mrg {
   3209  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_FILTER);
   3210  1.1  mrg   return &gs->gimple_eh_filter.types;
   3211  1.1  mrg }
   3212  1.1  mrg 
   3213  1.1  mrg 
   3214  1.3  mrg /* Return a pointer to the sequence of statement to execute when
   3215  1.3  mrg    GIMPLE_EH_FILTER statement fails.  */
   3216  1.3  mrg 
   3217  1.3  mrg static inline gimple_seq *
   3218  1.3  mrg gimple_eh_filter_failure_ptr (gimple gs)
   3219  1.3  mrg {
   3220  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_FILTER);
   3221  1.3  mrg   return &gs->gimple_eh_filter.failure;
   3222  1.3  mrg }
   3223  1.3  mrg 
   3224  1.3  mrg 
   3225  1.1  mrg /* Return the sequence of statement to execute when GIMPLE_EH_FILTER
   3226  1.1  mrg    statement fails.  */
   3227  1.1  mrg 
   3228  1.1  mrg static inline gimple_seq
   3229  1.1  mrg gimple_eh_filter_failure (gimple gs)
   3230  1.1  mrg {
   3231  1.3  mrg   return *gimple_eh_filter_failure_ptr (gs);
   3232  1.1  mrg }
   3233  1.1  mrg 
   3234  1.1  mrg 
   3235  1.1  mrg /* Set TYPES to be the set of types handled by GIMPLE_EH_FILTER GS.  */
   3236  1.1  mrg 
   3237  1.1  mrg static inline void
   3238  1.1  mrg gimple_eh_filter_set_types (gimple gs, tree types)
   3239  1.1  mrg {
   3240  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_FILTER);
   3241  1.1  mrg   gs->gimple_eh_filter.types = types;
   3242  1.1  mrg }
   3243  1.1  mrg 
   3244  1.1  mrg 
   3245  1.1  mrg /* Set FAILURE to be the sequence of statements to execute on failure
   3246  1.1  mrg    for GIMPLE_EH_FILTER GS.  */
   3247  1.1  mrg 
   3248  1.1  mrg static inline void
   3249  1.1  mrg gimple_eh_filter_set_failure (gimple gs, gimple_seq failure)
   3250  1.1  mrg {
   3251  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_FILTER);
   3252  1.1  mrg   gs->gimple_eh_filter.failure = failure;
   3253  1.1  mrg }
   3254  1.1  mrg 
   3255  1.1  mrg /* Get the function decl to be called by the MUST_NOT_THROW region.  */
   3256  1.1  mrg 
   3257  1.1  mrg static inline tree
   3258  1.1  mrg gimple_eh_must_not_throw_fndecl (gimple gs)
   3259  1.1  mrg {
   3260  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_MUST_NOT_THROW);
   3261  1.1  mrg   return gs->gimple_eh_mnt.fndecl;
   3262  1.1  mrg }
   3263  1.1  mrg 
   3264  1.1  mrg /* Set the function decl to be called by GS to DECL.  */
   3265  1.1  mrg 
   3266  1.1  mrg static inline void
   3267  1.1  mrg gimple_eh_must_not_throw_set_fndecl (gimple gs, tree decl)
   3268  1.1  mrg {
   3269  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_MUST_NOT_THROW);
   3270  1.1  mrg   gs->gimple_eh_mnt.fndecl = decl;
   3271  1.1  mrg }
   3272  1.1  mrg 
   3273  1.3  mrg /* GIMPLE_EH_ELSE accessors.  */
   3274  1.3  mrg 
   3275  1.3  mrg static inline gimple_seq *
   3276  1.3  mrg gimple_eh_else_n_body_ptr (gimple gs)
   3277  1.3  mrg {
   3278  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_ELSE);
   3279  1.3  mrg   return &gs->gimple_eh_else.n_body;
   3280  1.3  mrg }
   3281  1.3  mrg 
   3282  1.3  mrg static inline gimple_seq
   3283  1.3  mrg gimple_eh_else_n_body (gimple gs)
   3284  1.3  mrg {
   3285  1.3  mrg   return *gimple_eh_else_n_body_ptr (gs);
   3286  1.3  mrg }
   3287  1.3  mrg 
   3288  1.3  mrg static inline gimple_seq *
   3289  1.3  mrg gimple_eh_else_e_body_ptr (gimple gs)
   3290  1.3  mrg {
   3291  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_ELSE);
   3292  1.3  mrg   return &gs->gimple_eh_else.e_body;
   3293  1.3  mrg }
   3294  1.3  mrg 
   3295  1.3  mrg static inline gimple_seq
   3296  1.3  mrg gimple_eh_else_e_body (gimple gs)
   3297  1.3  mrg {
   3298  1.3  mrg   return *gimple_eh_else_e_body_ptr (gs);
   3299  1.3  mrg }
   3300  1.3  mrg 
   3301  1.3  mrg static inline void
   3302  1.3  mrg gimple_eh_else_set_n_body (gimple gs, gimple_seq seq)
   3303  1.3  mrg {
   3304  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_ELSE);
   3305  1.3  mrg   gs->gimple_eh_else.n_body = seq;
   3306  1.3  mrg }
   3307  1.3  mrg 
   3308  1.3  mrg static inline void
   3309  1.3  mrg gimple_eh_else_set_e_body (gimple gs, gimple_seq seq)
   3310  1.3  mrg {
   3311  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_ELSE);
   3312  1.3  mrg   gs->gimple_eh_else.e_body = seq;
   3313  1.3  mrg }
   3314  1.1  mrg 
   3315  1.1  mrg /* GIMPLE_TRY accessors. */
   3316  1.1  mrg 
   3317  1.1  mrg /* Return the kind of try block represented by GIMPLE_TRY GS.  This is
   3318  1.1  mrg    either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY.  */
   3319  1.1  mrg 
   3320  1.1  mrg static inline enum gimple_try_flags
   3321  1.1  mrg gimple_try_kind (const_gimple gs)
   3322  1.1  mrg {
   3323  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3324  1.1  mrg   return (enum gimple_try_flags) (gs->gsbase.subcode & GIMPLE_TRY_KIND);
   3325  1.1  mrg }
   3326  1.1  mrg 
   3327  1.1  mrg 
   3328  1.1  mrg /* Set the kind of try block represented by GIMPLE_TRY GS.  */
   3329  1.1  mrg 
   3330  1.1  mrg static inline void
   3331  1.1  mrg gimple_try_set_kind (gimple gs, enum gimple_try_flags kind)
   3332  1.1  mrg {
   3333  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3334  1.3  mrg   gcc_gimple_checking_assert (kind == GIMPLE_TRY_CATCH
   3335  1.3  mrg 			      || kind == GIMPLE_TRY_FINALLY);
   3336  1.1  mrg   if (gimple_try_kind (gs) != kind)
   3337  1.1  mrg     gs->gsbase.subcode = (unsigned int) kind;
   3338  1.1  mrg }
   3339  1.1  mrg 
   3340  1.1  mrg 
   3341  1.1  mrg /* Return the GIMPLE_TRY_CATCH_IS_CLEANUP flag.  */
   3342  1.1  mrg 
   3343  1.1  mrg static inline bool
   3344  1.1  mrg gimple_try_catch_is_cleanup (const_gimple gs)
   3345  1.1  mrg {
   3346  1.3  mrg   gcc_gimple_checking_assert (gimple_try_kind (gs) == GIMPLE_TRY_CATCH);
   3347  1.1  mrg   return (gs->gsbase.subcode & GIMPLE_TRY_CATCH_IS_CLEANUP) != 0;
   3348  1.1  mrg }
   3349  1.1  mrg 
   3350  1.1  mrg 
   3351  1.3  mrg /* Return a pointer to the sequence of statements used as the
   3352  1.3  mrg    body for GIMPLE_TRY GS.  */
   3353  1.3  mrg 
   3354  1.3  mrg static inline gimple_seq *
   3355  1.3  mrg gimple_try_eval_ptr (gimple gs)
   3356  1.3  mrg {
   3357  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3358  1.3  mrg   return &gs->gimple_try.eval;
   3359  1.3  mrg }
   3360  1.3  mrg 
   3361  1.3  mrg 
   3362  1.1  mrg /* Return the sequence of statements used as the body for GIMPLE_TRY GS.  */
   3363  1.1  mrg 
   3364  1.1  mrg static inline gimple_seq
   3365  1.1  mrg gimple_try_eval (gimple gs)
   3366  1.1  mrg {
   3367  1.3  mrg   return *gimple_try_eval_ptr (gs);
   3368  1.3  mrg }
   3369  1.3  mrg 
   3370  1.3  mrg 
   3371  1.3  mrg /* Return a pointer to the sequence of statements used as the cleanup body for
   3372  1.3  mrg    GIMPLE_TRY GS.  */
   3373  1.3  mrg 
   3374  1.3  mrg static inline gimple_seq *
   3375  1.3  mrg gimple_try_cleanup_ptr (gimple gs)
   3376  1.3  mrg {
   3377  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3378  1.3  mrg   return &gs->gimple_try.cleanup;
   3379  1.1  mrg }
   3380  1.1  mrg 
   3381  1.1  mrg 
   3382  1.1  mrg /* Return the sequence of statements used as the cleanup body for
   3383  1.1  mrg    GIMPLE_TRY GS.  */
   3384  1.1  mrg 
   3385  1.1  mrg static inline gimple_seq
   3386  1.1  mrg gimple_try_cleanup (gimple gs)
   3387  1.1  mrg {
   3388  1.3  mrg   return *gimple_try_cleanup_ptr (gs);
   3389  1.1  mrg }
   3390  1.1  mrg 
   3391  1.1  mrg 
   3392  1.1  mrg /* Set the GIMPLE_TRY_CATCH_IS_CLEANUP flag.  */
   3393  1.1  mrg 
   3394  1.1  mrg static inline void
   3395  1.1  mrg gimple_try_set_catch_is_cleanup (gimple g, bool catch_is_cleanup)
   3396  1.1  mrg {
   3397  1.3  mrg   gcc_gimple_checking_assert (gimple_try_kind (g) == GIMPLE_TRY_CATCH);
   3398  1.1  mrg   if (catch_is_cleanup)
   3399  1.1  mrg     g->gsbase.subcode |= GIMPLE_TRY_CATCH_IS_CLEANUP;
   3400  1.1  mrg   else
   3401  1.1  mrg     g->gsbase.subcode &= ~GIMPLE_TRY_CATCH_IS_CLEANUP;
   3402  1.1  mrg }
   3403  1.1  mrg 
   3404  1.1  mrg 
   3405  1.1  mrg /* Set EVAL to be the sequence of statements to use as the body for
   3406  1.1  mrg    GIMPLE_TRY GS.  */
   3407  1.1  mrg 
   3408  1.1  mrg static inline void
   3409  1.1  mrg gimple_try_set_eval (gimple gs, gimple_seq eval)
   3410  1.1  mrg {
   3411  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3412  1.1  mrg   gs->gimple_try.eval = eval;
   3413  1.1  mrg }
   3414  1.1  mrg 
   3415  1.1  mrg 
   3416  1.1  mrg /* Set CLEANUP to be the sequence of statements to use as the cleanup
   3417  1.1  mrg    body for GIMPLE_TRY GS.  */
   3418  1.1  mrg 
   3419  1.1  mrg static inline void
   3420  1.1  mrg gimple_try_set_cleanup (gimple gs, gimple_seq cleanup)
   3421  1.1  mrg {
   3422  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_TRY);
   3423  1.1  mrg   gs->gimple_try.cleanup = cleanup;
   3424  1.1  mrg }
   3425  1.1  mrg 
   3426  1.1  mrg 
   3427  1.3  mrg /* Return a pointer to the cleanup sequence for cleanup statement GS.  */
   3428  1.3  mrg 
   3429  1.3  mrg static inline gimple_seq *
   3430  1.3  mrg gimple_wce_cleanup_ptr (gimple gs)
   3431  1.3  mrg {
   3432  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
   3433  1.3  mrg   return &gs->gimple_wce.cleanup;
   3434  1.3  mrg }
   3435  1.3  mrg 
   3436  1.3  mrg 
   3437  1.1  mrg /* Return the cleanup sequence for cleanup statement GS.  */
   3438  1.1  mrg 
   3439  1.1  mrg static inline gimple_seq
   3440  1.1  mrg gimple_wce_cleanup (gimple gs)
   3441  1.1  mrg {
   3442  1.3  mrg   return *gimple_wce_cleanup_ptr (gs);
   3443  1.1  mrg }
   3444  1.1  mrg 
   3445  1.1  mrg 
   3446  1.1  mrg /* Set CLEANUP to be the cleanup sequence for GS.  */
   3447  1.1  mrg 
   3448  1.1  mrg static inline void
   3449  1.1  mrg gimple_wce_set_cleanup (gimple gs, gimple_seq cleanup)
   3450  1.1  mrg {
   3451  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
   3452  1.1  mrg   gs->gimple_wce.cleanup = cleanup;
   3453  1.1  mrg }
   3454  1.1  mrg 
   3455  1.1  mrg 
   3456  1.1  mrg /* Return the CLEANUP_EH_ONLY flag for a WCE tuple.  */
   3457  1.1  mrg 
   3458  1.1  mrg static inline bool
   3459  1.1  mrg gimple_wce_cleanup_eh_only (const_gimple gs)
   3460  1.1  mrg {
   3461  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
   3462  1.1  mrg   return gs->gsbase.subcode != 0;
   3463  1.1  mrg }
   3464  1.1  mrg 
   3465  1.1  mrg 
   3466  1.1  mrg /* Set the CLEANUP_EH_ONLY flag for a WCE tuple.  */
   3467  1.1  mrg 
   3468  1.1  mrg static inline void
   3469  1.1  mrg gimple_wce_set_cleanup_eh_only (gimple gs, bool eh_only_p)
   3470  1.1  mrg {
   3471  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
   3472  1.1  mrg   gs->gsbase.subcode = (unsigned int) eh_only_p;
   3473  1.1  mrg }
   3474  1.1  mrg 
   3475  1.1  mrg 
   3476  1.1  mrg /* Return the maximum number of arguments supported by GIMPLE_PHI GS.  */
   3477  1.1  mrg 
   3478  1.1  mrg static inline unsigned
   3479  1.1  mrg gimple_phi_capacity (const_gimple gs)
   3480  1.1  mrg {
   3481  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3482  1.1  mrg   return gs->gimple_phi.capacity;
   3483  1.1  mrg }
   3484  1.1  mrg 
   3485  1.1  mrg 
   3486  1.1  mrg /* Return the number of arguments in GIMPLE_PHI GS.  This must always
   3487  1.1  mrg    be exactly the number of incoming edges for the basic block holding
   3488  1.1  mrg    GS.  */
   3489  1.1  mrg 
   3490  1.1  mrg static inline unsigned
   3491  1.1  mrg gimple_phi_num_args (const_gimple gs)
   3492  1.1  mrg {
   3493  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3494  1.1  mrg   return gs->gimple_phi.nargs;
   3495  1.1  mrg }
   3496  1.1  mrg 
   3497  1.1  mrg 
   3498  1.1  mrg /* Return the SSA name created by GIMPLE_PHI GS.  */
   3499  1.1  mrg 
   3500  1.1  mrg static inline tree
   3501  1.1  mrg gimple_phi_result (const_gimple gs)
   3502  1.1  mrg {
   3503  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3504  1.1  mrg   return gs->gimple_phi.result;
   3505  1.1  mrg }
   3506  1.1  mrg 
   3507  1.1  mrg /* Return a pointer to the SSA name created by GIMPLE_PHI GS.  */
   3508  1.1  mrg 
   3509  1.1  mrg static inline tree *
   3510  1.1  mrg gimple_phi_result_ptr (gimple gs)
   3511  1.1  mrg {
   3512  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3513  1.1  mrg   return &gs->gimple_phi.result;
   3514  1.1  mrg }
   3515  1.1  mrg 
   3516  1.1  mrg /* Set RESULT to be the SSA name created by GIMPLE_PHI GS.  */
   3517  1.1  mrg 
   3518  1.1  mrg static inline void
   3519  1.1  mrg gimple_phi_set_result (gimple gs, tree result)
   3520  1.1  mrg {
   3521  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3522  1.1  mrg   gs->gimple_phi.result = result;
   3523  1.3  mrg   if (result && TREE_CODE (result) == SSA_NAME)
   3524  1.3  mrg     SSA_NAME_DEF_STMT (result) = gs;
   3525  1.1  mrg }
   3526  1.1  mrg 
   3527  1.1  mrg 
   3528  1.1  mrg /* Return the PHI argument corresponding to incoming edge INDEX for
   3529  1.1  mrg    GIMPLE_PHI GS.  */
   3530  1.1  mrg 
   3531  1.1  mrg static inline struct phi_arg_d *
   3532  1.1  mrg gimple_phi_arg (gimple gs, unsigned index)
   3533  1.1  mrg {
   3534  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3535  1.3  mrg   gcc_gimple_checking_assert (index <= gs->gimple_phi.capacity);
   3536  1.1  mrg   return &(gs->gimple_phi.args[index]);
   3537  1.1  mrg }
   3538  1.1  mrg 
   3539  1.1  mrg /* Set PHIARG to be the argument corresponding to incoming edge INDEX
   3540  1.1  mrg    for GIMPLE_PHI GS.  */
   3541  1.1  mrg 
   3542  1.1  mrg static inline void
   3543  1.1  mrg gimple_phi_set_arg (gimple gs, unsigned index, struct phi_arg_d * phiarg)
   3544  1.1  mrg {
   3545  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PHI);
   3546  1.3  mrg   gcc_gimple_checking_assert (index <= gs->gimple_phi.nargs);
   3547  1.3  mrg   gs->gimple_phi.args[index] = *phiarg;
   3548  1.1  mrg }
   3549  1.1  mrg 
   3550  1.1  mrg /* Return the region number for GIMPLE_RESX GS.  */
   3551  1.1  mrg 
   3552  1.1  mrg static inline int
   3553  1.1  mrg gimple_resx_region (const_gimple gs)
   3554  1.1  mrg {
   3555  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_RESX);
   3556  1.1  mrg   return gs->gimple_eh_ctrl.region;
   3557  1.1  mrg }
   3558  1.1  mrg 
   3559  1.1  mrg /* Set REGION to be the region number for GIMPLE_RESX GS.  */
   3560  1.1  mrg 
   3561  1.1  mrg static inline void
   3562  1.1  mrg gimple_resx_set_region (gimple gs, int region)
   3563  1.1  mrg {
   3564  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_RESX);
   3565  1.1  mrg   gs->gimple_eh_ctrl.region = region;
   3566  1.1  mrg }
   3567  1.1  mrg 
   3568  1.1  mrg /* Return the region number for GIMPLE_EH_DISPATCH GS.  */
   3569  1.1  mrg 
   3570  1.1  mrg static inline int
   3571  1.1  mrg gimple_eh_dispatch_region (const_gimple gs)
   3572  1.1  mrg {
   3573  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_DISPATCH);
   3574  1.1  mrg   return gs->gimple_eh_ctrl.region;
   3575  1.1  mrg }
   3576  1.1  mrg 
   3577  1.1  mrg /* Set REGION to be the region number for GIMPLE_EH_DISPATCH GS.  */
   3578  1.1  mrg 
   3579  1.1  mrg static inline void
   3580  1.1  mrg gimple_eh_dispatch_set_region (gimple gs, int region)
   3581  1.1  mrg {
   3582  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_EH_DISPATCH);
   3583  1.1  mrg   gs->gimple_eh_ctrl.region = region;
   3584  1.1  mrg }
   3585  1.1  mrg 
   3586  1.1  mrg /* Return the number of labels associated with the switch statement GS.  */
   3587  1.1  mrg 
   3588  1.1  mrg static inline unsigned
   3589  1.1  mrg gimple_switch_num_labels (const_gimple gs)
   3590  1.1  mrg {
   3591  1.1  mrg   unsigned num_ops;
   3592  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3593  1.1  mrg   num_ops = gimple_num_ops (gs);
   3594  1.3  mrg   gcc_gimple_checking_assert (num_ops > 1);
   3595  1.1  mrg   return num_ops - 1;
   3596  1.1  mrg }
   3597  1.1  mrg 
   3598  1.1  mrg 
   3599  1.1  mrg /* Set NLABELS to be the number of labels for the switch statement GS.  */
   3600  1.1  mrg 
   3601  1.1  mrg static inline void
   3602  1.1  mrg gimple_switch_set_num_labels (gimple g, unsigned nlabels)
   3603  1.1  mrg {
   3604  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_SWITCH);
   3605  1.1  mrg   gimple_set_num_ops (g, nlabels + 1);
   3606  1.1  mrg }
   3607  1.1  mrg 
   3608  1.1  mrg 
   3609  1.1  mrg /* Return the index variable used by the switch statement GS.  */
   3610  1.1  mrg 
   3611  1.1  mrg static inline tree
   3612  1.1  mrg gimple_switch_index (const_gimple gs)
   3613  1.1  mrg {
   3614  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3615  1.1  mrg   return gimple_op (gs, 0);
   3616  1.1  mrg }
   3617  1.1  mrg 
   3618  1.1  mrg 
   3619  1.1  mrg /* Return a pointer to the index variable for the switch statement GS.  */
   3620  1.1  mrg 
   3621  1.1  mrg static inline tree *
   3622  1.1  mrg gimple_switch_index_ptr (const_gimple gs)
   3623  1.1  mrg {
   3624  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3625  1.1  mrg   return gimple_op_ptr (gs, 0);
   3626  1.1  mrg }
   3627  1.1  mrg 
   3628  1.1  mrg 
   3629  1.1  mrg /* Set INDEX to be the index variable for switch statement GS.  */
   3630  1.1  mrg 
   3631  1.1  mrg static inline void
   3632  1.1  mrg gimple_switch_set_index (gimple gs, tree index)
   3633  1.1  mrg {
   3634  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3635  1.3  mrg   gcc_gimple_checking_assert (SSA_VAR_P (index) || CONSTANT_CLASS_P (index));
   3636  1.1  mrg   gimple_set_op (gs, 0, index);
   3637  1.1  mrg }
   3638  1.1  mrg 
   3639  1.1  mrg 
   3640  1.1  mrg /* Return the label numbered INDEX.  The default label is 0, followed by any
   3641  1.1  mrg    labels in a switch statement.  */
   3642  1.1  mrg 
   3643  1.1  mrg static inline tree
   3644  1.1  mrg gimple_switch_label (const_gimple gs, unsigned index)
   3645  1.1  mrg {
   3646  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3647  1.3  mrg   gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 1);
   3648  1.1  mrg   return gimple_op (gs, index + 1);
   3649  1.1  mrg }
   3650  1.1  mrg 
   3651  1.1  mrg /* Set the label number INDEX to LABEL.  0 is always the default label.  */
   3652  1.1  mrg 
   3653  1.1  mrg static inline void
   3654  1.1  mrg gimple_switch_set_label (gimple gs, unsigned index, tree label)
   3655  1.1  mrg {
   3656  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_SWITCH);
   3657  1.3  mrg   gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 1
   3658  1.3  mrg 			      && (label == NULL_TREE
   3659  1.3  mrg 			          || TREE_CODE (label) == CASE_LABEL_EXPR));
   3660  1.1  mrg   gimple_set_op (gs, index + 1, label);
   3661  1.1  mrg }
   3662  1.1  mrg 
   3663  1.1  mrg /* Return the default label for a switch statement.  */
   3664  1.1  mrg 
   3665  1.1  mrg static inline tree
   3666  1.1  mrg gimple_switch_default_label (const_gimple gs)
   3667  1.1  mrg {
   3668  1.3  mrg   tree label = gimple_switch_label (gs, 0);
   3669  1.3  mrg   gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
   3670  1.3  mrg   return label;
   3671  1.1  mrg }
   3672  1.1  mrg 
   3673  1.1  mrg /* Set the default label for a switch statement.  */
   3674  1.1  mrg 
   3675  1.1  mrg static inline void
   3676  1.1  mrg gimple_switch_set_default_label (gimple gs, tree label)
   3677  1.1  mrg {
   3678  1.3  mrg   gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
   3679  1.1  mrg   gimple_switch_set_label (gs, 0, label);
   3680  1.1  mrg }
   3681  1.1  mrg 
   3682  1.1  mrg /* Return true if GS is a GIMPLE_DEBUG statement.  */
   3683  1.1  mrg 
   3684  1.1  mrg static inline bool
   3685  1.1  mrg is_gimple_debug (const_gimple gs)
   3686  1.1  mrg {
   3687  1.1  mrg   return gimple_code (gs) == GIMPLE_DEBUG;
   3688  1.1  mrg }
   3689  1.1  mrg 
   3690  1.1  mrg /* Return true if S is a GIMPLE_DEBUG BIND statement.  */
   3691  1.1  mrg 
   3692  1.1  mrg static inline bool
   3693  1.1  mrg gimple_debug_bind_p (const_gimple s)
   3694  1.1  mrg {
   3695  1.1  mrg   if (is_gimple_debug (s))
   3696  1.1  mrg     return s->gsbase.subcode == GIMPLE_DEBUG_BIND;
   3697  1.1  mrg 
   3698  1.1  mrg   return false;
   3699  1.1  mrg }
   3700  1.1  mrg 
   3701  1.1  mrg /* Return the variable bound in a GIMPLE_DEBUG bind statement.  */
   3702  1.1  mrg 
   3703  1.1  mrg static inline tree
   3704  1.1  mrg gimple_debug_bind_get_var (gimple dbg)
   3705  1.1  mrg {
   3706  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3707  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3708  1.1  mrg   return gimple_op (dbg, 0);
   3709  1.1  mrg }
   3710  1.1  mrg 
   3711  1.1  mrg /* Return the value bound to the variable in a GIMPLE_DEBUG bind
   3712  1.1  mrg    statement.  */
   3713  1.1  mrg 
   3714  1.1  mrg static inline tree
   3715  1.1  mrg gimple_debug_bind_get_value (gimple dbg)
   3716  1.1  mrg {
   3717  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3718  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3719  1.1  mrg   return gimple_op (dbg, 1);
   3720  1.1  mrg }
   3721  1.1  mrg 
   3722  1.1  mrg /* Return a pointer to the value bound to the variable in a
   3723  1.1  mrg    GIMPLE_DEBUG bind statement.  */
   3724  1.1  mrg 
   3725  1.1  mrg static inline tree *
   3726  1.1  mrg gimple_debug_bind_get_value_ptr (gimple dbg)
   3727  1.1  mrg {
   3728  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3729  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3730  1.1  mrg   return gimple_op_ptr (dbg, 1);
   3731  1.1  mrg }
   3732  1.1  mrg 
   3733  1.1  mrg /* Set the variable bound in a GIMPLE_DEBUG bind statement.  */
   3734  1.1  mrg 
   3735  1.1  mrg static inline void
   3736  1.1  mrg gimple_debug_bind_set_var (gimple dbg, tree var)
   3737  1.1  mrg {
   3738  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3739  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3740  1.1  mrg   gimple_set_op (dbg, 0, var);
   3741  1.1  mrg }
   3742  1.1  mrg 
   3743  1.1  mrg /* Set the value bound to the variable in a GIMPLE_DEBUG bind
   3744  1.1  mrg    statement.  */
   3745  1.1  mrg 
   3746  1.1  mrg static inline void
   3747  1.1  mrg gimple_debug_bind_set_value (gimple dbg, tree value)
   3748  1.1  mrg {
   3749  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3750  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3751  1.1  mrg   gimple_set_op (dbg, 1, value);
   3752  1.1  mrg }
   3753  1.1  mrg 
   3754  1.1  mrg /* The second operand of a GIMPLE_DEBUG_BIND, when the value was
   3755  1.1  mrg    optimized away.  */
   3756  1.1  mrg #define GIMPLE_DEBUG_BIND_NOVALUE NULL_TREE /* error_mark_node */
   3757  1.1  mrg 
   3758  1.1  mrg /* Remove the value bound to the variable in a GIMPLE_DEBUG bind
   3759  1.1  mrg    statement.  */
   3760  1.1  mrg 
   3761  1.1  mrg static inline void
   3762  1.1  mrg gimple_debug_bind_reset_value (gimple dbg)
   3763  1.1  mrg {
   3764  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3765  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3766  1.1  mrg   gimple_set_op (dbg, 1, GIMPLE_DEBUG_BIND_NOVALUE);
   3767  1.1  mrg }
   3768  1.1  mrg 
   3769  1.1  mrg /* Return true if the GIMPLE_DEBUG bind statement is bound to a
   3770  1.1  mrg    value.  */
   3771  1.1  mrg 
   3772  1.1  mrg static inline bool
   3773  1.1  mrg gimple_debug_bind_has_value_p (gimple dbg)
   3774  1.1  mrg {
   3775  1.1  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3776  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
   3777  1.1  mrg   return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE;
   3778  1.1  mrg }
   3779  1.1  mrg 
   3780  1.1  mrg #undef GIMPLE_DEBUG_BIND_NOVALUE
   3781  1.1  mrg 
   3782  1.3  mrg /* Return true if S is a GIMPLE_DEBUG SOURCE BIND statement.  */
   3783  1.3  mrg 
   3784  1.3  mrg static inline bool
   3785  1.3  mrg gimple_debug_source_bind_p (const_gimple s)
   3786  1.3  mrg {
   3787  1.3  mrg   if (is_gimple_debug (s))
   3788  1.3  mrg     return s->gsbase.subcode == GIMPLE_DEBUG_SOURCE_BIND;
   3789  1.3  mrg 
   3790  1.3  mrg   return false;
   3791  1.3  mrg }
   3792  1.3  mrg 
   3793  1.3  mrg /* Return the variable bound in a GIMPLE_DEBUG source bind statement.  */
   3794  1.3  mrg 
   3795  1.3  mrg static inline tree
   3796  1.3  mrg gimple_debug_source_bind_get_var (gimple dbg)
   3797  1.3  mrg {
   3798  1.3  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3799  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
   3800  1.3  mrg   return gimple_op (dbg, 0);
   3801  1.3  mrg }
   3802  1.3  mrg 
   3803  1.3  mrg /* Return the value bound to the variable in a GIMPLE_DEBUG source bind
   3804  1.3  mrg    statement.  */
   3805  1.3  mrg 
   3806  1.3  mrg static inline tree
   3807  1.3  mrg gimple_debug_source_bind_get_value (gimple dbg)
   3808  1.3  mrg {
   3809  1.3  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3810  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
   3811  1.3  mrg   return gimple_op (dbg, 1);
   3812  1.3  mrg }
   3813  1.3  mrg 
   3814  1.3  mrg /* Return a pointer to the value bound to the variable in a
   3815  1.3  mrg    GIMPLE_DEBUG source bind statement.  */
   3816  1.3  mrg 
   3817  1.3  mrg static inline tree *
   3818  1.3  mrg gimple_debug_source_bind_get_value_ptr (gimple dbg)
   3819  1.3  mrg {
   3820  1.3  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3821  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
   3822  1.3  mrg   return gimple_op_ptr (dbg, 1);
   3823  1.3  mrg }
   3824  1.3  mrg 
   3825  1.3  mrg /* Set the variable bound in a GIMPLE_DEBUG source bind statement.  */
   3826  1.3  mrg 
   3827  1.3  mrg static inline void
   3828  1.3  mrg gimple_debug_source_bind_set_var (gimple dbg, tree var)
   3829  1.3  mrg {
   3830  1.3  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3831  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
   3832  1.3  mrg   gimple_set_op (dbg, 0, var);
   3833  1.3  mrg }
   3834  1.3  mrg 
   3835  1.3  mrg /* Set the value bound to the variable in a GIMPLE_DEBUG source bind
   3836  1.3  mrg    statement.  */
   3837  1.3  mrg 
   3838  1.3  mrg static inline void
   3839  1.3  mrg gimple_debug_source_bind_set_value (gimple dbg, tree value)
   3840  1.3  mrg {
   3841  1.3  mrg   GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
   3842  1.3  mrg   gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
   3843  1.3  mrg   gimple_set_op (dbg, 1, value);
   3844  1.3  mrg }
   3845  1.3  mrg 
   3846  1.3  mrg /* Return a pointer to the body for the OMP statement GS.  */
   3847  1.3  mrg 
   3848  1.3  mrg static inline gimple_seq *
   3849  1.3  mrg gimple_omp_body_ptr (gimple gs)
   3850  1.3  mrg {
   3851  1.3  mrg   return &gs->omp.body;
   3852  1.3  mrg }
   3853  1.3  mrg 
   3854  1.1  mrg /* Return the body for the OMP statement GS.  */
   3855  1.1  mrg 
   3856  1.1  mrg static inline gimple_seq
   3857  1.1  mrg gimple_omp_body (gimple gs)
   3858  1.1  mrg {
   3859  1.3  mrg   return *gimple_omp_body_ptr (gs);
   3860  1.1  mrg }
   3861  1.1  mrg 
   3862  1.1  mrg /* Set BODY to be the body for the OMP statement GS.  */
   3863  1.1  mrg 
   3864  1.1  mrg static inline void
   3865  1.1  mrg gimple_omp_set_body (gimple gs, gimple_seq body)
   3866  1.1  mrg {
   3867  1.1  mrg   gs->omp.body = body;
   3868  1.1  mrg }
   3869  1.1  mrg 
   3870  1.1  mrg 
   3871  1.1  mrg /* Return the name associated with OMP_CRITICAL statement GS.  */
   3872  1.1  mrg 
   3873  1.1  mrg static inline tree
   3874  1.1  mrg gimple_omp_critical_name (const_gimple gs)
   3875  1.1  mrg {
   3876  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_CRITICAL);
   3877  1.1  mrg   return gs->gimple_omp_critical.name;
   3878  1.1  mrg }
   3879  1.1  mrg 
   3880  1.1  mrg 
   3881  1.1  mrg /* Return a pointer to the name associated with OMP critical statement GS.  */
   3882  1.1  mrg 
   3883  1.1  mrg static inline tree *
   3884  1.1  mrg gimple_omp_critical_name_ptr (gimple gs)
   3885  1.1  mrg {
   3886  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_CRITICAL);
   3887  1.1  mrg   return &gs->gimple_omp_critical.name;
   3888  1.1  mrg }
   3889  1.1  mrg 
   3890  1.1  mrg 
   3891  1.1  mrg /* Set NAME to be the name associated with OMP critical statement GS.  */
   3892  1.1  mrg 
   3893  1.1  mrg static inline void
   3894  1.1  mrg gimple_omp_critical_set_name (gimple gs, tree name)
   3895  1.1  mrg {
   3896  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_CRITICAL);
   3897  1.1  mrg   gs->gimple_omp_critical.name = name;
   3898  1.1  mrg }
   3899  1.1  mrg 
   3900  1.1  mrg 
   3901  1.1  mrg /* Return the clauses associated with OMP_FOR GS.  */
   3902  1.1  mrg 
   3903  1.1  mrg static inline tree
   3904  1.1  mrg gimple_omp_for_clauses (const_gimple gs)
   3905  1.1  mrg {
   3906  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3907  1.1  mrg   return gs->gimple_omp_for.clauses;
   3908  1.1  mrg }
   3909  1.1  mrg 
   3910  1.1  mrg 
   3911  1.1  mrg /* Return a pointer to the OMP_FOR GS.  */
   3912  1.1  mrg 
   3913  1.1  mrg static inline tree *
   3914  1.1  mrg gimple_omp_for_clauses_ptr (gimple gs)
   3915  1.1  mrg {
   3916  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3917  1.1  mrg   return &gs->gimple_omp_for.clauses;
   3918  1.1  mrg }
   3919  1.1  mrg 
   3920  1.1  mrg 
   3921  1.1  mrg /* Set CLAUSES to be the list of clauses associated with OMP_FOR GS.  */
   3922  1.1  mrg 
   3923  1.1  mrg static inline void
   3924  1.1  mrg gimple_omp_for_set_clauses (gimple gs, tree clauses)
   3925  1.1  mrg {
   3926  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3927  1.1  mrg   gs->gimple_omp_for.clauses = clauses;
   3928  1.1  mrg }
   3929  1.1  mrg 
   3930  1.1  mrg 
   3931  1.1  mrg /* Get the collapse count of OMP_FOR GS.  */
   3932  1.1  mrg 
   3933  1.1  mrg static inline size_t
   3934  1.1  mrg gimple_omp_for_collapse (gimple gs)
   3935  1.1  mrg {
   3936  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3937  1.1  mrg   return gs->gimple_omp_for.collapse;
   3938  1.1  mrg }
   3939  1.1  mrg 
   3940  1.1  mrg 
   3941  1.1  mrg /* Return the index variable for OMP_FOR GS.  */
   3942  1.1  mrg 
   3943  1.1  mrg static inline tree
   3944  1.1  mrg gimple_omp_for_index (const_gimple gs, size_t i)
   3945  1.1  mrg {
   3946  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3947  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   3948  1.1  mrg   return gs->gimple_omp_for.iter[i].index;
   3949  1.1  mrg }
   3950  1.1  mrg 
   3951  1.1  mrg 
   3952  1.1  mrg /* Return a pointer to the index variable for OMP_FOR GS.  */
   3953  1.1  mrg 
   3954  1.1  mrg static inline tree *
   3955  1.1  mrg gimple_omp_for_index_ptr (gimple gs, size_t i)
   3956  1.1  mrg {
   3957  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3958  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   3959  1.1  mrg   return &gs->gimple_omp_for.iter[i].index;
   3960  1.1  mrg }
   3961  1.1  mrg 
   3962  1.1  mrg 
   3963  1.1  mrg /* Set INDEX to be the index variable for OMP_FOR GS.  */
   3964  1.1  mrg 
   3965  1.1  mrg static inline void
   3966  1.1  mrg gimple_omp_for_set_index (gimple gs, size_t i, tree index)
   3967  1.1  mrg {
   3968  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3969  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   3970  1.1  mrg   gs->gimple_omp_for.iter[i].index = index;
   3971  1.1  mrg }
   3972  1.1  mrg 
   3973  1.1  mrg 
   3974  1.1  mrg /* Return the initial value for OMP_FOR GS.  */
   3975  1.1  mrg 
   3976  1.1  mrg static inline tree
   3977  1.1  mrg gimple_omp_for_initial (const_gimple gs, size_t i)
   3978  1.1  mrg {
   3979  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3980  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   3981  1.1  mrg   return gs->gimple_omp_for.iter[i].initial;
   3982  1.1  mrg }
   3983  1.1  mrg 
   3984  1.1  mrg 
   3985  1.1  mrg /* Return a pointer to the initial value for OMP_FOR GS.  */
   3986  1.1  mrg 
   3987  1.1  mrg static inline tree *
   3988  1.1  mrg gimple_omp_for_initial_ptr (gimple gs, size_t i)
   3989  1.1  mrg {
   3990  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   3991  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   3992  1.1  mrg   return &gs->gimple_omp_for.iter[i].initial;
   3993  1.1  mrg }
   3994  1.1  mrg 
   3995  1.1  mrg 
   3996  1.1  mrg /* Set INITIAL to be the initial value for OMP_FOR GS.  */
   3997  1.1  mrg 
   3998  1.1  mrg static inline void
   3999  1.1  mrg gimple_omp_for_set_initial (gimple gs, size_t i, tree initial)
   4000  1.1  mrg {
   4001  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4002  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4003  1.1  mrg   gs->gimple_omp_for.iter[i].initial = initial;
   4004  1.1  mrg }
   4005  1.1  mrg 
   4006  1.1  mrg 
   4007  1.1  mrg /* Return the final value for OMP_FOR GS.  */
   4008  1.1  mrg 
   4009  1.1  mrg static inline tree
   4010  1.1  mrg gimple_omp_for_final (const_gimple gs, size_t i)
   4011  1.1  mrg {
   4012  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4013  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4014  1.1  mrg   return gs->gimple_omp_for.iter[i].final;
   4015  1.1  mrg }
   4016  1.1  mrg 
   4017  1.1  mrg 
   4018  1.1  mrg /* Return a pointer to the final value for OMP_FOR GS.  */
   4019  1.1  mrg 
   4020  1.1  mrg static inline tree *
   4021  1.1  mrg gimple_omp_for_final_ptr (gimple gs, size_t i)
   4022  1.1  mrg {
   4023  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4024  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4025  1.1  mrg   return &gs->gimple_omp_for.iter[i].final;
   4026  1.1  mrg }
   4027  1.1  mrg 
   4028  1.1  mrg 
   4029  1.1  mrg /* Set FINAL to be the final value for OMP_FOR GS.  */
   4030  1.1  mrg 
   4031  1.1  mrg static inline void
   4032  1.1  mrg gimple_omp_for_set_final (gimple gs, size_t i, tree final)
   4033  1.1  mrg {
   4034  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4035  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4036  1.1  mrg   gs->gimple_omp_for.iter[i].final = final;
   4037  1.1  mrg }
   4038  1.1  mrg 
   4039  1.1  mrg 
   4040  1.1  mrg /* Return the increment value for OMP_FOR GS.  */
   4041  1.1  mrg 
   4042  1.1  mrg static inline tree
   4043  1.1  mrg gimple_omp_for_incr (const_gimple gs, size_t i)
   4044  1.1  mrg {
   4045  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4046  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4047  1.1  mrg   return gs->gimple_omp_for.iter[i].incr;
   4048  1.1  mrg }
   4049  1.1  mrg 
   4050  1.1  mrg 
   4051  1.1  mrg /* Return a pointer to the increment value for OMP_FOR GS.  */
   4052  1.1  mrg 
   4053  1.1  mrg static inline tree *
   4054  1.1  mrg gimple_omp_for_incr_ptr (gimple gs, size_t i)
   4055  1.1  mrg {
   4056  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4057  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4058  1.1  mrg   return &gs->gimple_omp_for.iter[i].incr;
   4059  1.1  mrg }
   4060  1.1  mrg 
   4061  1.1  mrg 
   4062  1.1  mrg /* Set INCR to be the increment value for OMP_FOR GS.  */
   4063  1.1  mrg 
   4064  1.1  mrg static inline void
   4065  1.1  mrg gimple_omp_for_set_incr (gimple gs, size_t i, tree incr)
   4066  1.1  mrg {
   4067  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4068  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4069  1.1  mrg   gs->gimple_omp_for.iter[i].incr = incr;
   4070  1.1  mrg }
   4071  1.1  mrg 
   4072  1.1  mrg 
   4073  1.3  mrg /* Return a pointer to the sequence of statements to execute before the OMP_FOR
   4074  1.3  mrg    statement GS starts.  */
   4075  1.3  mrg 
   4076  1.3  mrg static inline gimple_seq *
   4077  1.3  mrg gimple_omp_for_pre_body_ptr (gimple gs)
   4078  1.3  mrg {
   4079  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4080  1.3  mrg   return &gs->gimple_omp_for.pre_body;
   4081  1.3  mrg }
   4082  1.3  mrg 
   4083  1.3  mrg 
   4084  1.1  mrg /* Return the sequence of statements to execute before the OMP_FOR
   4085  1.1  mrg    statement GS starts.  */
   4086  1.1  mrg 
   4087  1.1  mrg static inline gimple_seq
   4088  1.1  mrg gimple_omp_for_pre_body (gimple gs)
   4089  1.1  mrg {
   4090  1.3  mrg   return *gimple_omp_for_pre_body_ptr (gs);
   4091  1.1  mrg }
   4092  1.1  mrg 
   4093  1.1  mrg 
   4094  1.1  mrg /* Set PRE_BODY to be the sequence of statements to execute before the
   4095  1.1  mrg    OMP_FOR statement GS starts.  */
   4096  1.1  mrg 
   4097  1.1  mrg static inline void
   4098  1.1  mrg gimple_omp_for_set_pre_body (gimple gs, gimple_seq pre_body)
   4099  1.1  mrg {
   4100  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4101  1.1  mrg   gs->gimple_omp_for.pre_body = pre_body;
   4102  1.1  mrg }
   4103  1.1  mrg 
   4104  1.1  mrg 
   4105  1.1  mrg /* Return the clauses associated with OMP_PARALLEL GS.  */
   4106  1.1  mrg 
   4107  1.1  mrg static inline tree
   4108  1.1  mrg gimple_omp_parallel_clauses (const_gimple gs)
   4109  1.1  mrg {
   4110  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4111  1.1  mrg   return gs->gimple_omp_parallel.clauses;
   4112  1.1  mrg }
   4113  1.1  mrg 
   4114  1.1  mrg 
   4115  1.1  mrg /* Return a pointer to the clauses associated with OMP_PARALLEL GS.  */
   4116  1.1  mrg 
   4117  1.1  mrg static inline tree *
   4118  1.1  mrg gimple_omp_parallel_clauses_ptr (gimple gs)
   4119  1.1  mrg {
   4120  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4121  1.1  mrg   return &gs->gimple_omp_parallel.clauses;
   4122  1.1  mrg }
   4123  1.1  mrg 
   4124  1.1  mrg 
   4125  1.1  mrg /* Set CLAUSES to be the list of clauses associated with OMP_PARALLEL
   4126  1.1  mrg    GS.  */
   4127  1.1  mrg 
   4128  1.1  mrg static inline void
   4129  1.1  mrg gimple_omp_parallel_set_clauses (gimple gs, tree clauses)
   4130  1.1  mrg {
   4131  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4132  1.1  mrg   gs->gimple_omp_parallel.clauses = clauses;
   4133  1.1  mrg }
   4134  1.1  mrg 
   4135  1.1  mrg 
   4136  1.1  mrg /* Return the child function used to hold the body of OMP_PARALLEL GS.  */
   4137  1.1  mrg 
   4138  1.1  mrg static inline tree
   4139  1.1  mrg gimple_omp_parallel_child_fn (const_gimple gs)
   4140  1.1  mrg {
   4141  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4142  1.1  mrg   return gs->gimple_omp_parallel.child_fn;
   4143  1.1  mrg }
   4144  1.1  mrg 
   4145  1.1  mrg /* Return a pointer to the child function used to hold the body of
   4146  1.1  mrg    OMP_PARALLEL GS.  */
   4147  1.1  mrg 
   4148  1.1  mrg static inline tree *
   4149  1.1  mrg gimple_omp_parallel_child_fn_ptr (gimple gs)
   4150  1.1  mrg {
   4151  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4152  1.1  mrg   return &gs->gimple_omp_parallel.child_fn;
   4153  1.1  mrg }
   4154  1.1  mrg 
   4155  1.1  mrg 
   4156  1.1  mrg /* Set CHILD_FN to be the child function for OMP_PARALLEL GS.  */
   4157  1.1  mrg 
   4158  1.1  mrg static inline void
   4159  1.1  mrg gimple_omp_parallel_set_child_fn (gimple gs, tree child_fn)
   4160  1.1  mrg {
   4161  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4162  1.1  mrg   gs->gimple_omp_parallel.child_fn = child_fn;
   4163  1.1  mrg }
   4164  1.1  mrg 
   4165  1.1  mrg 
   4166  1.1  mrg /* Return the artificial argument used to send variables and values
   4167  1.1  mrg    from the parent to the children threads in OMP_PARALLEL GS.  */
   4168  1.1  mrg 
   4169  1.1  mrg static inline tree
   4170  1.1  mrg gimple_omp_parallel_data_arg (const_gimple gs)
   4171  1.1  mrg {
   4172  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4173  1.1  mrg   return gs->gimple_omp_parallel.data_arg;
   4174  1.1  mrg }
   4175  1.1  mrg 
   4176  1.1  mrg 
   4177  1.1  mrg /* Return a pointer to the data argument for OMP_PARALLEL GS.  */
   4178  1.1  mrg 
   4179  1.1  mrg static inline tree *
   4180  1.1  mrg gimple_omp_parallel_data_arg_ptr (gimple gs)
   4181  1.1  mrg {
   4182  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4183  1.1  mrg   return &gs->gimple_omp_parallel.data_arg;
   4184  1.1  mrg }
   4185  1.1  mrg 
   4186  1.1  mrg 
   4187  1.1  mrg /* Set DATA_ARG to be the data argument for OMP_PARALLEL GS.  */
   4188  1.1  mrg 
   4189  1.1  mrg static inline void
   4190  1.1  mrg gimple_omp_parallel_set_data_arg (gimple gs, tree data_arg)
   4191  1.1  mrg {
   4192  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_PARALLEL);
   4193  1.1  mrg   gs->gimple_omp_parallel.data_arg = data_arg;
   4194  1.1  mrg }
   4195  1.1  mrg 
   4196  1.1  mrg 
   4197  1.1  mrg /* Return the clauses associated with OMP_TASK GS.  */
   4198  1.1  mrg 
   4199  1.1  mrg static inline tree
   4200  1.1  mrg gimple_omp_task_clauses (const_gimple gs)
   4201  1.1  mrg {
   4202  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4203  1.1  mrg   return gs->gimple_omp_parallel.clauses;
   4204  1.1  mrg }
   4205  1.1  mrg 
   4206  1.1  mrg 
   4207  1.1  mrg /* Return a pointer to the clauses associated with OMP_TASK GS.  */
   4208  1.1  mrg 
   4209  1.1  mrg static inline tree *
   4210  1.1  mrg gimple_omp_task_clauses_ptr (gimple gs)
   4211  1.1  mrg {
   4212  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4213  1.1  mrg   return &gs->gimple_omp_parallel.clauses;
   4214  1.1  mrg }
   4215  1.1  mrg 
   4216  1.1  mrg 
   4217  1.1  mrg /* Set CLAUSES to be the list of clauses associated with OMP_TASK
   4218  1.1  mrg    GS.  */
   4219  1.1  mrg 
   4220  1.1  mrg static inline void
   4221  1.1  mrg gimple_omp_task_set_clauses (gimple gs, tree clauses)
   4222  1.1  mrg {
   4223  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4224  1.1  mrg   gs->gimple_omp_parallel.clauses = clauses;
   4225  1.1  mrg }
   4226  1.1  mrg 
   4227  1.1  mrg 
   4228  1.1  mrg /* Return the child function used to hold the body of OMP_TASK GS.  */
   4229  1.1  mrg 
   4230  1.1  mrg static inline tree
   4231  1.1  mrg gimple_omp_task_child_fn (const_gimple gs)
   4232  1.1  mrg {
   4233  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4234  1.1  mrg   return gs->gimple_omp_parallel.child_fn;
   4235  1.1  mrg }
   4236  1.1  mrg 
   4237  1.1  mrg /* Return a pointer to the child function used to hold the body of
   4238  1.1  mrg    OMP_TASK GS.  */
   4239  1.1  mrg 
   4240  1.1  mrg static inline tree *
   4241  1.1  mrg gimple_omp_task_child_fn_ptr (gimple gs)
   4242  1.1  mrg {
   4243  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4244  1.1  mrg   return &gs->gimple_omp_parallel.child_fn;
   4245  1.1  mrg }
   4246  1.1  mrg 
   4247  1.1  mrg 
   4248  1.1  mrg /* Set CHILD_FN to be the child function for OMP_TASK GS.  */
   4249  1.1  mrg 
   4250  1.1  mrg static inline void
   4251  1.1  mrg gimple_omp_task_set_child_fn (gimple gs, tree child_fn)
   4252  1.1  mrg {
   4253  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4254  1.1  mrg   gs->gimple_omp_parallel.child_fn = child_fn;
   4255  1.1  mrg }
   4256  1.1  mrg 
   4257  1.1  mrg 
   4258  1.1  mrg /* Return the artificial argument used to send variables and values
   4259  1.1  mrg    from the parent to the children threads in OMP_TASK GS.  */
   4260  1.1  mrg 
   4261  1.1  mrg static inline tree
   4262  1.1  mrg gimple_omp_task_data_arg (const_gimple gs)
   4263  1.1  mrg {
   4264  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4265  1.1  mrg   return gs->gimple_omp_parallel.data_arg;
   4266  1.1  mrg }
   4267  1.1  mrg 
   4268  1.1  mrg 
   4269  1.1  mrg /* Return a pointer to the data argument for OMP_TASK GS.  */
   4270  1.1  mrg 
   4271  1.1  mrg static inline tree *
   4272  1.1  mrg gimple_omp_task_data_arg_ptr (gimple gs)
   4273  1.1  mrg {
   4274  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4275  1.1  mrg   return &gs->gimple_omp_parallel.data_arg;
   4276  1.1  mrg }
   4277  1.1  mrg 
   4278  1.1  mrg 
   4279  1.1  mrg /* Set DATA_ARG to be the data argument for OMP_TASK GS.  */
   4280  1.1  mrg 
   4281  1.1  mrg static inline void
   4282  1.1  mrg gimple_omp_task_set_data_arg (gimple gs, tree data_arg)
   4283  1.1  mrg {
   4284  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4285  1.1  mrg   gs->gimple_omp_parallel.data_arg = data_arg;
   4286  1.1  mrg }
   4287  1.1  mrg 
   4288  1.1  mrg 
   4289  1.1  mrg /* Return the clauses associated with OMP_TASK GS.  */
   4290  1.1  mrg 
   4291  1.1  mrg static inline tree
   4292  1.1  mrg gimple_omp_taskreg_clauses (const_gimple gs)
   4293  1.1  mrg {
   4294  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4295  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4296  1.1  mrg   return gs->gimple_omp_parallel.clauses;
   4297  1.1  mrg }
   4298  1.1  mrg 
   4299  1.1  mrg 
   4300  1.1  mrg /* Return a pointer to the clauses associated with OMP_TASK GS.  */
   4301  1.1  mrg 
   4302  1.1  mrg static inline tree *
   4303  1.1  mrg gimple_omp_taskreg_clauses_ptr (gimple gs)
   4304  1.1  mrg {
   4305  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4306  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4307  1.1  mrg   return &gs->gimple_omp_parallel.clauses;
   4308  1.1  mrg }
   4309  1.1  mrg 
   4310  1.1  mrg 
   4311  1.1  mrg /* Set CLAUSES to be the list of clauses associated with OMP_TASK
   4312  1.1  mrg    GS.  */
   4313  1.1  mrg 
   4314  1.1  mrg static inline void
   4315  1.1  mrg gimple_omp_taskreg_set_clauses (gimple gs, tree clauses)
   4316  1.1  mrg {
   4317  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4318  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4319  1.1  mrg   gs->gimple_omp_parallel.clauses = clauses;
   4320  1.1  mrg }
   4321  1.1  mrg 
   4322  1.1  mrg 
   4323  1.1  mrg /* Return the child function used to hold the body of OMP_TASK GS.  */
   4324  1.1  mrg 
   4325  1.1  mrg static inline tree
   4326  1.1  mrg gimple_omp_taskreg_child_fn (const_gimple gs)
   4327  1.1  mrg {
   4328  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4329  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4330  1.1  mrg   return gs->gimple_omp_parallel.child_fn;
   4331  1.1  mrg }
   4332  1.1  mrg 
   4333  1.1  mrg /* Return a pointer to the child function used to hold the body of
   4334  1.1  mrg    OMP_TASK GS.  */
   4335  1.1  mrg 
   4336  1.1  mrg static inline tree *
   4337  1.1  mrg gimple_omp_taskreg_child_fn_ptr (gimple gs)
   4338  1.1  mrg {
   4339  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4340  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4341  1.1  mrg   return &gs->gimple_omp_parallel.child_fn;
   4342  1.1  mrg }
   4343  1.1  mrg 
   4344  1.1  mrg 
   4345  1.1  mrg /* Set CHILD_FN to be the child function for OMP_TASK GS.  */
   4346  1.1  mrg 
   4347  1.1  mrg static inline void
   4348  1.1  mrg gimple_omp_taskreg_set_child_fn (gimple gs, tree child_fn)
   4349  1.1  mrg {
   4350  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4351  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4352  1.1  mrg   gs->gimple_omp_parallel.child_fn = child_fn;
   4353  1.1  mrg }
   4354  1.1  mrg 
   4355  1.1  mrg 
   4356  1.1  mrg /* Return the artificial argument used to send variables and values
   4357  1.1  mrg    from the parent to the children threads in OMP_TASK GS.  */
   4358  1.1  mrg 
   4359  1.1  mrg static inline tree
   4360  1.1  mrg gimple_omp_taskreg_data_arg (const_gimple gs)
   4361  1.1  mrg {
   4362  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4363  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4364  1.1  mrg   return gs->gimple_omp_parallel.data_arg;
   4365  1.1  mrg }
   4366  1.1  mrg 
   4367  1.1  mrg 
   4368  1.1  mrg /* Return a pointer to the data argument for OMP_TASK GS.  */
   4369  1.1  mrg 
   4370  1.1  mrg static inline tree *
   4371  1.1  mrg gimple_omp_taskreg_data_arg_ptr (gimple gs)
   4372  1.1  mrg {
   4373  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4374  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4375  1.1  mrg   return &gs->gimple_omp_parallel.data_arg;
   4376  1.1  mrg }
   4377  1.1  mrg 
   4378  1.1  mrg 
   4379  1.1  mrg /* Set DATA_ARG to be the data argument for OMP_TASK GS.  */
   4380  1.1  mrg 
   4381  1.1  mrg static inline void
   4382  1.1  mrg gimple_omp_taskreg_set_data_arg (gimple gs, tree data_arg)
   4383  1.1  mrg {
   4384  1.1  mrg   if (gimple_code (gs) != GIMPLE_OMP_PARALLEL)
   4385  1.1  mrg     GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4386  1.1  mrg   gs->gimple_omp_parallel.data_arg = data_arg;
   4387  1.1  mrg }
   4388  1.1  mrg 
   4389  1.1  mrg 
   4390  1.1  mrg /* Return the copy function used to hold the body of OMP_TASK GS.  */
   4391  1.1  mrg 
   4392  1.1  mrg static inline tree
   4393  1.1  mrg gimple_omp_task_copy_fn (const_gimple gs)
   4394  1.1  mrg {
   4395  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4396  1.1  mrg   return gs->gimple_omp_task.copy_fn;
   4397  1.1  mrg }
   4398  1.1  mrg 
   4399  1.1  mrg /* Return a pointer to the copy function used to hold the body of
   4400  1.1  mrg    OMP_TASK GS.  */
   4401  1.1  mrg 
   4402  1.1  mrg static inline tree *
   4403  1.1  mrg gimple_omp_task_copy_fn_ptr (gimple gs)
   4404  1.1  mrg {
   4405  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4406  1.1  mrg   return &gs->gimple_omp_task.copy_fn;
   4407  1.1  mrg }
   4408  1.1  mrg 
   4409  1.1  mrg 
   4410  1.1  mrg /* Set CHILD_FN to be the copy function for OMP_TASK GS.  */
   4411  1.1  mrg 
   4412  1.1  mrg static inline void
   4413  1.1  mrg gimple_omp_task_set_copy_fn (gimple gs, tree copy_fn)
   4414  1.1  mrg {
   4415  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4416  1.1  mrg   gs->gimple_omp_task.copy_fn = copy_fn;
   4417  1.1  mrg }
   4418  1.1  mrg 
   4419  1.1  mrg 
   4420  1.1  mrg /* Return size of the data block in bytes in OMP_TASK GS.  */
   4421  1.1  mrg 
   4422  1.1  mrg static inline tree
   4423  1.1  mrg gimple_omp_task_arg_size (const_gimple gs)
   4424  1.1  mrg {
   4425  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4426  1.1  mrg   return gs->gimple_omp_task.arg_size;
   4427  1.1  mrg }
   4428  1.1  mrg 
   4429  1.1  mrg 
   4430  1.1  mrg /* Return a pointer to the data block size for OMP_TASK GS.  */
   4431  1.1  mrg 
   4432  1.1  mrg static inline tree *
   4433  1.1  mrg gimple_omp_task_arg_size_ptr (gimple gs)
   4434  1.1  mrg {
   4435  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4436  1.1  mrg   return &gs->gimple_omp_task.arg_size;
   4437  1.1  mrg }
   4438  1.1  mrg 
   4439  1.1  mrg 
   4440  1.1  mrg /* Set ARG_SIZE to be the data block size for OMP_TASK GS.  */
   4441  1.1  mrg 
   4442  1.1  mrg static inline void
   4443  1.1  mrg gimple_omp_task_set_arg_size (gimple gs, tree arg_size)
   4444  1.1  mrg {
   4445  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4446  1.1  mrg   gs->gimple_omp_task.arg_size = arg_size;
   4447  1.1  mrg }
   4448  1.1  mrg 
   4449  1.1  mrg 
   4450  1.1  mrg /* Return align of the data block in bytes in OMP_TASK GS.  */
   4451  1.1  mrg 
   4452  1.1  mrg static inline tree
   4453  1.1  mrg gimple_omp_task_arg_align (const_gimple gs)
   4454  1.1  mrg {
   4455  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4456  1.1  mrg   return gs->gimple_omp_task.arg_align;
   4457  1.1  mrg }
   4458  1.1  mrg 
   4459  1.1  mrg 
   4460  1.1  mrg /* Return a pointer to the data block align for OMP_TASK GS.  */
   4461  1.1  mrg 
   4462  1.1  mrg static inline tree *
   4463  1.1  mrg gimple_omp_task_arg_align_ptr (gimple gs)
   4464  1.1  mrg {
   4465  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4466  1.1  mrg   return &gs->gimple_omp_task.arg_align;
   4467  1.1  mrg }
   4468  1.1  mrg 
   4469  1.1  mrg 
   4470  1.1  mrg /* Set ARG_SIZE to be the data block align for OMP_TASK GS.  */
   4471  1.1  mrg 
   4472  1.1  mrg static inline void
   4473  1.1  mrg gimple_omp_task_set_arg_align (gimple gs, tree arg_align)
   4474  1.1  mrg {
   4475  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_TASK);
   4476  1.1  mrg   gs->gimple_omp_task.arg_align = arg_align;
   4477  1.1  mrg }
   4478  1.1  mrg 
   4479  1.1  mrg 
   4480  1.1  mrg /* Return the clauses associated with OMP_SINGLE GS.  */
   4481  1.1  mrg 
   4482  1.1  mrg static inline tree
   4483  1.1  mrg gimple_omp_single_clauses (const_gimple gs)
   4484  1.1  mrg {
   4485  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SINGLE);
   4486  1.1  mrg   return gs->gimple_omp_single.clauses;
   4487  1.1  mrg }
   4488  1.1  mrg 
   4489  1.1  mrg 
   4490  1.1  mrg /* Return a pointer to the clauses associated with OMP_SINGLE GS.  */
   4491  1.1  mrg 
   4492  1.1  mrg static inline tree *
   4493  1.1  mrg gimple_omp_single_clauses_ptr (gimple gs)
   4494  1.1  mrg {
   4495  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SINGLE);
   4496  1.1  mrg   return &gs->gimple_omp_single.clauses;
   4497  1.1  mrg }
   4498  1.1  mrg 
   4499  1.1  mrg 
   4500  1.1  mrg /* Set CLAUSES to be the clauses associated with OMP_SINGLE GS.  */
   4501  1.1  mrg 
   4502  1.1  mrg static inline void
   4503  1.1  mrg gimple_omp_single_set_clauses (gimple gs, tree clauses)
   4504  1.1  mrg {
   4505  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SINGLE);
   4506  1.1  mrg   gs->gimple_omp_single.clauses = clauses;
   4507  1.1  mrg }
   4508  1.1  mrg 
   4509  1.1  mrg 
   4510  1.1  mrg /* Return the clauses associated with OMP_SECTIONS GS.  */
   4511  1.1  mrg 
   4512  1.1  mrg static inline tree
   4513  1.1  mrg gimple_omp_sections_clauses (const_gimple gs)
   4514  1.1  mrg {
   4515  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4516  1.1  mrg   return gs->gimple_omp_sections.clauses;
   4517  1.1  mrg }
   4518  1.1  mrg 
   4519  1.1  mrg 
   4520  1.1  mrg /* Return a pointer to the clauses associated with OMP_SECTIONS GS.  */
   4521  1.1  mrg 
   4522  1.1  mrg static inline tree *
   4523  1.1  mrg gimple_omp_sections_clauses_ptr (gimple gs)
   4524  1.1  mrg {
   4525  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4526  1.1  mrg   return &gs->gimple_omp_sections.clauses;
   4527  1.1  mrg }
   4528  1.1  mrg 
   4529  1.1  mrg 
   4530  1.1  mrg /* Set CLAUSES to be the set of clauses associated with OMP_SECTIONS
   4531  1.1  mrg    GS.  */
   4532  1.1  mrg 
   4533  1.1  mrg static inline void
   4534  1.1  mrg gimple_omp_sections_set_clauses (gimple gs, tree clauses)
   4535  1.1  mrg {
   4536  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4537  1.1  mrg   gs->gimple_omp_sections.clauses = clauses;
   4538  1.1  mrg }
   4539  1.1  mrg 
   4540  1.1  mrg 
   4541  1.1  mrg /* Return the control variable associated with the GIMPLE_OMP_SECTIONS
   4542  1.1  mrg    in GS.  */
   4543  1.1  mrg 
   4544  1.1  mrg static inline tree
   4545  1.1  mrg gimple_omp_sections_control (const_gimple gs)
   4546  1.1  mrg {
   4547  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4548  1.1  mrg   return gs->gimple_omp_sections.control;
   4549  1.1  mrg }
   4550  1.1  mrg 
   4551  1.1  mrg 
   4552  1.1  mrg /* Return a pointer to the clauses associated with the GIMPLE_OMP_SECTIONS
   4553  1.1  mrg    GS.  */
   4554  1.1  mrg 
   4555  1.1  mrg static inline tree *
   4556  1.1  mrg gimple_omp_sections_control_ptr (gimple gs)
   4557  1.1  mrg {
   4558  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4559  1.1  mrg   return &gs->gimple_omp_sections.control;
   4560  1.1  mrg }
   4561  1.1  mrg 
   4562  1.1  mrg 
   4563  1.1  mrg /* Set CONTROL to be the set of clauses associated with the
   4564  1.1  mrg    GIMPLE_OMP_SECTIONS in GS.  */
   4565  1.1  mrg 
   4566  1.1  mrg static inline void
   4567  1.1  mrg gimple_omp_sections_set_control (gimple gs, tree control)
   4568  1.1  mrg {
   4569  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_SECTIONS);
   4570  1.1  mrg   gs->gimple_omp_sections.control = control;
   4571  1.1  mrg }
   4572  1.1  mrg 
   4573  1.1  mrg 
   4574  1.1  mrg /* Set COND to be the condition code for OMP_FOR GS.  */
   4575  1.1  mrg 
   4576  1.1  mrg static inline void
   4577  1.1  mrg gimple_omp_for_set_cond (gimple gs, size_t i, enum tree_code cond)
   4578  1.1  mrg {
   4579  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4580  1.3  mrg   gcc_gimple_checking_assert (TREE_CODE_CLASS (cond) == tcc_comparison
   4581  1.3  mrg 			      && i < gs->gimple_omp_for.collapse);
   4582  1.1  mrg   gs->gimple_omp_for.iter[i].cond = cond;
   4583  1.1  mrg }
   4584  1.1  mrg 
   4585  1.1  mrg 
   4586  1.1  mrg /* Return the condition code associated with OMP_FOR GS.  */
   4587  1.1  mrg 
   4588  1.1  mrg static inline enum tree_code
   4589  1.1  mrg gimple_omp_for_cond (const_gimple gs, size_t i)
   4590  1.1  mrg {
   4591  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_OMP_FOR);
   4592  1.3  mrg   gcc_gimple_checking_assert (i < gs->gimple_omp_for.collapse);
   4593  1.1  mrg   return gs->gimple_omp_for.iter[i].cond;
   4594  1.1  mrg }
   4595  1.1  mrg 
   4596  1.1  mrg 
   4597  1.1  mrg /* Set the value being stored in an atomic store.  */
   4598  1.1  mrg 
   4599  1.1  mrg static inline void
   4600  1.1  mrg gimple_omp_atomic_store_set_val (gimple g, tree val)
   4601  1.1  mrg {
   4602  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
   4603  1.1  mrg   g->gimple_omp_atomic_store.val = val;
   4604  1.1  mrg }
   4605  1.1  mrg 
   4606  1.1  mrg 
   4607  1.1  mrg /* Return the value being stored in an atomic store.  */
   4608  1.1  mrg 
   4609  1.1  mrg static inline tree
   4610  1.1  mrg gimple_omp_atomic_store_val (const_gimple g)
   4611  1.1  mrg {
   4612  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
   4613  1.1  mrg   return g->gimple_omp_atomic_store.val;
   4614  1.1  mrg }
   4615  1.1  mrg 
   4616  1.1  mrg 
   4617  1.1  mrg /* Return a pointer to the value being stored in an atomic store.  */
   4618  1.1  mrg 
   4619  1.1  mrg static inline tree *
   4620  1.1  mrg gimple_omp_atomic_store_val_ptr (gimple g)
   4621  1.1  mrg {
   4622  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
   4623  1.1  mrg   return &g->gimple_omp_atomic_store.val;
   4624  1.1  mrg }
   4625  1.1  mrg 
   4626  1.1  mrg 
   4627  1.1  mrg /* Set the LHS of an atomic load.  */
   4628  1.1  mrg 
   4629  1.1  mrg static inline void
   4630  1.1  mrg gimple_omp_atomic_load_set_lhs (gimple g, tree lhs)
   4631  1.1  mrg {
   4632  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4633  1.1  mrg   g->gimple_omp_atomic_load.lhs = lhs;
   4634  1.1  mrg }
   4635  1.1  mrg 
   4636  1.1  mrg 
   4637  1.1  mrg /* Get the LHS of an atomic load.  */
   4638  1.1  mrg 
   4639  1.1  mrg static inline tree
   4640  1.1  mrg gimple_omp_atomic_load_lhs (const_gimple g)
   4641  1.1  mrg {
   4642  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4643  1.1  mrg   return g->gimple_omp_atomic_load.lhs;
   4644  1.1  mrg }
   4645  1.1  mrg 
   4646  1.1  mrg 
   4647  1.1  mrg /* Return a pointer to the LHS of an atomic load.  */
   4648  1.1  mrg 
   4649  1.1  mrg static inline tree *
   4650  1.1  mrg gimple_omp_atomic_load_lhs_ptr (gimple g)
   4651  1.1  mrg {
   4652  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4653  1.1  mrg   return &g->gimple_omp_atomic_load.lhs;
   4654  1.1  mrg }
   4655  1.1  mrg 
   4656  1.1  mrg 
   4657  1.1  mrg /* Set the RHS of an atomic load.  */
   4658  1.1  mrg 
   4659  1.1  mrg static inline void
   4660  1.1  mrg gimple_omp_atomic_load_set_rhs (gimple g, tree rhs)
   4661  1.1  mrg {
   4662  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4663  1.1  mrg   g->gimple_omp_atomic_load.rhs = rhs;
   4664  1.1  mrg }
   4665  1.1  mrg 
   4666  1.1  mrg 
   4667  1.1  mrg /* Get the RHS of an atomic load.  */
   4668  1.1  mrg 
   4669  1.1  mrg static inline tree
   4670  1.1  mrg gimple_omp_atomic_load_rhs (const_gimple g)
   4671  1.1  mrg {
   4672  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4673  1.1  mrg   return g->gimple_omp_atomic_load.rhs;
   4674  1.1  mrg }
   4675  1.1  mrg 
   4676  1.1  mrg 
   4677  1.1  mrg /* Return a pointer to the RHS of an atomic load.  */
   4678  1.1  mrg 
   4679  1.1  mrg static inline tree *
   4680  1.1  mrg gimple_omp_atomic_load_rhs_ptr (gimple g)
   4681  1.1  mrg {
   4682  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_LOAD);
   4683  1.1  mrg   return &g->gimple_omp_atomic_load.rhs;
   4684  1.1  mrg }
   4685  1.1  mrg 
   4686  1.1  mrg 
   4687  1.1  mrg /* Get the definition of the control variable in a GIMPLE_OMP_CONTINUE.  */
   4688  1.1  mrg 
   4689  1.1  mrg static inline tree
   4690  1.1  mrg gimple_omp_continue_control_def (const_gimple g)
   4691  1.1  mrg {
   4692  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4693  1.1  mrg   return g->gimple_omp_continue.control_def;
   4694  1.1  mrg }
   4695  1.1  mrg 
   4696  1.1  mrg /* The same as above, but return the address.  */
   4697  1.1  mrg 
   4698  1.1  mrg static inline tree *
   4699  1.1  mrg gimple_omp_continue_control_def_ptr (gimple g)
   4700  1.1  mrg {
   4701  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4702  1.1  mrg   return &g->gimple_omp_continue.control_def;
   4703  1.1  mrg }
   4704  1.1  mrg 
   4705  1.1  mrg /* Set the definition of the control variable in a GIMPLE_OMP_CONTINUE.  */
   4706  1.1  mrg 
   4707  1.1  mrg static inline void
   4708  1.1  mrg gimple_omp_continue_set_control_def (gimple g, tree def)
   4709  1.1  mrg {
   4710  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4711  1.1  mrg   g->gimple_omp_continue.control_def = def;
   4712  1.1  mrg }
   4713  1.1  mrg 
   4714  1.1  mrg 
   4715  1.1  mrg /* Get the use of the control variable in a GIMPLE_OMP_CONTINUE.  */
   4716  1.1  mrg 
   4717  1.1  mrg static inline tree
   4718  1.1  mrg gimple_omp_continue_control_use (const_gimple g)
   4719  1.1  mrg {
   4720  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4721  1.1  mrg   return g->gimple_omp_continue.control_use;
   4722  1.1  mrg }
   4723  1.1  mrg 
   4724  1.1  mrg 
   4725  1.1  mrg /* The same as above, but return the address.  */
   4726  1.1  mrg 
   4727  1.1  mrg static inline tree *
   4728  1.1  mrg gimple_omp_continue_control_use_ptr (gimple g)
   4729  1.1  mrg {
   4730  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4731  1.1  mrg   return &g->gimple_omp_continue.control_use;
   4732  1.1  mrg }
   4733  1.1  mrg 
   4734  1.1  mrg 
   4735  1.1  mrg /* Set the use of the control variable in a GIMPLE_OMP_CONTINUE.  */
   4736  1.1  mrg 
   4737  1.1  mrg static inline void
   4738  1.1  mrg gimple_omp_continue_set_control_use (gimple g, tree use)
   4739  1.1  mrg {
   4740  1.1  mrg   GIMPLE_CHECK (g, GIMPLE_OMP_CONTINUE);
   4741  1.1  mrg   g->gimple_omp_continue.control_use = use;
   4742  1.1  mrg }
   4743  1.1  mrg 
   4744  1.3  mrg /* Return a pointer to the body for the GIMPLE_TRANSACTION statement GS.  */
   4745  1.3  mrg 
   4746  1.3  mrg static inline gimple_seq *
   4747  1.3  mrg gimple_transaction_body_ptr (gimple gs)
   4748  1.3  mrg {
   4749  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4750  1.3  mrg   return &gs->gimple_transaction.body;
   4751  1.3  mrg }
   4752  1.3  mrg 
   4753  1.3  mrg /* Return the body for the GIMPLE_TRANSACTION statement GS.  */
   4754  1.3  mrg 
   4755  1.3  mrg static inline gimple_seq
   4756  1.3  mrg gimple_transaction_body (gimple gs)
   4757  1.3  mrg {
   4758  1.3  mrg   return *gimple_transaction_body_ptr (gs);
   4759  1.3  mrg }
   4760  1.3  mrg 
   4761  1.3  mrg /* Return the label associated with a GIMPLE_TRANSACTION.  */
   4762  1.3  mrg 
   4763  1.3  mrg static inline tree
   4764  1.3  mrg gimple_transaction_label (const_gimple gs)
   4765  1.3  mrg {
   4766  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4767  1.3  mrg   return gs->gimple_transaction.label;
   4768  1.3  mrg }
   4769  1.3  mrg 
   4770  1.3  mrg static inline tree *
   4771  1.3  mrg gimple_transaction_label_ptr (gimple gs)
   4772  1.3  mrg {
   4773  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4774  1.3  mrg   return &gs->gimple_transaction.label;
   4775  1.3  mrg }
   4776  1.3  mrg 
   4777  1.3  mrg /* Return the subcode associated with a GIMPLE_TRANSACTION.  */
   4778  1.3  mrg 
   4779  1.3  mrg static inline unsigned int
   4780  1.3  mrg gimple_transaction_subcode (const_gimple gs)
   4781  1.3  mrg {
   4782  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4783  1.3  mrg   return gs->gsbase.subcode;
   4784  1.3  mrg }
   4785  1.3  mrg 
   4786  1.3  mrg /* Set BODY to be the body for the GIMPLE_TRANSACTION statement GS.  */
   4787  1.3  mrg 
   4788  1.3  mrg static inline void
   4789  1.3  mrg gimple_transaction_set_body (gimple gs, gimple_seq body)
   4790  1.3  mrg {
   4791  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4792  1.3  mrg   gs->gimple_transaction.body = body;
   4793  1.3  mrg }
   4794  1.3  mrg 
   4795  1.3  mrg /* Set the label associated with a GIMPLE_TRANSACTION.  */
   4796  1.3  mrg 
   4797  1.3  mrg static inline void
   4798  1.3  mrg gimple_transaction_set_label (gimple gs, tree label)
   4799  1.3  mrg {
   4800  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4801  1.3  mrg   gs->gimple_transaction.label = label;
   4802  1.3  mrg }
   4803  1.3  mrg 
   4804  1.3  mrg /* Set the subcode associated with a GIMPLE_TRANSACTION.  */
   4805  1.3  mrg 
   4806  1.3  mrg static inline void
   4807  1.3  mrg gimple_transaction_set_subcode (gimple gs, unsigned int subcode)
   4808  1.3  mrg {
   4809  1.3  mrg   GIMPLE_CHECK (gs, GIMPLE_TRANSACTION);
   4810  1.3  mrg   gs->gsbase.subcode = subcode;
   4811  1.3  mrg }
   4812  1.3  mrg 
   4813  1.1  mrg 
   4814  1.1  mrg /* Return a pointer to the return value for GIMPLE_RETURN GS.  */
   4815  1.1  mrg 
   4816  1.1  mrg static inline tree *
   4817  1.1  mrg gimple_return_retval_ptr (const_gimple gs)
   4818  1.1  mrg {
   4819  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_RETURN);
   4820  1.1  mrg   return gimple_op_ptr (gs, 0);
   4821  1.1  mrg }
   4822  1.1  mrg 
   4823  1.1  mrg /* Return the return value for GIMPLE_RETURN GS.  */
   4824  1.1  mrg 
   4825  1.1  mrg static inline tree
   4826  1.1  mrg gimple_return_retval (const_gimple gs)
   4827  1.1  mrg {
   4828  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_RETURN);
   4829  1.1  mrg   return gimple_op (gs, 0);
   4830  1.1  mrg }
   4831  1.1  mrg 
   4832  1.1  mrg 
   4833  1.1  mrg /* Set RETVAL to be the return value for GIMPLE_RETURN GS.  */
   4834  1.1  mrg 
   4835  1.1  mrg static inline void
   4836  1.1  mrg gimple_return_set_retval (gimple gs, tree retval)
   4837  1.1  mrg {
   4838  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_RETURN);
   4839  1.1  mrg   gimple_set_op (gs, 0, retval);
   4840  1.1  mrg }
   4841  1.1  mrg 
   4842  1.1  mrg 
   4843  1.3  mrg /* Returns true when the gimple statement STMT is any of the OpenMP types.  */
   4844  1.1  mrg 
   4845  1.1  mrg #define CASE_GIMPLE_OMP				\
   4846  1.1  mrg     case GIMPLE_OMP_PARALLEL:			\
   4847  1.1  mrg     case GIMPLE_OMP_TASK:			\
   4848  1.1  mrg     case GIMPLE_OMP_FOR:			\
   4849  1.1  mrg     case GIMPLE_OMP_SECTIONS:			\
   4850  1.1  mrg     case GIMPLE_OMP_SECTIONS_SWITCH:		\
   4851  1.1  mrg     case GIMPLE_OMP_SINGLE:			\
   4852  1.1  mrg     case GIMPLE_OMP_SECTION:			\
   4853  1.1  mrg     case GIMPLE_OMP_MASTER:			\
   4854  1.1  mrg     case GIMPLE_OMP_ORDERED:			\
   4855  1.1  mrg     case GIMPLE_OMP_CRITICAL:			\
   4856  1.1  mrg     case GIMPLE_OMP_RETURN:			\
   4857  1.1  mrg     case GIMPLE_OMP_ATOMIC_LOAD:		\
   4858  1.1  mrg     case GIMPLE_OMP_ATOMIC_STORE:		\
   4859  1.1  mrg     case GIMPLE_OMP_CONTINUE
   4860  1.1  mrg 
   4861  1.1  mrg static inline bool
   4862  1.1  mrg is_gimple_omp (const_gimple stmt)
   4863  1.1  mrg {
   4864  1.1  mrg   switch (gimple_code (stmt))
   4865  1.1  mrg     {
   4866  1.1  mrg     CASE_GIMPLE_OMP:
   4867  1.1  mrg       return true;
   4868  1.1  mrg     default:
   4869  1.1  mrg       return false;
   4870  1.1  mrg     }
   4871  1.1  mrg }
   4872  1.1  mrg 
   4873  1.1  mrg 
   4874  1.1  mrg /* Returns TRUE if statement G is a GIMPLE_NOP.  */
   4875  1.1  mrg 
   4876  1.1  mrg static inline bool
   4877  1.1  mrg gimple_nop_p (const_gimple g)
   4878  1.1  mrg {
   4879  1.1  mrg   return gimple_code (g) == GIMPLE_NOP;
   4880  1.1  mrg }
   4881  1.1  mrg 
   4882  1.1  mrg 
   4883  1.1  mrg /* Return true if GS is a GIMPLE_RESX.  */
   4884  1.1  mrg 
   4885  1.1  mrg static inline bool
   4886  1.1  mrg is_gimple_resx (const_gimple gs)
   4887  1.1  mrg {
   4888  1.1  mrg   return gimple_code (gs) == GIMPLE_RESX;
   4889  1.1  mrg }
   4890  1.1  mrg 
   4891  1.1  mrg /* Return the predictor of GIMPLE_PREDICT statement GS.  */
   4892  1.1  mrg 
   4893  1.1  mrg static inline enum br_predictor
   4894  1.1  mrg gimple_predict_predictor (gimple gs)
   4895  1.1  mrg {
   4896  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PREDICT);
   4897  1.1  mrg   return (enum br_predictor) (gs->gsbase.subcode & ~GF_PREDICT_TAKEN);
   4898  1.1  mrg }
   4899  1.1  mrg 
   4900  1.1  mrg 
   4901  1.1  mrg /* Set the predictor of GIMPLE_PREDICT statement GS to PREDICT.  */
   4902  1.1  mrg 
   4903  1.1  mrg static inline void
   4904  1.1  mrg gimple_predict_set_predictor (gimple gs, enum br_predictor predictor)
   4905  1.1  mrg {
   4906  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PREDICT);
   4907  1.1  mrg   gs->gsbase.subcode = (gs->gsbase.subcode & GF_PREDICT_TAKEN)
   4908  1.1  mrg 		       | (unsigned) predictor;
   4909  1.1  mrg }
   4910  1.1  mrg 
   4911  1.1  mrg 
   4912  1.1  mrg /* Return the outcome of GIMPLE_PREDICT statement GS.  */
   4913  1.1  mrg 
   4914  1.1  mrg static inline enum prediction
   4915  1.1  mrg gimple_predict_outcome (gimple gs)
   4916  1.1  mrg {
   4917  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PREDICT);
   4918  1.1  mrg   return (gs->gsbase.subcode & GF_PREDICT_TAKEN) ? TAKEN : NOT_TAKEN;
   4919  1.1  mrg }
   4920  1.1  mrg 
   4921  1.1  mrg 
   4922  1.1  mrg /* Set the outcome of GIMPLE_PREDICT statement GS to OUTCOME.  */
   4923  1.1  mrg 
   4924  1.1  mrg static inline void
   4925  1.1  mrg gimple_predict_set_outcome (gimple gs, enum prediction outcome)
   4926  1.1  mrg {
   4927  1.1  mrg   GIMPLE_CHECK (gs, GIMPLE_PREDICT);
   4928  1.1  mrg   if (outcome == TAKEN)
   4929  1.1  mrg     gs->gsbase.subcode |= GF_PREDICT_TAKEN;
   4930  1.1  mrg   else
   4931  1.1  mrg     gs->gsbase.subcode &= ~GF_PREDICT_TAKEN;
   4932  1.1  mrg }
   4933  1.1  mrg 
   4934  1.1  mrg 
   4935  1.1  mrg /* Return the type of the main expression computed by STMT.  Return
   4936  1.1  mrg    void_type_node if the statement computes nothing.  */
   4937  1.1  mrg 
   4938  1.1  mrg static inline tree
   4939  1.1  mrg gimple_expr_type (const_gimple stmt)
   4940  1.1  mrg {
   4941  1.1  mrg   enum gimple_code code = gimple_code (stmt);
   4942  1.1  mrg 
   4943  1.1  mrg   if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL)
   4944  1.1  mrg     {
   4945  1.1  mrg       tree type;
   4946  1.1  mrg       /* In general we want to pass out a type that can be substituted
   4947  1.1  mrg          for both the RHS and the LHS types if there is a possibly
   4948  1.1  mrg 	 useless conversion involved.  That means returning the
   4949  1.1  mrg 	 original RHS type as far as we can reconstruct it.  */
   4950  1.1  mrg       if (code == GIMPLE_CALL)
   4951  1.1  mrg 	type = gimple_call_return_type (stmt);
   4952  1.1  mrg       else
   4953  1.1  mrg 	switch (gimple_assign_rhs_code (stmt))
   4954  1.1  mrg 	  {
   4955  1.1  mrg 	  case POINTER_PLUS_EXPR:
   4956  1.1  mrg 	    type = TREE_TYPE (gimple_assign_rhs1 (stmt));
   4957  1.1  mrg 	    break;
   4958  1.1  mrg 
   4959  1.1  mrg 	  default:
   4960  1.1  mrg 	    /* As fallback use the type of the LHS.  */
   4961  1.1  mrg 	    type = TREE_TYPE (gimple_get_lhs (stmt));
   4962  1.1  mrg 	    break;
   4963  1.1  mrg 	  }
   4964  1.1  mrg       return type;
   4965  1.1  mrg     }
   4966  1.1  mrg   else if (code == GIMPLE_COND)
   4967  1.1  mrg     return boolean_type_node;
   4968  1.1  mrg   else
   4969  1.1  mrg     return void_type_node;
   4970  1.1  mrg }
   4971  1.1  mrg 
   4972  1.3  mrg /* Return true if TYPE is a suitable type for a scalar register variable.  */
   4973  1.3  mrg 
   4974  1.3  mrg static inline bool
   4975  1.3  mrg is_gimple_reg_type (tree type)
   4976  1.3  mrg {
   4977  1.3  mrg   return !AGGREGATE_TYPE_P (type);
   4978  1.3  mrg }
   4979  1.1  mrg 
   4980  1.1  mrg /* Return a new iterator pointing to GIMPLE_SEQ's first statement.  */
   4981  1.1  mrg 
   4982  1.1  mrg static inline gimple_stmt_iterator
   4983  1.3  mrg gsi_start_1 (gimple_seq *seq)
   4984  1.1  mrg {
   4985  1.1  mrg   gimple_stmt_iterator i;
   4986  1.1  mrg 
   4987  1.3  mrg   i.ptr = gimple_seq_first (*seq);
   4988  1.1  mrg   i.seq = seq;
   4989  1.3  mrg   i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
   4990  1.1  mrg 
   4991  1.1  mrg   return i;
   4992  1.1  mrg }
   4993  1.1  mrg 
   4994  1.3  mrg #define gsi_start(x) gsi_start_1(&(x))
   4995  1.3  mrg 
   4996  1.3  mrg static inline gimple_stmt_iterator
   4997  1.3  mrg gsi_none (void)
   4998  1.3  mrg {
   4999  1.3  mrg   gimple_stmt_iterator i;
   5000  1.3  mrg   i.ptr = NULL;
   5001  1.3  mrg   i.seq = NULL;
   5002  1.3  mrg   i.bb = NULL;
   5003  1.3  mrg   return i;
   5004  1.3  mrg }
   5005  1.1  mrg 
   5006  1.1  mrg /* Return a new iterator pointing to the first statement in basic block BB.  */
   5007  1.1  mrg 
   5008  1.1  mrg static inline gimple_stmt_iterator
   5009  1.1  mrg gsi_start_bb (basic_block bb)
   5010  1.1  mrg {
   5011  1.1  mrg   gimple_stmt_iterator i;
   5012  1.3  mrg   gimple_seq *seq;
   5013  1.1  mrg 
   5014  1.3  mrg   seq = bb_seq_addr (bb);
   5015  1.3  mrg   i.ptr = gimple_seq_first (*seq);
   5016  1.1  mrg   i.seq = seq;
   5017  1.1  mrg   i.bb = bb;
   5018  1.1  mrg 
   5019  1.1  mrg   return i;
   5020  1.1  mrg }
   5021  1.1  mrg 
   5022  1.1  mrg 
   5023  1.1  mrg /* Return a new iterator initially pointing to GIMPLE_SEQ's last statement.  */
   5024  1.1  mrg 
   5025  1.1  mrg static inline gimple_stmt_iterator
   5026  1.3  mrg gsi_last_1 (gimple_seq *seq)
   5027  1.1  mrg {
   5028  1.1  mrg   gimple_stmt_iterator i;
   5029  1.1  mrg 
   5030  1.3  mrg   i.ptr = gimple_seq_last (*seq);
   5031  1.1  mrg   i.seq = seq;
   5032  1.3  mrg   i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
   5033  1.1  mrg 
   5034  1.1  mrg   return i;
   5035  1.1  mrg }
   5036  1.1  mrg 
   5037  1.3  mrg #define gsi_last(x) gsi_last_1(&(x))
   5038  1.1  mrg 
   5039  1.1  mrg /* Return a new iterator pointing to the last statement in basic block BB.  */
   5040  1.1  mrg 
   5041  1.1  mrg static inline gimple_stmt_iterator
   5042  1.1  mrg gsi_last_bb (basic_block bb)
   5043  1.1  mrg {
   5044  1.1  mrg   gimple_stmt_iterator i;
   5045  1.3  mrg   gimple_seq *seq;
   5046  1.1  mrg 
   5047  1.3  mrg   seq = bb_seq_addr (bb);
   5048  1.3  mrg   i.ptr = gimple_seq_last (*seq);
   5049  1.1  mrg   i.seq = seq;
   5050  1.1  mrg   i.bb = bb;
   5051  1.1  mrg 
   5052  1.1  mrg   return i;
   5053  1.1  mrg }
   5054  1.1  mrg 
   5055  1.1  mrg 
   5056  1.1  mrg /* Return true if I is at the end of its sequence.  */
   5057  1.1  mrg 
   5058  1.1  mrg static inline bool
   5059  1.1  mrg gsi_end_p (gimple_stmt_iterator i)
   5060  1.1  mrg {
   5061  1.1  mrg   return i.ptr == NULL;
   5062  1.1  mrg }
   5063  1.1  mrg 
   5064  1.1  mrg 
   5065  1.1  mrg /* Return true if I is one statement before the end of its sequence.  */
   5066  1.1  mrg 
   5067  1.1  mrg static inline bool
   5068  1.1  mrg gsi_one_before_end_p (gimple_stmt_iterator i)
   5069  1.1  mrg {
   5070  1.3  mrg   return i.ptr != NULL && i.ptr->gsbase.next == NULL;
   5071  1.1  mrg }
   5072  1.1  mrg 
   5073  1.1  mrg 
   5074  1.1  mrg /* Advance the iterator to the next gimple statement.  */
   5075  1.1  mrg 
   5076  1.1  mrg static inline void
   5077  1.1  mrg gsi_next (gimple_stmt_iterator *i)
   5078  1.1  mrg {
   5079  1.3  mrg   i->ptr = i->ptr->gsbase.next;
   5080  1.1  mrg }
   5081  1.1  mrg 
   5082  1.1  mrg /* Advance the iterator to the previous gimple statement.  */
   5083  1.1  mrg 
   5084  1.1  mrg static inline void
   5085  1.1  mrg gsi_prev (gimple_stmt_iterator *i)
   5086  1.1  mrg {
   5087  1.3  mrg   gimple prev = i->ptr->gsbase.prev;
   5088  1.3  mrg   if (prev->gsbase.next)
   5089  1.3  mrg     i->ptr = prev;
   5090  1.3  mrg   else
   5091  1.3  mrg     i->ptr = NULL;
   5092  1.1  mrg }
   5093  1.1  mrg 
   5094  1.1  mrg /* Return the current stmt.  */
   5095  1.1  mrg 
   5096  1.1  mrg static inline gimple
   5097  1.1  mrg gsi_stmt (gimple_stmt_iterator i)
   5098  1.1  mrg {
   5099  1.3  mrg   return i.ptr;
   5100  1.1  mrg }
   5101  1.1  mrg 
   5102  1.1  mrg /* Return a block statement iterator that points to the first non-label
   5103  1.1  mrg    statement in block BB.  */
   5104  1.1  mrg 
   5105  1.1  mrg static inline gimple_stmt_iterator
   5106  1.1  mrg gsi_after_labels (basic_block bb)
   5107  1.1  mrg {
   5108  1.1  mrg   gimple_stmt_iterator gsi = gsi_start_bb (bb);
   5109  1.1  mrg 
   5110  1.1  mrg   while (!gsi_end_p (gsi) && gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL)
   5111  1.1  mrg     gsi_next (&gsi);
   5112  1.1  mrg 
   5113  1.1  mrg   return gsi;
   5114  1.1  mrg }
   5115  1.1  mrg 
   5116  1.1  mrg /* Advance the iterator to the next non-debug gimple statement.  */
   5117  1.1  mrg 
   5118  1.1  mrg static inline void
   5119  1.1  mrg gsi_next_nondebug (gimple_stmt_iterator *i)
   5120  1.1  mrg {
   5121  1.1  mrg   do
   5122  1.1  mrg     {
   5123  1.1  mrg       gsi_next (i);
   5124  1.1  mrg     }
   5125  1.1  mrg   while (!gsi_end_p (*i) && is_gimple_debug (gsi_stmt (*i)));
   5126  1.1  mrg }
   5127  1.1  mrg 
   5128  1.1  mrg /* Advance the iterator to the next non-debug gimple statement.  */
   5129  1.1  mrg 
   5130  1.1  mrg static inline void
   5131  1.1  mrg gsi_prev_nondebug (gimple_stmt_iterator *i)
   5132  1.1  mrg {
   5133  1.1  mrg   do
   5134  1.1  mrg     {
   5135  1.1  mrg       gsi_prev (i);
   5136  1.1  mrg     }
   5137  1.1  mrg   while (!gsi_end_p (*i) && is_gimple_debug (gsi_stmt (*i)));
   5138  1.1  mrg }
   5139  1.1  mrg 
   5140  1.1  mrg /* Return a new iterator pointing to the first non-debug statement in
   5141  1.1  mrg    basic block BB.  */
   5142  1.1  mrg 
   5143  1.1  mrg static inline gimple_stmt_iterator
   5144  1.1  mrg gsi_start_nondebug_bb (basic_block bb)
   5145  1.1  mrg {
   5146  1.1  mrg   gimple_stmt_iterator i = gsi_start_bb (bb);
   5147  1.1  mrg 
   5148  1.1  mrg   if (!gsi_end_p (i) && is_gimple_debug (gsi_stmt (i)))
   5149  1.1  mrg     gsi_next_nondebug (&i);
   5150  1.1  mrg 
   5151  1.1  mrg   return i;
   5152  1.1  mrg }
   5153  1.1  mrg 
   5154  1.1  mrg /* Return a new iterator pointing to the last non-debug statement in
   5155  1.1  mrg    basic block BB.  */
   5156  1.1  mrg 
   5157  1.1  mrg static inline gimple_stmt_iterator
   5158  1.1  mrg gsi_last_nondebug_bb (basic_block bb)
   5159  1.1  mrg {
   5160  1.1  mrg   gimple_stmt_iterator i = gsi_last_bb (bb);
   5161  1.1  mrg 
   5162  1.1  mrg   if (!gsi_end_p (i) && is_gimple_debug (gsi_stmt (i)))
   5163  1.1  mrg     gsi_prev_nondebug (&i);
   5164  1.1  mrg 
   5165  1.1  mrg   return i;
   5166  1.1  mrg }
   5167  1.1  mrg 
   5168  1.1  mrg 
   5169  1.1  mrg /* Return the basic block associated with this iterator.  */
   5170  1.1  mrg 
   5171  1.1  mrg static inline basic_block
   5172  1.1  mrg gsi_bb (gimple_stmt_iterator i)
   5173  1.1  mrg {
   5174  1.1  mrg   return i.bb;
   5175  1.1  mrg }
   5176  1.1  mrg 
   5177  1.1  mrg 
   5178  1.1  mrg /* Return the sequence associated with this iterator.  */
   5179  1.1  mrg 
   5180  1.1  mrg static inline gimple_seq
   5181  1.1  mrg gsi_seq (gimple_stmt_iterator i)
   5182  1.1  mrg {
   5183  1.3  mrg   return *i.seq;
   5184  1.1  mrg }
   5185  1.1  mrg 
   5186  1.1  mrg 
   5187  1.1  mrg enum gsi_iterator_update
   5188  1.1  mrg {
   5189  1.1  mrg   GSI_NEW_STMT,		/* Only valid when single statement is added, move
   5190  1.1  mrg 			   iterator to it.  */
   5191  1.1  mrg   GSI_SAME_STMT,	/* Leave the iterator at the same statement.  */
   5192  1.1  mrg   GSI_CONTINUE_LINKING	/* Move iterator to whatever position is suitable
   5193  1.1  mrg 			   for linking other statements in the same
   5194  1.1  mrg 			   direction.  */
   5195  1.1  mrg };
   5196  1.1  mrg 
   5197  1.1  mrg /* In gimple-iterator.c  */
   5198  1.1  mrg gimple_stmt_iterator gsi_start_phis (basic_block);
   5199  1.1  mrg gimple_seq gsi_split_seq_after (gimple_stmt_iterator);
   5200  1.3  mrg void gsi_split_seq_before (gimple_stmt_iterator *, gimple_seq *);
   5201  1.3  mrg void gsi_set_stmt (gimple_stmt_iterator *, gimple);
   5202  1.1  mrg void gsi_replace (gimple_stmt_iterator *, gimple, bool);
   5203  1.3  mrg void gsi_replace_with_seq (gimple_stmt_iterator *, gimple_seq, bool);
   5204  1.1  mrg void gsi_insert_before (gimple_stmt_iterator *, gimple,
   5205  1.1  mrg 			enum gsi_iterator_update);
   5206  1.1  mrg void gsi_insert_before_without_update (gimple_stmt_iterator *, gimple,
   5207  1.1  mrg                                        enum gsi_iterator_update);
   5208  1.1  mrg void gsi_insert_seq_before (gimple_stmt_iterator *, gimple_seq,
   5209  1.1  mrg                             enum gsi_iterator_update);
   5210  1.1  mrg void gsi_insert_seq_before_without_update (gimple_stmt_iterator *, gimple_seq,
   5211  1.1  mrg                                            enum gsi_iterator_update);
   5212  1.1  mrg void gsi_insert_after (gimple_stmt_iterator *, gimple,
   5213  1.1  mrg 		       enum gsi_iterator_update);
   5214  1.1  mrg void gsi_insert_after_without_update (gimple_stmt_iterator *, gimple,
   5215  1.1  mrg                                       enum gsi_iterator_update);
   5216  1.1  mrg void gsi_insert_seq_after (gimple_stmt_iterator *, gimple_seq,
   5217  1.1  mrg 			   enum gsi_iterator_update);
   5218  1.1  mrg void gsi_insert_seq_after_without_update (gimple_stmt_iterator *, gimple_seq,
   5219  1.1  mrg                                           enum gsi_iterator_update);
   5220  1.3  mrg bool gsi_remove (gimple_stmt_iterator *, bool);
   5221  1.1  mrg gimple_stmt_iterator gsi_for_stmt (gimple);
   5222  1.1  mrg void gsi_move_after (gimple_stmt_iterator *, gimple_stmt_iterator *);
   5223  1.1  mrg void gsi_move_before (gimple_stmt_iterator *, gimple_stmt_iterator *);
   5224  1.3  mrg void gsi_move_to_bb_end (gimple_stmt_iterator *, basic_block);
   5225  1.1  mrg void gsi_insert_on_edge (edge, gimple);
   5226  1.1  mrg void gsi_insert_seq_on_edge (edge, gimple_seq);
   5227  1.1  mrg basic_block gsi_insert_on_edge_immediate (edge, gimple);
   5228  1.1  mrg basic_block gsi_insert_seq_on_edge_immediate (edge, gimple_seq);
   5229  1.1  mrg void gsi_commit_one_edge_insert (edge, basic_block *);
   5230  1.1  mrg void gsi_commit_edge_inserts (void);
   5231  1.1  mrg gimple gimple_call_copy_skip_args (gimple, bitmap);
   5232  1.1  mrg 
   5233  1.1  mrg 
   5234  1.1  mrg /* Convenience routines to walk all statements of a gimple function.
   5235  1.1  mrg    Note that this is useful exclusively before the code is converted
   5236  1.1  mrg    into SSA form.  Once the program is in SSA form, the standard
   5237  1.1  mrg    operand interface should be used to analyze/modify statements.  */
   5238  1.1  mrg struct walk_stmt_info
   5239  1.1  mrg {
   5240  1.1  mrg   /* Points to the current statement being walked.  */
   5241  1.1  mrg   gimple_stmt_iterator gsi;
   5242  1.1  mrg 
   5243  1.1  mrg   /* Additional data that the callback functions may want to carry
   5244  1.1  mrg      through the recursion.  */
   5245  1.1  mrg   void *info;
   5246  1.1  mrg 
   5247  1.1  mrg   /* Pointer map used to mark visited tree nodes when calling
   5248  1.1  mrg      walk_tree on each operand.  If set to NULL, duplicate tree nodes
   5249  1.1  mrg      will be visited more than once.  */
   5250  1.1  mrg   struct pointer_set_t *pset;
   5251  1.1  mrg 
   5252  1.3  mrg   /* Operand returned by the callbacks.  This is set when calling
   5253  1.3  mrg      walk_gimple_seq.  If the walk_stmt_fn or walk_tree_fn callback
   5254  1.3  mrg      returns non-NULL, this field will contain the tree returned by
   5255  1.3  mrg      the last callback.  */
   5256  1.3  mrg   tree callback_result;
   5257  1.3  mrg 
   5258  1.1  mrg   /* Indicates whether the operand being examined may be replaced
   5259  1.1  mrg      with something that matches is_gimple_val (if true) or something
   5260  1.1  mrg      slightly more complicated (if false).  "Something" technically
   5261  1.1  mrg      means the common subset of is_gimple_lvalue and is_gimple_rhs,
   5262  1.1  mrg      but we never try to form anything more complicated than that, so
   5263  1.1  mrg      we don't bother checking.
   5264  1.1  mrg 
   5265  1.1  mrg      Also note that CALLBACK should update this flag while walking the
   5266  1.1  mrg      sub-expressions of a statement.  For instance, when walking the
   5267  1.1  mrg      statement 'foo (&var)', the flag VAL_ONLY will initially be set
   5268  1.1  mrg      to true, however, when walking &var, the operand of that
   5269  1.1  mrg      ADDR_EXPR does not need to be a GIMPLE value.  */
   5270  1.3  mrg   BOOL_BITFIELD val_only : 1;
   5271  1.1  mrg 
   5272  1.1  mrg   /* True if we are currently walking the LHS of an assignment.  */
   5273  1.3  mrg   BOOL_BITFIELD is_lhs : 1;
   5274  1.1  mrg 
   5275  1.1  mrg   /* Optional.  Set to true by the callback functions if they made any
   5276  1.1  mrg      changes.  */
   5277  1.3  mrg   BOOL_BITFIELD changed : 1;
   5278  1.1  mrg 
   5279  1.1  mrg   /* True if we're interested in location information.  */
   5280  1.3  mrg   BOOL_BITFIELD want_locations : 1;
   5281  1.1  mrg 
   5282  1.3  mrg   /* True if we've removed the statement that was processed.  */
   5283  1.3  mrg   BOOL_BITFIELD removed_stmt : 1;
   5284  1.1  mrg };
   5285  1.1  mrg 
   5286  1.1  mrg /* Callback for walk_gimple_stmt.  Called for every statement found
   5287  1.1  mrg    during traversal.  The first argument points to the statement to
   5288  1.1  mrg    walk.  The second argument is a flag that the callback sets to
   5289  1.1  mrg    'true' if it the callback handled all the operands and
   5290  1.1  mrg    sub-statements of the statement (the default value of this flag is
   5291  1.1  mrg    'false').  The third argument is an anonymous pointer to data
   5292  1.1  mrg    to be used by the callback.  */
   5293  1.1  mrg typedef tree (*walk_stmt_fn) (gimple_stmt_iterator *, bool *,
   5294  1.1  mrg 			      struct walk_stmt_info *);
   5295  1.1  mrg 
   5296  1.1  mrg gimple walk_gimple_seq (gimple_seq, walk_stmt_fn, walk_tree_fn,
   5297  1.1  mrg 		        struct walk_stmt_info *);
   5298  1.3  mrg gimple walk_gimple_seq_mod (gimple_seq *, walk_stmt_fn, walk_tree_fn,
   5299  1.3  mrg 			    struct walk_stmt_info *);
   5300  1.1  mrg tree walk_gimple_stmt (gimple_stmt_iterator *, walk_stmt_fn, walk_tree_fn,
   5301  1.1  mrg 		       struct walk_stmt_info *);
   5302  1.1  mrg tree walk_gimple_op (gimple, walk_tree_fn, struct walk_stmt_info *);
   5303  1.1  mrg 
   5304  1.1  mrg /* Enum and arrays used for allocation stats.  Keep in sync with
   5305  1.1  mrg    gimple.c:gimple_alloc_kind_names.  */
   5306  1.1  mrg enum gimple_alloc_kind
   5307  1.1  mrg {
   5308  1.1  mrg   gimple_alloc_kind_assign,	/* Assignments.  */
   5309  1.1  mrg   gimple_alloc_kind_phi,	/* PHI nodes.  */
   5310  1.1  mrg   gimple_alloc_kind_cond,	/* Conditionals.  */
   5311  1.1  mrg   gimple_alloc_kind_rest,	/* Everything else.  */
   5312  1.1  mrg   gimple_alloc_kind_all
   5313  1.1  mrg };
   5314  1.1  mrg 
   5315  1.1  mrg extern int gimple_alloc_counts[];
   5316  1.1  mrg extern int gimple_alloc_sizes[];
   5317  1.1  mrg 
   5318  1.1  mrg /* Return the allocation kind for a given stmt CODE.  */
   5319  1.1  mrg static inline enum gimple_alloc_kind
   5320  1.1  mrg gimple_alloc_kind (enum gimple_code code)
   5321  1.1  mrg {
   5322  1.1  mrg   switch (code)
   5323  1.1  mrg     {
   5324  1.1  mrg       case GIMPLE_ASSIGN:
   5325  1.1  mrg 	return gimple_alloc_kind_assign;
   5326  1.1  mrg       case GIMPLE_PHI:
   5327  1.1  mrg 	return gimple_alloc_kind_phi;
   5328  1.1  mrg       case GIMPLE_COND:
   5329  1.1  mrg 	return gimple_alloc_kind_cond;
   5330  1.1  mrg       default:
   5331  1.1  mrg 	return gimple_alloc_kind_rest;
   5332  1.1  mrg     }
   5333  1.1  mrg }
   5334  1.1  mrg 
   5335  1.1  mrg extern void dump_gimple_statistics (void);
   5336  1.1  mrg 
   5337  1.3  mrg /* In gimple-fold.c.  */
   5338  1.3  mrg void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree);
   5339  1.3  mrg tree gimple_fold_builtin (gimple);
   5340  1.3  mrg bool fold_stmt (gimple_stmt_iterator *);
   5341  1.3  mrg bool fold_stmt_inplace (gimple_stmt_iterator *);
   5342  1.3  mrg tree get_symbol_constant_value (tree);
   5343  1.3  mrg tree canonicalize_constructor_val (tree, tree);
   5344  1.3  mrg extern tree maybe_fold_and_comparisons (enum tree_code, tree, tree,
   5345  1.3  mrg 					enum tree_code, tree, tree);
   5346  1.3  mrg extern tree maybe_fold_or_comparisons (enum tree_code, tree, tree,
   5347  1.3  mrg 				       enum tree_code, tree, tree);
   5348  1.3  mrg 
   5349  1.3  mrg bool gimple_val_nonnegative_real_p (tree);
   5350  1.1  mrg #endif  /* GCC_GIMPLE_H */
   5351