Mercurial > hg > CbC > CbC_gcc
diff gcc/function.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/function.h Tue May 25 18:58:51 2010 +0900 +++ b/gcc/function.h Tue Mar 22 17:18:12 2011 +0900 @@ -1,6 +1,6 @@ /* Structure for saving state for a nested function. Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -25,6 +25,8 @@ #include "tree.h" #include "hashtab.h" #include "vecprim.h" +#include "tm.h" /* For CUMULATIVE_ARGS. */ +#include "hard-reg-set.h" /* Stack of pending (incomplete) sequences saved by `start_sequence'. Each element describes one pending sequence. @@ -224,11 +226,6 @@ const char *cold_section_label; const char *hot_section_end_label; const char *cold_section_end_label; - - /* String to be used for name of cold text sections, via - targetm.asm_out.named_section. */ - - const char *unlikely_text_section_name; }; /* Describe an empty area of space in the stack frame. These can be chained @@ -436,6 +433,12 @@ TREE_NOTHROW (current_function_decl) it is set even for overwritable function where currently compiled version of it is nothrow. */ bool nothrow; + + /* Like regs_ever_live, but 1 if a reg is set or clobbered from an + asm. Unlike regs_ever_live, elements of this array corresponding + to eliminable regs (like the frame pointer) are set if an asm + sets them. */ + HARD_REG_SET asm_clobbers; }; #define return_label (crtl->x_return_label) @@ -460,6 +463,37 @@ want to do differently. */ #define crtl (&x_rtl) +struct GTY(()) stack_usage +{ + /* # of bytes of static stack space allocated by the function. */ + HOST_WIDE_INT static_stack_size; + + /* # of bytes of dynamic stack space allocated by the function. This is + meaningful only if has_unbounded_dynamic_stack_size is zero. */ + HOST_WIDE_INT dynamic_stack_size; + + /* # of bytes of space pushed onto the stack after the prologue. If + !ACCUMULATE_OUTGOING_ARGS, it contains the outgoing arguments. */ + int pushed_stack_size; + + /* # of dynamic allocations in the function. */ + unsigned int dynamic_alloc_count : 31; + + /* Nonzero if the amount of stack space allocated dynamically cannot + be bounded at compile-time. */ + unsigned int has_unbounded_dynamic_stack_size : 1; +}; + +#define current_function_static_stack_size (cfun->su->static_stack_size) +#define current_function_dynamic_stack_size (cfun->su->dynamic_stack_size) +#define current_function_pushed_stack_size (cfun->su->pushed_stack_size) +#define current_function_dynamic_alloc_count (cfun->su->dynamic_alloc_count) +#define current_function_has_unbounded_dynamic_stack_size \ + (cfun->su->has_unbounded_dynamic_stack_size) +#define current_function_allocates_dynamic_stack_space \ + (current_function_dynamic_stack_size != 0 \ + || current_function_has_unbounded_dynamic_stack_size) + /* This structure can save all the important global and static variables describing the status of the current function. */ @@ -478,6 +512,9 @@ /* The loops in this function. */ struct loops *x_current_loops; + /* The stack usage of this function. */ + struct stack_usage *su; + /* Value histograms attached to particular statements. */ htab_t GTY((skip)) value_histograms; @@ -495,8 +532,8 @@ pointer. */ tree nonlocal_goto_save_area; - /* List of function local variables, functions, types and constants. */ - tree local_decls; + /* Vector of function local variables, functions, types and constants. */ + VEC(tree,gc) *local_decls; /* For md files. */ @@ -572,6 +609,10 @@ unsigned int after_inlining : 1; unsigned int always_inline_functions_inlined : 1; + /* Nonzero if function being compiled can throw synchronous non-call + exceptions. */ + unsigned int can_throw_non_call_exceptions : 1; + /* Fields below this point are not set for abstract functions; see allocate_struct_function. */ @@ -597,6 +638,17 @@ unsigned int is_thunk : 1; }; +/* Add the decl D to the local_decls list of FUN. */ + +static inline void +add_local_decl (struct function *fun, tree d) +{ + VEC_safe_push (tree, gc, fun->local_decls, d); +} + +#define FOR_EACH_LOCAL_DECL(FUN, I, D) \ + FOR_EACH_VEC_ELT_REVERSE (tree, (FUN)->local_decls, I, D) + /* If va_list_[gf]pr_size is set to this, it means we don't know how many units need to be saved. */ #define VA_LIST_MAX_GPR_SIZE 255 @@ -633,9 +685,9 @@ int types_used_by_vars_eq (const void *, const void *); void types_used_by_var_decl_insert (tree type, tree var_decl); -/* During parsing of a global variable, this linked list points to - the list of types referenced by the global variable. */ -extern GTY(()) tree types_used_by_cur_var_decl; +/* During parsing of a global variable, this vector contains the types + referenced by the global variable. */ +extern GTY(()) VEC(tree,gc) *types_used_by_cur_var_decl; /* cfun shouldn't be set directly; use one of these functions instead. */ @@ -702,4 +754,9 @@ extern void used_types_insert (tree); extern int get_next_funcdef_no (void); + +/* In predict.c */ +extern bool optimize_function_for_size_p (struct function *); +extern bool optimize_function_for_speed_p (struct function *); + #endif /* GCC_FUNCTION_H */