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