/* Structure for saving state for a nested function.
- Copyright (C) 1989, 92-99, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
/* Line number and source file of the last line-number NOTE emitted.
This is used to avoid generating duplicates. */
int x_last_linenum;
- char *x_last_filename;
+ const char *x_last_filename;
/* A vector indexed by pseudo reg number. The allocated length
of this vector is regno_pointer_flag_length. Since this
/* Indexed by pseudo register number, if nonzero gives the known alignment
for that pseudo (if regno_pointer_flag is set).
Allocated in parallel with regno_pointer_flag. */
- char *regno_pointer_align;
+ unsigned char *regno_pointer_align;
/* Indexed by pseudo register number, gives the rtx for that pseudo.
Allocated in parallel with regno_pointer_flag. */
NO_DEFER_POP and OK_DEFER_POP. */
int x_inhibit_defer_pop;
+ /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
+ boundary can be momentairly 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. */
+ int x_stack_pointer_delta;
+
/* Nonzero means __builtin_saveregs has already been done in this function.
The value is the pseudoreg containing the value __builtin_saveregs
returned. */
#define apply_args_value (cfun->expr->x_apply_args_value)
#define forced_labels (cfun->expr->x_forced_labels)
#define pending_chain (cfun->expr->x_pending_chain)
+#define stack_pointer_delta (cfun->expr->x_stack_pointer_delta)
/* This structure can save all the important global and static variables
describing the status of the current function. */
/* Nonzero if this function is being processed in function-at-a-time
mode. In other words, if all tree structure for this function,
- including the BLOCK tree is created, before RTL generation
+ including the BLOCK tree, is created before RTL generation
commences. */
int x_whole_function_mode_p;
/* 1 + last pseudo register number possibly used for loading a copy
of a parameter of this function. */
- int x_max_parm_reg;
+ unsigned int x_max_parm_reg;
/* Vector indexed by REGNO, containing location on stack in which
to put the parm which is nominally in pseudo register REGNO,
/* Pointer to chain of `struct function' for containing functions. */
extern struct function *outer_function_chain;
-/* Put all this function's BLOCK nodes into a vector and return it.
- Also store in each NOTE for the beginning or end of a block
- the index of that block in the vector. */
-extern void identify_blocks PARAMS ((tree, rtx));
+/* Set NOTE_BLOCK for each block note in the current function. */
+extern void identify_blocks PARAMS ((void));
+
+/* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
+ and create duplicate blocks. */
+extern void reorder_blocks PARAMS ((void));
+
+/* Set BLOCK_NUMBER for all the blocks in FN. */
+extern void number_blocks PARAMS ((tree));
/* Return size needed for stack frame based on slots so far allocated.
This size counts from zero. It is not rounded to STACK_BOUNDARY;