#### 12.7.4 `GIMPLE_CALL`

— GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs, ...)

> Build a `GIMPLE_CALL` statement to function `FN`. The argument `FN` must be either a `FUNCTION_DECL` or a gimple call address as determined by `is_gimple_call_addr`. `NARGS` are the number of arguments. The rest of the arguments follow the argument `NARGS`, and must be trees that are valid as rvalues in gimple (i.e., each operand is validated with `is_gimple_operand`).

— GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)

> Build a `GIMPLE_CALL` from a `CALL_EXPR` node. The arguments and the function are taken from the expression directly. This routine assumes that `call_expr` is already in GIMPLE form. That is, its operands are GIMPLE values and the function call needs no further simplification. All the call flags in `call_expr` are copied over to the new `GIMPLE_CALL`.

— GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC`(tree, heap) *args)

> Identical to `gimple_build_call` but the arguments are stored in a `VEC`().

— GIMPLE function: tree gimple_call_lhs (gimple g)

> Return the `LHS` of call statement `G`.

— GIMPLE function: tree * gimple_call_lhs_ptr (gimple g)

> Return a pointer to the `LHS` of call statement `G`.

— GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)

> Set `LHS` to be the `LHS` operand of call statement `G`.

— GIMPLE function: tree gimple_call_fn (gimple g)

> Return the tree node representing the function called by call statement `G`.

— GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)

> Set `FN` to be the function called by call statement `G`. This has to be a gimple value specifying the address of the called function.

— GIMPLE function: tree gimple_call_fndecl (gimple g)

> If a given `GIMPLE_CALL`'s callee is a `FUNCTION_DECL`, return it. Otherwise return `NULL`. This function is analogous to `get_callee_fndecl` in `GENERIC`.

— GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)

> Set the called function to `FNDECL`.

— GIMPLE function: tree gimple_call_return_type (gimple g)

> Return the type returned by call statement `G`.

— GIMPLE function: tree gimple_call_chain (gimple g)

> Return the static chain for call statement `G`.

— GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)

> Set `CHAIN` to be the static chain for call statement `G`.

— GIMPLE function: unsigned gimple_call_num_args (gimple g)

> Return the number of arguments used by call statement `G`.

— GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)

> Return the argument at position `INDEX` for call statement `G`. The first argument is 0.

— GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned index)

> Return a pointer to the argument at position `INDEX` for call statement `G`.

— GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index, tree arg)

> Set `ARG` to be the argument at position `INDEX` for call statement `G`.

— GIMPLE function: void gimple_call_set_tail (gimple s)

> Mark call statement `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.

— GIMPLE function: bool gimple_call_tail_p (gimple s)

> Return true if `GIMPLE_CALL` `S` is marked as a tail call.

— GIMPLE function: void gimple_call_mark_uninlinable (gimple s)

> Mark `GIMPLE_CALL` `S` as being uninlinable.

— GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)

> Return true if `GIMPLE_CALL` `S` cannot be inlined.

— GIMPLE function: bool gimple_call_noreturn_p (gimple s)

> Return true if `S` is a noreturn call.

— GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt, bitmap args_to_skip)

> Build a `GIMPLE_CALL` identical to `STMT` but skipping the arguments in the positions marked by the set `ARGS_TO_SKIP`.