GCC Middle and Back End API Reference
expr_status Struct Reference

#include <function.h>

Collaboration diagram for expr_status:

Data Fields

int x_pending_stack_adjust
int x_inhibit_defer_pop
int x_stack_pointer_delta
rtx x_saveregs_value
rtx x_apply_args_value
rtx x_forced_labels

Field Documentation

rtx expr_status::x_apply_args_value

Similarly for __builtin_apply_args.

rtx expr_status::x_forced_labels

List of labels that must never be deleted.

int expr_status::x_inhibit_defer_pop

Under some ABIs, it is the caller's responsibility to pop arguments pushed for function calls. A naive implementation would simply pop the arguments immediately after each call. However, if several function calls are made in a row, it is typically cheaper to pop all the arguments after all of the calls are complete since a single pop instruction can be used. Therefore, GCC attempts to defer popping the arguments until absolutely necessary. (For example, at the end of a conditional, the arguments must be popped, since code outside the conditional won't know whether or not the arguments need to be popped.)

When INHIBIT_DEFER_POP is nonzero, however, the compiler does not attempt to defer pops. Instead, the stack is popped immediately after each call. Rather then setting this variable directly, use NO_DEFER_POP and OK_DEFER_POP.

int expr_status::x_pending_stack_adjust

Number of units that we should eventually pop off the stack. These are the arguments to function calls that have already returned.

rtx expr_status::x_saveregs_value

Nonzero means __builtin_saveregs has already been done in this function. The value is the pseudoreg containing the value __builtin_saveregs returned.

int expr_status::x_stack_pointer_delta

If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack boundary can be momentarily unaligned while pushing the arguments. Record the delta since last aligned boundary here in order to get stack alignment in the nested function calls working right.


The documentation for this struct was generated from the following file: