On Tue, 2 Dec 2014, David Malcolm wrote:

> On Tue, 2014-12-02 at 08:49 +0100, Jakub Jelinek wrote:
> Hi!
> > 
> > Here is an attempt to adjust gimple_build_assign* documentation.
> > Ok for trunk?
> > 
> > Note, apparently the documentation has not been adjusted for
> > the gimple -> gassign * etc. changes, David, can you please work on
> > adjusting gimple.texi to match the reality after your changes?
> 
> I went through cfg.texi and gimple.texi updating all of the
> documentation to reflect the changed signatures.
> 
> gimple.texi has numerous overlong lines; I wordwrapped any that I
> touched.
> 
> "make html" succeeds; I visually inspected and sanity-checked the
> built HTML.
> 
> This will have merger conflicts with Jakub's patch, but it should be
> trivial to fix them up.
> 
> OK for trunk?

Ok.

Thanks,
Richard.

> gcc/ChangeLog:
>       * doc/cfg.texi (GIMPLE statement iterators): Add note about
>       gphi_iterator, and use one in the example.
>       * doc/gimple.texi (Tuple specific accessors): Add missing
>       GIMPLE_GOTO section and menu item.
>       (gimple_build_asm, gimple gimple_build_assign_with_ops)
>       gimple_call_mark_uninlinable, gimple_call_cannot_inline_p): Remove
>       description of removed functions.
>       (gimple_build_assign, gimple_build_bind, gimple_build_call,
>       gimple_build_call_from_tree, gimple_build_call_vec,
>       gimple_build_catch, gimple_build_cond,
>       gimple_build_cond_from_tree, gimple_build_debug_bind,
>       gimple_build_eh_filter, gimple_build_label, gimple_build_goto,
>       gimple_build_omp_atomic_load, gimple_build_omp_atomic_store,
>       gimple_build_omp_continue, gimple_build_omp_critical,
>       gimple_build_omp_for, gimple_build_omp_parallel,
>       gimple_build_omp_sections, gimple_build_omp_single,
>       gimple_build_return, gimple_build_resx, gimple_build_switch,
>       gimple_build_try): Update return type within description to
>       reflect changes in gimple.h to using gimple subclasses.
>       (gimple_build_asm_vec): Update return type, params and
>       description.
>       (gimple_asm_ninputs): Update param.
>       (gimple_asm_noutputs, gimple_asm_nclobbers, gimple_asm_input_op
>       gimple_asm_set_input_op, gimple_asm_output_op
>       gimple_asm_set_output_op, gimple_asm_clobber_op,
>       gimple_asm_set_clobber_op, gimple_asm_string,
>       gimple_asm_volatile_p, gimple_asm_set_volatile, gimple_bind_vars,
>       gimple_bind_set_vars, gimple_bind_append_vars, gimple_bind_body,
>       gimple_bind_set_body, gimple_bind_add_stmt, gimple_bind_add_seq,
>       gimple_bind_block, gimple_bind_set_block, gimple_call_set_fn,
>       gimple_call_return_type, gimple_call_set_chain,
>       gimple_call_set_tail, gimple_call_tail_p,
>       gimple_call_copy_skip_args, gimple_catch_types,
>       gimple_catch_types_ptr, gimple_catch_handler,
>       gimple_catch_set_types, gimple_catch_set_handler,
>       gimple_cond_set_code, gimple_cond_set_lhs, gimple_cond_set_rhs,
>       gimple_cond_true_label, gimple_cond_set_true_label,
>       gimple_cond_set_false_label, gimple_cond_false_label,
>       gimple_cond_make_false, gimple_cond_make_true,
>       gimple_eh_filter_set_types, gimple_eh_filter_set_failure,
>       gimple_eh_must_not_throw_fndecl,
>       gimple_eh_must_not_throw_set_fndecl, gimple_label_label,
>       gimple_label_set_label, gimple_goto_set_dest,
>       gimple_omp_atomic_load_set_lhs, gimple_omp_atomic_load_lhs,
>       gimple_omp_atomic_load_set_rhs, gimple_omp_atomic_load_rhs,
>       gimple_omp_atomic_store_set_val, gimple_omp_atomic_store_val,
>       gimple_omp_continue_control_def,
>       gimple_omp_continue_control_def_ptr,
>       gimple_omp_continue_set_control_def,
>       gimple_omp_continue_control_use,
>       gimple_omp_continue_control_use_ptr,
>       gimple_omp_continue_set_control_use, gimple_omp_critical_name,
>       gimple_omp_critical_name_ptr, gimple_omp_critical_set_name,
>       gimple_omp_parallel_clauses_ptr, gimple_omp_parallel_set_clauses,
>       gimple_omp_parallel_child_fn, gimple_omp_parallel_child_fn_ptr,
>       gimple_omp_parallel_set_child_fn, gimple_omp_parallel_data_arg,
>       gimple_omp_parallel_data_arg_ptr,
>       gimple_omp_parallel_set_data_arg, gimple_omp_single_set_clauses,
>       gimple_phi_set_result, gimple_phi_set_arg, gimple_resx_region,
>       gimple_resx_set_region, gimple_return_retval,
>       gimple_return_set_retval, gimple_switch_num_labels,
>       gimple_switch_set_num_labels, gimple_switch_index,
>       gimple_switch_set_index, gimple_switch_label,
>       gimple_switch_set_label, gimple_switch_default_label,
>       gimple_switch_set_default_label, gimple_try_set_eval,
>       gimple_try_set_cleanup): Update initial param within description
>       to reflect changes in gimple.h to using gimple subclasses.
>       (Adding a new GIMPLE statement code): Update to reflect gimple
>       statement subclassing.
> ---
>  gcc/doc/cfg.texi    |   8 +-
>  gcc/doc/gimple.texi | 354 
> +++++++++++++++++++++++++++++-----------------------
>  2 files changed, 204 insertions(+), 158 deletions(-)
> 
> diff --git a/gcc/doc/cfg.texi b/gcc/doc/cfg.texi
> index 63b8dd5..05f3f1b 100644
> --- a/gcc/doc/cfg.texi
> +++ b/gcc/doc/cfg.texi
> @@ -147,6 +147,9 @@ Abstract containers and iterators are used to access the 
> PHI nodes
>  and statements in a basic blocks.  These iterators are called
>  @dfn{GIMPLE statement iterators} (GSIs).  Grep for @code{^gsi}
>  in the various @file{gimple-*} and @file{tree-*} files.
> +There is a @code{gimple_stmt_iterator} type for iterating over
> +all kinds of statement, and a @code{gphi_iterator} subclass for
> +iterating over PHI nodes.
>  The following snippet will pretty-print all PHI nodes the statements
>  of the current function in the GIMPLE representation.
>  
> @@ -155,11 +158,12 @@ basic_block bb;
>  
>  FOR_EACH_BB (bb)
>    @{
> +   gphi_iterator pi;
>     gimple_stmt_iterator si;
>  
> -   for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
> +   for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi))
>       @{
> -       gimple phi = gsi_stmt (si);
> +       gphi *phi = pi.phi ();
>         print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
>       @}
>     for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
> diff --git a/gcc/doc/gimple.texi b/gcc/doc/gimple.texi
> index 621c860..e5c7899 100644
> --- a/gcc/doc/gimple.texi
> +++ b/gcc/doc/gimple.texi
> @@ -1020,6 +1020,7 @@ Return a deep copy of statement @code{STMT}.
>  * @code{GIMPLE_DEBUG}::
>  * @code{GIMPLE_EH_FILTER}::
>  * @code{GIMPLE_LABEL}::
> +* @code{GIMPLE_GOTO}::
>  * @code{GIMPLE_NOP}::
>  * @code{GIMPLE_OMP_ATOMIC_LOAD}::
>  * @code{GIMPLE_OMP_ATOMIC_STORE}::
> @@ -1046,75 +1047,78 @@ Return a deep copy of statement @code{STMT}.
>  @subsection @code{GIMPLE_ASM}
>  @cindex @code{GIMPLE_ASM}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_asm (const char *string, 
> ninputs, noutputs, nclobbers, ...)
> +@deftypefn {GIMPLE function} gasm *gimple_build_asm_vec ( @
> +const char *string, vec<tree, va_gc> *inputs, @
> +vec<tree, va_gc> *outputs, vec<tree, va_gc> *clobbers, @
> +vec<tree, va_gc> *labels)
>  Build a @code{GIMPLE_ASM} statement.  This statement is used for
>  building in-line assembly constructs.  @code{STRING} is the assembly
> -code.  @code{NINPUT} is the number of register inputs.  @code{NOUTPUT} is the
> -number of register outputs.  @code{NCLOBBERS} is the number of clobbered
> -registers.  The rest of the arguments trees for each input,
> -output, and clobbered registers.
> +code.  @code{INPUTS}, @code{OUTPUTS}, @code{CLOBBERS}  and @code{LABELS}
> +are the inputs, outputs, clobbered registers and labels.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_asm_vec (const char *, 
> VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
> -Identical to gimple_build_asm, but the arguments are passed in
> -VECs.
> -@end deftypefn
> -
> -@deftypefn {GIMPLE function} unsigned gimple_asm_ninputs (gimple g)
> +@deftypefn {GIMPLE function} unsigned gimple_asm_ninputs (const gasm *g)
>  Return the number of input operands for @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} unsigned gimple_asm_noutputs (gimple g)
> +@deftypefn {GIMPLE function} unsigned gimple_asm_noutputs (const gasm *g)
>  Return the number of output operands for @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} unsigned gimple_asm_nclobbers (gimple g)
> +@deftypefn {GIMPLE function} unsigned gimple_asm_nclobbers (const gasm *g)
>  Return the number of clobber operands for @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_asm_input_op (gimple g, unsigned 
> index)
> +@deftypefn {GIMPLE function} tree gimple_asm_input_op (const gasm *g, @
> +unsigned index)
>  Return input operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_asm_set_input_op (gimple g, 
> unsigned index, tree in_op)
> +@deftypefn {GIMPLE function} void gimple_asm_set_input_op (gasm *g, @
> +unsigned index, tree in_op)
>  Set @code{IN_OP} to be input operand @code{INDEX} in @code{GIMPLE_ASM} 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_asm_output_op (gimple g, unsigned 
> index)
> +@deftypefn {GIMPLE function} tree gimple_asm_output_op (const gasm *g, @
> +unsigned index)
>  Return output operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_asm_set_output_op (gimple g, @
> +@deftypefn {GIMPLE function} void gimple_asm_set_output_op (gasm *g, @
>  unsigned index, tree out_op)
>  Set @code{OUT_OP} to be output operand @code{INDEX} in @code{GIMPLE_ASM} 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_asm_clobber_op (gimple g, unsigned 
> index)
> +@deftypefn {GIMPLE function} tree gimple_asm_clobber_op (const gasm *g, @
> +unsigned index)
>  Return clobber operand @code{INDEX} of @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_asm_set_clobber_op (gimple g, 
> unsigned index, tree clobber_op)
> +@deftypefn {GIMPLE function} void gimple_asm_set_clobber_op (gasm *g, @
> +unsigned index, tree clobber_op)
>  Set @code{CLOBBER_OP} to be clobber operand @code{INDEX} in 
> @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {const char *} gimple_asm_string (gimple g)
> +@deftypefn {GIMPLE function} {const char *} gimple_asm_string (const gasm *g)
>  Return the string representing the assembly instruction in
>  @code{GIMPLE_ASM} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} bool gimple_asm_volatile_p (gimple g)
> +@deftypefn {GIMPLE function} bool gimple_asm_volatile_p (const gasm *g)
>  Return true if @code{G} is an asm statement marked volatile.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_asm_set_volatile (gimple g)
> -Mark asm statement @code{G} as volatile.
> +@deftypefn {GIMPLE function} void gimple_asm_set_volatile (gasm *g, @
> +bool volatile_p)
> +Mark asm statement @code{G} as volatile or non-volatile based on
> +@code{VOLATILE_P}.
>  @end deftypefn
>  
>  @node @code{GIMPLE_ASSIGN}
>  @subsection @code{GIMPLE_ASSIGN}
>  @cindex @code{GIMPLE_ASSIGN}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_assign (tree lhs, tree rhs)
> +@deftypefn {GIMPLE function} gassign *gimple_build_assign (tree lhs, tree 
> rhs)
>  Build a @code{GIMPLE_ASSIGN} statement.  The left-hand side is an lvalue
>  passed in lhs.  The right-hand side can be either a unary or
>  binary tree expression.  The expression tree rhs will be
> @@ -1139,19 +1143,6 @@ case they will be converted to a gimple operand if 
> necessary.
>  
>  This function returns the newly created @code{GIMPLE_ASSIGN} tuple.
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_assign_with_ops @
> -(enum tree_code subcode, tree lhs, tree op1, tree op2)
> -This function is similar to @code{gimple_build_assign}, but is used to
> -build a @code{GIMPLE_ASSIGN} statement when the operands of the
> -right-hand side of the assignment are already split into
> -different operands.
> -
> -The left-hand side is an lvalue passed in lhs.  Subcode is the
> -@code{tree_code} for the right-hand side of the assignment.  Op1 and op2
> -are the operands.  If op2 is null, subcode must be a @code{tree_code}
> -for a unary expression.
> -@end deftypefn
> -
>  @deftypefn {GIMPLE function} {enum tree_code} gimple_assign_rhs_code (gimple 
> g)
>  Return the code of the expression computed on the @code{RHS} of
>  assignment statement @code{G}.
> @@ -1227,49 +1218,52 @@ Return true if @code{S} is a type-cast assignment.
>  @subsection @code{GIMPLE_BIND}
>  @cindex @code{GIMPLE_BIND}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_bind (tree vars, gimple_seq 
> body)
> +@deftypefn {GIMPLE function} gbind *gimple_build_bind (tree vars, @
> +gimple_seq body)
>  Build a @code{GIMPLE_BIND} statement with a list of variables in @code{VARS}
>  and a body of statements in sequence @code{BODY}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_bind_vars (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_bind_vars (const gbind *g)
>  Return the variables declared in the @code{GIMPLE_BIND} statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_set_vars (gimple g, tree vars)
> +@deftypefn {GIMPLE function} void gimple_bind_set_vars (gbind *g, tree vars)
>  Set @code{VARS} to be the set of variables declared in the @code{GIMPLE_BIND}
>  statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_append_vars (gimple g, tree 
> vars)
> +@deftypefn {GIMPLE function} void gimple_bind_append_vars (gbind *g, tree 
> vars)
>  Append @code{VARS} to the set of variables declared in the @code{GIMPLE_BIND}
>  statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} gimple_seq gimple_bind_body (gimple g)
> +@deftypefn {GIMPLE function} gimple_seq gimple_bind_body (gbind *g)
>  Return the GIMPLE sequence contained in the @code{GIMPLE_BIND} statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_set_body (gimple g, gimple_seq 
> seq)
> +@deftypefn {GIMPLE function} void gimple_bind_set_body (gbind *g, @
> +gimple_seq seq)
>  Set @code{SEQ} to be sequence contained in the @code{GIMPLE_BIND} statement 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_add_stmt (gimple gs, gimple 
> stmt)
> +@deftypefn {GIMPLE function} void gimple_bind_add_stmt (gbind *gs, gimple 
> stmt)
>  Append a statement to the end of a @code{GIMPLE_BIND}'s body.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_add_seq (gimple gs, gimple_seq 
> seq)
> +@deftypefn {GIMPLE function} void gimple_bind_add_seq (gbind *gs, @
> +gimple_seq seq)
>  Append a sequence of statements to the end of a @code{GIMPLE_BIND}'s
>  body.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_bind_block (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_bind_block (const gbind *g)
>  Return the @code{TREE_BLOCK} node associated with @code{GIMPLE_BIND} 
> statement
>  @code{G}. This is analogous to the @code{BIND_EXPR_BLOCK} field in trees.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_bind_set_block (gimple g, tree 
> block)
> +@deftypefn {GIMPLE function} void gimple_bind_set_block (gbind *g, tree 
> block)
>  Set @code{BLOCK} to be the @code{TREE_BLOCK} node associated with 
> @code{GIMPLE_BIND}
>  statement @code{G}.
>  @end deftypefn
> @@ -1279,7 +1273,8 @@ statement @code{G}.
>  @subsection @code{GIMPLE_CALL}
>  @cindex @code{GIMPLE_CALL}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_call (tree fn, unsigned 
> nargs, ...)
> +@deftypefn {GIMPLE function} gcall *gimple_build_call (tree fn, @
> +unsigned nargs, ...)
>  Build a @code{GIMPLE_CALL} statement to function @code{FN}.  The argument 
> @code{FN}
>  must be either a @code{FUNCTION_DECL} or a gimple call address as
>  determined by @code{is_gimple_call_addr}.  @code{NARGS} are the number of
> @@ -1289,7 +1284,7 @@ operand is validated with @code{is_gimple_operand}).
>  @end deftypefn
>  
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_call_from_tree (tree 
> call_expr)
> +@deftypefn {GIMPLE function} gcall *gimple_build_call_from_tree (tree 
> call_expr)
>  Build a @code{GIMPLE_CALL} from a @code{CALL_EXPR} node.  The arguments and 
> the
>  function are taken from the expression directly.  This routine
>  assumes that @code{call_expr} is already in GIMPLE form.  That is, its
> @@ -1298,9 +1293,10 @@ simplification.  All the call flags in 
> @code{call_expr} are copied over
>  to the new @code{GIMPLE_CALL}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_call_vec (tree fn, 
> @code{VEC}(tree, heap) *args)
> +@deftypefn {GIMPLE function} gcall *gimple_build_call_vec (tree fn, @
> +@code{vec<tree>} args)
>  Identical to @code{gimple_build_call} but the arguments are stored in a
> -@code{VEC}().
> +@code{vec<tree>}.
>  @end deftypefn
>  
>  @deftypefn {GIMPLE function} tree gimple_call_lhs (gimple g)
> @@ -1320,7 +1316,7 @@ Return the tree node representing the function called 
> by call
>  statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_call_set_fn (gimple g, tree fn)
> +@deftypefn {GIMPLE function} void gimple_call_set_fn (gcall *g, tree fn)
>  Set @code{FN} to be the function called by call statement @code{G}.  This has
>  to be a gimple value specifying the address of the called
>  function.
> @@ -1336,7 +1332,7 @@ Otherwise return @code{NULL}.  This function is 
> analogous to
>  Set the called function to @code{FNDECL}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_call_return_type (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_call_return_type (const gcall *g)
>  Return the type returned by call statement @code{G}.
>  @end deftypefn
>  
> @@ -1344,7 +1340,7 @@ Return the type returned by call statement @code{G}.
>  Return the static chain for call statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_call_set_chain (gimple g, tree 
> chain)
> +@deftypefn {GIMPLE function} void gimple_call_set_chain (gcall *g, tree 
> chain)
>  Set @code{CHAIN} to be the static chain for call statement @code{G}.
>  @end deftypefn
>  
> @@ -1367,29 +1363,22 @@ Set @code{ARG} to be the argument at position 
> @code{INDEX} for call statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_call_set_tail (gimple s)
> +@deftypefn {GIMPLE function} void gimple_call_set_tail (gcall *s)
>  Mark call statement @code{S} as being a tail call (i.e., a call just
>  before the exit of a function). These calls are candidate for
>  tail call optimization.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} bool gimple_call_tail_p (gimple s)
> +@deftypefn {GIMPLE function} bool gimple_call_tail_p (gcall *s)
>  Return true if @code{GIMPLE_CALL} @code{S} is marked as a tail call.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_call_mark_uninlinable (gimple s)
> -Mark @code{GIMPLE_CALL} @code{S} as being uninlinable.
> -@end deftypefn
> -
> -@deftypefn {GIMPLE function} bool gimple_call_cannot_inline_p (gimple s)
> -Return true if @code{GIMPLE_CALL} @code{S} cannot be inlined.
> -@end deftypefn
> -
>  @deftypefn {GIMPLE function} bool gimple_call_noreturn_p (gimple s)
>  Return true if @code{S} is a noreturn call.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} gimple gimple_call_copy_skip_args (gimple stmt, 
> bitmap args_to_skip)
> +@deftypefn {GIMPLE function} gimple gimple_call_copy_skip_args (gcall *stmt, 
> @
> +bitmap args_to_skip)
>  Build a @code{GIMPLE_CALL} identical to @code{STMT} but skipping the 
> arguments
>  in the positions marked by the set @code{ARGS_TO_SKIP}.
>  @end deftypefn
> @@ -1399,31 +1388,33 @@ in the positions marked by the set 
> @code{ARGS_TO_SKIP}.
>  @subsection @code{GIMPLE_CATCH}
>  @cindex @code{GIMPLE_CATCH}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_catch (tree types, 
> gimple_seq handler)
> +@deftypefn {GIMPLE function} gcatch *gimple_build_catch (tree types, @
> +gimple_seq handler)
>  Build a @code{GIMPLE_CATCH} statement.  @code{TYPES} are the tree types this
>  catch handles.  @code{HANDLER} is a sequence of statements with the code
>  for the handler.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_catch_types (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_catch_types (const gcatch *g)
>  Return the types handled by @code{GIMPLE_CATCH} statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {tree *} gimple_catch_types_ptr (gimple g)
> +@deftypefn {GIMPLE function} {tree *} gimple_catch_types_ptr (gcatch *g)
>  Return a pointer to the types handled by @code{GIMPLE_CATCH} statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} gimple_seq gimple_catch_handler (gimple g)
> +@deftypefn {GIMPLE function} gimple_seq gimple_catch_handler (gcatch *g)
>  Return the GIMPLE sequence representing the body of the handler
>  of @code{GIMPLE_CATCH} statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_catch_set_types (gimple g, tree t)
> +@deftypefn {GIMPLE function} void gimple_catch_set_types (gcatch *g, tree t)
>  Set @code{T} to be the set of types handled by @code{GIMPLE_CATCH} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_catch_set_handler (gimple g, 
> gimple_seq handler)
> +@deftypefn {GIMPLE function} void gimple_catch_set_handler (gcatch *g, @
> +gimple_seq handler)
>  Set @code{HANDLER} to be the body of @code{GIMPLE_CATCH} @code{G}.
>  @end deftypefn
>  
> @@ -1432,7 +1423,8 @@ Set @code{HANDLER} to be the body of 
> @code{GIMPLE_CATCH} @code{G}.
>  @subsection @code{GIMPLE_COND}
>  @cindex @code{GIMPLE_COND}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_cond (enum tree_code 
> pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
> +@deftypefn {GIMPLE function} gcond *gimple_build_cond ( @
> +enum tree_code pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
>  Build a @code{GIMPLE_COND} statement.  @code{A} @code{GIMPLE_COND} statement 
> compares
>  @code{LHS} and @code{RHS} and if the condition in @code{PRED_CODE} is true, 
> jump to
>  the label in @code{t_label}, otherwise jump to the label in @code{f_label}.
> @@ -1441,7 +1433,8 @@ the label in @code{t_label}, otherwise jump to the 
> label in @code{f_label}.
>  @end deftypefn
>  
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_cond_from_tree (tree cond, 
> tree t_label, tree f_label)
> +@deftypefn {GIMPLE function} gcond *gimple_build_cond_from_tree (tree cond, @
> +tree t_label, tree f_label)
>  Build a @code{GIMPLE_COND} statement from the conditional expression
>  tree @code{COND}.  @code{T_LABEL} and @code{F_LABEL} are as in 
> @code{gimple_build_cond}.
>  @end deftypefn
> @@ -1451,7 +1444,8 @@ Return the code of the predicate computed by conditional
>  statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_set_code (gimple g, enum 
> tree_code code)
> +@deftypefn {GIMPLE function} void gimple_cond_set_code (gcond *g, @
> +enum tree_code code)
>  Set @code{CODE} to be the predicate code for the conditional statement
>  @code{G}.
>  @end deftypefn
> @@ -1461,7 +1455,7 @@ Return the @code{LHS} of the predicate computed by 
> conditional statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_set_lhs (gimple g, tree lhs)
> +@deftypefn {GIMPLE function} void gimple_cond_set_lhs (gcond *g, tree lhs)
>  Set @code{LHS} to be the @code{LHS} operand of the predicate computed by
>  conditional statement @code{G}.
>  @end deftypefn
> @@ -1471,36 +1465,36 @@ Return the @code{RHS} operand of the predicate 
> computed by conditional
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_set_rhs (gimple g, tree rhs)
> +@deftypefn {GIMPLE function} void gimple_cond_set_rhs (gcond *g, tree rhs)
>  Set @code{RHS} to be the @code{RHS} operand of the predicate computed by
>  conditional statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_cond_true_label (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_cond_true_label (const gcond *g)
>  Return the label used by conditional statement @code{G} when its
>  predicate evaluates to true.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_set_true_label (gimple g, tree 
> label)
> +@deftypefn {GIMPLE function} void gimple_cond_set_true_label (gcond *g, tree 
> label)
>  Set @code{LABEL} to be the label used by conditional statement @code{G} when
>  its predicate evaluates to true.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_set_false_label (gimple g, 
> tree label)
> +@deftypefn {GIMPLE function} void gimple_cond_set_false_label (gcond *g, 
> tree label)
>  Set @code{LABEL} to be the label used by conditional statement @code{G} when
>  its predicate evaluates to false.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_cond_false_label (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_cond_false_label (const gcond *g)
>  Return the label used by conditional statement @code{G} when its
>  predicate evaluates to false.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_make_false (gimple g)
> +@deftypefn {GIMPLE function} void gimple_cond_make_false (gcond *g)
>  Set the conditional @code{COND_STMT} to be of the form 'if (1 == 0)'.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_cond_make_true (gimple g)
> +@deftypefn {GIMPLE function} void gimple_cond_make_true (gcond *g)
>  Set the conditional @code{COND_STMT} to be of the form 'if (1 == 1)'.
>  @end deftypefn
>  
> @@ -1509,7 +1503,8 @@ Set the conditional @code{COND_STMT} to be of the form 
> 'if (1 == 1)'.
>  @cindex @code{GIMPLE_DEBUG}
>  @cindex @code{GIMPLE_DEBUG_BIND}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_debug_bind (tree var, tree 
> value, gimple stmt)
> +@deftypefn {GIMPLE function} gdebug *gimple_build_debug_bind (tree var, @
> +tree value, gimple stmt)
>  Build a @code{GIMPLE_DEBUG} statement with @code{GIMPLE_DEBUG_BIND} of
>  @code{subcode}.  The effect of this statement is to tell debug
>  information generation machinery that the value of user variable
> @@ -1585,7 +1580,8 @@ and @code{FALSE} if it unbinds the variable.
>  @subsection @code{GIMPLE_EH_FILTER}
>  @cindex @code{GIMPLE_EH_FILTER}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_eh_filter (tree types, 
> gimple_seq failure)
> +@deftypefn {GIMPLE function} geh_filter *gimple_build_eh_filter (tree types, 
> @
> +gimple_seq failure)
>  Build a @code{GIMPLE_EH_FILTER} statement.  @code{TYPES} are the filter's
>  types.  @code{FAILURE} is a sequence with the filter's failure action.
>  @end deftypefn
> @@ -1604,21 +1600,25 @@ Return the sequence of statement to execute when 
> @code{GIMPLE_EH_FILTER}
>  statement fails.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_eh_filter_set_types (gimple g, tree 
> types)
> +@deftypefn {GIMPLE function} void gimple_eh_filter_set_types (geh_filter *g, 
> @
> +tree types)
>  Set @code{TYPES} to be the set of types handled by @code{GIMPLE_EH_FILTER} 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_eh_filter_set_failure (gimple g, 
> gimple_seq failure)
> +@deftypefn {GIMPLE function} void gimple_eh_filter_set_failure (geh_filter 
> *g, @
> +gimple_seq failure)
>  Set @code{FAILURE} to be the sequence of statements to execute on
>  failure for @code{GIMPLE_EH_FILTER} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} bool gimple_eh_filter_must_not_throw (gimple g)
> -Return the @code{EH_FILTER_MUST_NOT_THROW} flag.
> +@deftypefn {GIMPLE function} tree gimple_eh_must_not_throw_fndecl ( @
> +geh_mnt *eh_mnt_stmt)
> +Get the function decl to be called by the MUST_NOT_THROW region.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_eh_filter_set_must_not_throw 
> (gimple g, bool mntp)
> -Set the @code{EH_FILTER_MUST_NOT_THROW} flag.
> +@deftypefn {GIMPLE function} void gimple_eh_must_not_throw_set_fndecl ( @
> +geh_mnt *eh_mnt_stmt, tree decl)
> +Set the function decl to be called by GS to DECL.
>  @end deftypefn
>  
>  
> @@ -1626,22 +1626,25 @@ Set the @code{EH_FILTER_MUST_NOT_THROW} flag.
>  @subsection @code{GIMPLE_LABEL}
>  @cindex @code{GIMPLE_LABEL}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_label (tree label)
> +@deftypefn {GIMPLE function} glabel *gimple_build_label (tree label)
>  Build a @code{GIMPLE_LABEL} statement with corresponding to the tree
>  label, @code{LABEL}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_label_label (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_label_label (const glabel *g)
>  Return the @code{LABEL_DECL} node used by @code{GIMPLE_LABEL} statement 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_label_set_label (gimple g, tree 
> label)
> +@deftypefn {GIMPLE function} void gimple_label_set_label (glabel *g, tree 
> label)
>  Set @code{LABEL} to be the @code{LABEL_DECL} node used by @code{GIMPLE_LABEL}
>  statement @code{G}.
>  @end deftypefn
>  
> +@node @code{GIMPLE_GOTO}
> +@subsection @code{GIMPLE_GOTO}
> +@cindex @code{GIMPLE_GOTO}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_goto (tree dest)
> +@deftypefn {GIMPLE function} ggoto *gimple_build_goto (tree dest)
>  Build a @code{GIMPLE_GOTO} statement to label @code{DEST}.
>  @end deftypefn
>  
> @@ -1649,7 +1652,7 @@ Build a @code{GIMPLE_GOTO} statement to label 
> @code{DEST}.
>  Return the destination of the unconditional jump @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_goto_set_dest (gimple g, tree dest)
> +@deftypefn {GIMPLE function} void gimple_goto_set_dest (ggoto *g, tree dest)
>  Set @code{DEST} to be the destination of the unconditional jump @code{G}.
>  @end deftypefn
>  
> @@ -1670,25 +1673,30 @@ Returns @code{TRUE} if statement @code{G} is a 
> @code{GIMPLE_NOP}.
>  @subsection @code{GIMPLE_OMP_ATOMIC_LOAD}
>  @cindex @code{GIMPLE_OMP_ATOMIC_LOAD}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_atomic_load (tree lhs, 
> tree rhs)
> +@deftypefn {GIMPLE function} gomp_atomic_load *gimple_build_omp_atomic_load 
> ( @
> +tree lhs, tree rhs)
>  Build a @code{GIMPLE_OMP_ATOMIC_LOAD} statement.  @code{LHS} is the left-hand
>  side of the assignment.  @code{RHS} is the right-hand side of the
>  assignment.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_lhs (gimple g, 
> tree lhs)
> +@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_lhs ( @
> +gomp_atomic_load *g, tree lhs)
>  Set the @code{LHS} of an atomic load.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_lhs (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_lhs ( @
> +const gomp_atomic_load *g)
>  Get the @code{LHS} of an atomic load.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_rhs (gimple g, 
> tree rhs)
> +@deftypefn {GIMPLE function} void gimple_omp_atomic_load_set_rhs ( @
> +gomp_atomic_load *g, tree rhs)
>  Set the @code{RHS} of an atomic set.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_rhs (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_atomic_load_rhs ( @
> +const gomp_atomic_load *g)
>  Get the @code{RHS} of an atomic set.
>  @end deftypefn
>  
> @@ -1697,16 +1705,19 @@ Get the @code{RHS} of an atomic set.
>  @subsection @code{GIMPLE_OMP_ATOMIC_STORE}
>  @cindex @code{GIMPLE_OMP_ATOMIC_STORE}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_atomic_store (tree val)
> +@deftypefn {GIMPLE function} gomp_atomic_store 
> *gimple_build_omp_atomic_store ( @
> +tree val)
>  Build a @code{GIMPLE_OMP_ATOMIC_STORE} statement. @code{VAL} is the value to 
> be
>  stored.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_atomic_store_set_val (gimple g, 
> tree val)
> +@deftypefn {GIMPLE function} void gimple_omp_atomic_store_set_val ( @
> +gomp_atomic_store *g, tree val)
>  Set the value being stored in an atomic store.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_atomic_store_val (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_atomic_store_val ( @
> +const gomp_atomic_store *g)
>  Return the value being stored in an atomic store.
>  @end deftypefn
>  
> @@ -1714,36 +1725,43 @@ Return the value being stored in an atomic store.
>  @subsection @code{GIMPLE_OMP_CONTINUE}
>  @cindex @code{GIMPLE_OMP_CONTINUE}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_continue (tree 
> control_def, tree control_use)
> +@deftypefn {GIMPLE function} gomp_continue *gimple_build_omp_continue ( @
> +tree control_def, tree control_use)
>  Build a @code{GIMPLE_OMP_CONTINUE} statement.  @code{CONTROL_DEF} is the
>  definition of the control variable.  @code{CONTROL_USE} is the use of
>  the control variable.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def ( @
> +const gomp_continue *s)
>  Return the definition of the control variable on a
>  @code{GIMPLE_OMP_CONTINUE} in @code{S}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def_ptr 
> (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_control_def_ptr ( @
> +gomp_continue *s)
>  Same as above, but return the pointer.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_def 
> (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_def ( @
> +gomp_continue *s)
>  Set the control variable definition for a @code{GIMPLE_OMP_CONTINUE}
>  statement in @code{S}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use ( @
> +const gomp_continue *s)
>  Return the use of the control variable on a @code{GIMPLE_OMP_CONTINUE}
>  in @code{S}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use_ptr 
> (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_control_use_ptr ( @
> +gomp_continue *s)
>  Same as above, but return the pointer.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_use 
> (gimple s)
> +@deftypefn {GIMPLE function} tree gimple_omp_continue_set_control_use ( @
> +gomp_continue *s)
>  Set the control variable use for a @code{GIMPLE_OMP_CONTINUE} statement
>  in @code{S}.
>  @end deftypefn
> @@ -1753,22 +1771,26 @@ in @code{S}.
>  @subsection @code{GIMPLE_OMP_CRITICAL}
>  @cindex @code{GIMPLE_OMP_CRITICAL}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_critical (gimple_seq 
> body, tree name)
> +@deftypefn {GIMPLE function} gomp_critical *gimple_build_omp_critical ( @
> +gimple_seq body, tree name)
>  Build a @code{GIMPLE_OMP_CRITICAL} statement. @code{BODY} is the sequence of
>  statements for which only one thread can execute.  @code{NAME} is an
>  optional identifier for this critical block.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_critical_name (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_critical_name ( @
> +const gomp_critical *g)
>  Return the name associated with @code{OMP_CRITICAL} statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {tree *} gimple_omp_critical_name_ptr (gimple g)
> +@deftypefn {GIMPLE function} {tree *} gimple_omp_critical_name_ptr ( @
> +gomp_critical *g)
>  Return a pointer to the name associated with @code{OMP} critical
>  statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_critical_set_name (gimple g, 
> tree name)
> +@deftypefn {GIMPLE function} void gimple_omp_critical_set_name ( @
> +gomp_critical *g, tree name)
>  Set @code{NAME} to be the name associated with @code{OMP} critical statement 
> @code{G}.
>  @end deftypefn
>  
> @@ -1776,7 +1798,7 @@ Set @code{NAME} to be the name associated with 
> @code{OMP} critical statement @co
>  @subsection @code{GIMPLE_OMP_FOR}
>  @cindex @code{GIMPLE_OMP_FOR}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_for (gimple_seq body, @
> +@deftypefn {GIMPLE function} gomp_for *gimple_build_omp_for (gimple_seq 
> body, @
>  tree clauses, tree index, tree initial, tree final, tree incr, @
>  gimple_seq pre_body, enum tree_code omp_for_cond)
>  Build a @code{GIMPLE_OMP_FOR} statement. @code{BODY} is sequence of 
> statements
> @@ -1894,8 +1916,8 @@ executed in sequence.
>  @subsection @code{GIMPLE_OMP_PARALLEL}
>  @cindex @code{GIMPLE_OMP_PARALLEL}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_parallel (gimple_seq @
> -body, tree clauses, tree child_fn, tree data_arg)
> +@deftypefn {GIMPLE function} gomp_parallel *gimple_build_omp_parallel (@
> +gimple_seq body, tree clauses, tree child_fn, tree data_arg)
>  Build a @code{GIMPLE_OMP_PARALLEL} statement.
>  @end deftypefn
>  
> @@ -1926,39 +1948,47 @@ Set @code{BODY} to be the body for the @code{OMP} 
> statement @code{G}.
>  Return the clauses associated with @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_clauses_ptr 
> (gimple g)
> +@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_clauses_ptr ( @
> +gomp_parallel *g)
>  Return a pointer to the clauses associated with @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_parallel_set_clauses (gimple g, 
> tree clauses)
> +@deftypefn {GIMPLE function} void gimple_omp_parallel_set_clauses ( @
> +gomp_parallel *g, tree clauses)
>  Set @code{CLAUSES} to be the list of clauses associated with
>  @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_parallel_child_fn (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_parallel_child_fn ( @
> +const gomp_parallel *g)
>  Return the child function used to hold the body of @code{OMP_PARALLEL}
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_child_fn_ptr 
> (gimple g)
> +@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_child_fn_ptr ( @
> +gomp_parallel *g)
>  Return a pointer to the child function used to hold the body of
>  @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_parallel_set_child_fn (gimple 
> g, tree child_fn)
> +@deftypefn {GIMPLE function} void gimple_omp_parallel_set_child_fn ( @
> +gomp_parallel *g, tree child_fn)
>  Set @code{CHILD_FN} to be the child function for @code{OMP_PARALLEL} 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_omp_parallel_data_arg (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_omp_parallel_data_arg ( @
> +const gomp_parallel *g)
>  Return the artificial argument used to send variables and values
>  from the parent to the children threads in @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_data_arg_ptr 
> (gimple g)
> +@deftypefn {GIMPLE function} {tree *} gimple_omp_parallel_data_arg_ptr ( @
> +gomp_parallel *g)
>  Return a pointer to the data argument for @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_parallel_set_data_arg (gimple 
> g, tree data_arg)
> +@deftypefn {GIMPLE function} void gimple_omp_parallel_set_data_arg ( @
> +gomp_parallel *g, tree data_arg)
>  Set @code{DATA_ARG} to be the data argument for @code{OMP_PARALLEL} @code{G}.
>  @end deftypefn
>  
> @@ -2005,7 +2035,8 @@ Set the @code{GF_OMP_SECTION_LAST} flag on @code{G}.
>  @subsection @code{GIMPLE_OMP_SECTIONS}
>  @cindex @code{GIMPLE_OMP_SECTIONS}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_sections (gimple_seq 
> body, tree clauses)
> +@deftypefn {GIMPLE function} gomp_sections *gimple_build_omp_sections ( @
> +gimple_seq body, tree clauses)
>  Build a @code{GIMPLE_OMP_SECTIONS} statement. @code{BODY} is a sequence of
>  section statements.  @code{CLAUSES} are any of the @code{OMP} sections
>  construct's clauses: private, firstprivate, lastprivate,
> @@ -2050,7 +2081,8 @@ Set @code{CLAUSES} to be the set of clauses associated 
> with @code{OMP_SECTIONS}
>  @subsection @code{GIMPLE_OMP_SINGLE}
>  @cindex @code{GIMPLE_OMP_SINGLE}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_omp_single (gimple_seq 
> body, tree clauses)
> +@deftypefn {GIMPLE function} gomp_single *gimple_build_omp_single ( @
> +gimple_seq body, tree clauses)
>  Build a @code{GIMPLE_OMP_SINGLE} statement. @code{BODY} is the sequence of
>  statements that will be executed once.  @code{CLAUSES} are any of the
>  @code{OMP} single construct's clauses: private, firstprivate,
> @@ -2065,7 +2097,8 @@ Return the clauses associated with @code{OMP_SINGLE} 
> @code{G}.
>  Return a pointer to the clauses associated with @code{OMP_SINGLE} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_omp_single_set_clauses (gimple g, 
> tree clauses)
> +@deftypefn {GIMPLE function} void gimple_omp_single_set_clauses ( @
> +gomp_single *g, tree clauses)
>  Set @code{CLAUSES} to be the clauses associated with @code{OMP_SINGLE} 
> @code{G}.
>  @end deftypefn
>  
> @@ -2092,7 +2125,7 @@ Return the @code{SSA} name created by @code{GIMPLE_PHI} 
> @code{G}.
>  Return a pointer to the @code{SSA} name created by @code{GIMPLE_PHI} 
> @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_phi_set_result (gimple g, tree 
> result)
> +@deftypefn {GIMPLE function} void gimple_phi_set_result (gphi *g, tree 
> result)
>  Set @code{RESULT} to be the @code{SSA} name created by @code{GIMPLE_PHI} 
> @code{G}.
>  @end deftypefn
>  
> @@ -2101,7 +2134,8 @@ Return the @code{PHI} argument corresponding to 
> incoming edge @code{INDEX} for
>  @code{GIMPLE_PHI} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_phi_set_arg (gimple g, index, 
> struct phi_arg_d * phiarg)
> +@deftypefn {GIMPLE function} void gimple_phi_set_arg (gphi *g, index, @
> +struct phi_arg_d * phiarg)
>  Set @code{PHIARG} to be the argument corresponding to incoming edge
>  @code{INDEX} for @code{GIMPLE_PHI} @code{G}.
>  @end deftypefn
> @@ -2110,18 +2144,18 @@ Set @code{PHIARG} to be the argument corresponding to 
> incoming edge
>  @subsection @code{GIMPLE_RESX}
>  @cindex @code{GIMPLE_RESX}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_resx (int region)
> +@deftypefn {GIMPLE function} gresx *gimple_build_resx (int region)
>  Build a @code{GIMPLE_RESX} statement which is a statement.  This
>  statement is a placeholder for _Unwind_Resume before we know if a
>  function call or a branch is needed.  @code{REGION} is the exception
>  region from which control is flowing.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} int gimple_resx_region (gimple g)
> +@deftypefn {GIMPLE function} int gimple_resx_region (const gresx *g)
>  Return the region number for @code{GIMPLE_RESX} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_resx_set_region (gimple g, int 
> region)
> +@deftypefn {GIMPLE function} void gimple_resx_set_region (gresx *g, int 
> region)
>  Set @code{REGION} to be the region number for @code{GIMPLE_RESX} @code{G}.
>  @end deftypefn
>  
> @@ -2129,15 +2163,16 @@ Set @code{REGION} to be the region number for 
> @code{GIMPLE_RESX} @code{G}.
>  @subsection @code{GIMPLE_RETURN}
>  @cindex @code{GIMPLE_RETURN}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_return (tree retval)
> +@deftypefn {GIMPLE function} greturn *gimple_build_return (tree retval)
>  Build a @code{GIMPLE_RETURN} statement whose return value is retval.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_return_retval (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_return_retval (const greturn *g)
>  Return the return value for @code{GIMPLE_RETURN} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_return_set_retval (gimple g, tree 
> retval)
> +@deftypefn {GIMPLE function} void gimple_return_set_retval (greturn *g, @
> +tree retval)
>  Set @code{RETVAL} to be the return value for @code{GIMPLE_RETURN} @code{G}.
>  @end deftypefn
>  
> @@ -2145,49 +2180,53 @@ Set @code{RETVAL} to be the return value for 
> @code{GIMPLE_RETURN} @code{G}.
>  @subsection @code{GIMPLE_SWITCH}
>  @cindex @code{GIMPLE_SWITCH}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_switch (tree index, tree @
> -default_label, @code{VEC}(tree,heap) *args)
> +@deftypefn {GIMPLE function} gswitch *gimple_build_switch (tree index, @
> +tree default_label, @code{vec}<tree> *args)
>  Build a @code{GIMPLE_SWITCH} statement.  @code{INDEX} is the index variable
>  to switch on, and @code{DEFAULT_LABEL} represents the default label.
>  @code{ARGS} is a vector of @code{CASE_LABEL_EXPR} trees that contain the
>  non-default case labels.  Each label is a tree of code 
> @code{CASE_LABEL_EXPR}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} unsigned gimple_switch_num_labels (gimple g)
> +@deftypefn {GIMPLE function} unsigned gimple_switch_num_labels ( @
> +const gswitch *g)
>  Return the number of labels associated with the switch statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_switch_set_num_labels (gimple g, @
> +@deftypefn {GIMPLE function} void gimple_switch_set_num_labels (gswitch *g, @
>  unsigned nlabels)
>  Set @code{NLABELS} to be the number of labels for the switch statement
>  @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_switch_index (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_switch_index (const gswitch *g)
>  Return the index variable used by the switch statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_switch_set_index (gimple g, tree 
> index)
> +@deftypefn {GIMPLE function} void gimple_switch_set_index (gswitch *g, @
> +tree index)
>  Set @code{INDEX} to be the index variable for switch statement @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_switch_label (gimple g, unsigned 
> index)
> +@deftypefn {GIMPLE function} tree gimple_switch_label (const gswitch *g, @
> +unsigned index)
>  Return the label numbered @code{INDEX}. The default label is 0, followed
>  by any labels in a switch statement.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_switch_set_label (gimple g, 
> unsigned @
> -index, tree label)
> +@deftypefn {GIMPLE function} void gimple_switch_set_label (gswitch *g, @
> +unsigned index, tree label)
>  Set the label number @code{INDEX} to @code{LABEL}. 0 is always the default
>  label.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} tree gimple_switch_default_label (gimple g)
> +@deftypefn {GIMPLE function} tree gimple_switch_default_label ( @
> +const gswitch *g)
>  Return the default label for a switch statement.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_switch_set_default_label (gimple g, 
> @
> +@deftypefn {GIMPLE function} void gimple_switch_set_default_label (gswitch 
> *g, @
>  tree label)
>  Set the default label for a switch statement.
>  @end deftypefn
> @@ -2197,7 +2236,7 @@ Set the default label for a switch statement.
>  @subsection @code{GIMPLE_TRY}
>  @cindex @code{GIMPLE_TRY}
>  
> -@deftypefn {GIMPLE function} gimple gimple_build_try (gimple_seq eval, @
> +@deftypefn {GIMPLE function} gtry *gimple_build_try (gimple_seq eval, @
>  gimple_seq cleanup, unsigned int kind)
>  Build a @code{GIMPLE_TRY} statement.  @code{EVAL} is a sequence with the
>  expression to evaluate.  @code{CLEANUP} is a sequence of statements to
> @@ -2231,12 +2270,13 @@ bool catch_is_cleanup)
>  Set the @code{GIMPLE_TRY_CATCH_IS_CLEANUP} flag.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_try_set_eval (gimple g, gimple_seq 
> eval)
> +@deftypefn {GIMPLE function} void gimple_try_set_eval (gtry *g, gimple_seq 
> eval)
>  Set @code{EVAL} to be the sequence of statements to use as the body for
>  @code{GIMPLE_TRY} @code{G}.
>  @end deftypefn
>  
> -@deftypefn {GIMPLE function} void gimple_try_set_cleanup (gimple g, 
> gimple_seq cleanup)
> +@deftypefn {GIMPLE function} void gimple_try_set_cleanup (gtry *g, @
> +gimple_seq cleanup)
>  Set @code{CLEANUP} to be the sequence of statements to use as the
>  cleanup body for @code{GIMPLE_TRY} @code{G}.
>  @end deftypefn
> @@ -2589,11 +2629,10 @@ any new basic blocks which are necessary.
>  
>  The first step in adding a new GIMPLE statement code, is
>  modifying the file @code{gimple.def}, which contains all the GIMPLE
> -codes.  Then you must add a corresponding structure, and an entry
> -in @code{union gimple_statement_d}, both of which are located in
> -@code{gimple.h}.  This in turn, will require you to add a corresponding
> -@code{GTY} tag in @code{gsstruct.def}, and code to handle this tag in
> -@code{gss_for_code} which is located in @code{gimple.c}.
> +codes.  Then you must add a corresponding gimple_statement_base subclass
> +located in @code{gimple.h}.  This in turn, will require you to add a
> +corresponding @code{GTY} tag in @code{gsstruct.def}, and code to handle
> +this tag in @code{gss_for_code} which is located in @code{gimple.c}.
>  
>  In order for the garbage collector to know the size of the
>  structure you created in @code{gimple.h}, you need to add a case to
> @@ -2603,13 +2642,16 @@ in @code{gimple.c}.
>  You will probably want to create a function to build the new
>  gimple statement in @code{gimple.c}.  The function should be called
>  @code{gimple_build_@var{new-tuple-name}}, and should return the new tuple
> -of type gimple.
> +as a pointer to the appropriate gimple_statement_base subclass.
>  
>  If your new statement requires accessors for any members or
>  operands it may have, put simple inline accessors in
>  @code{gimple.h} and any non-trivial accessors in @code{gimple.c} with a
>  corresponding prototype in @code{gimple.h}.
>  
> +You should add the new statement subclass to the class hierarchy diagram
> +in @code{gimple.texi}.
> +
>  
>  @node Statement and operand traversals
>  @section Statement and operand traversals
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendoerffer, HRB 21284
(AG Nuernberg)
Maxfeldstrasse 5, 90409 Nuernberg, Germany

Reply via email to