X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ffunction.h;h=eb2a7530b9f04419681a7cde6a59ef4d13facd53;hb=80f2ef4791bbda9779475678dca0cfa2776f785d;hp=e8039a711a1807ce52dcbca233551bc90d72222f;hpb=80f94d490de08005958f372930d7683690e9fc63;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/function.h b/gcc/function.h index e8039a711a1..eb2a7530b9f 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -1,12 +1,12 @@ /* Structure for saving state for a nested function. Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -15,9 +15,8 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #ifndef GCC_FUNCTION_H #define GCC_FUNCTION_H @@ -25,14 +24,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "tree.h" #include "hashtab.h" -struct var_refs_queue GTY(()) -{ - rtx modified; - enum machine_mode promoted_mode; - int unsignedp; - struct var_refs_queue *next; -}; - /* Stack of pending (incomplete) sequences saved by `start_sequence'. Each element describes one pending sequence. The main insn-chain is saved in the last element of the chain, @@ -45,16 +36,6 @@ struct sequence_stack GTY(()) rtx last; struct sequence_stack *next; }; - -extern struct sequence_stack *sequence_stack; - -/* Stack of single obstacks. */ - -struct simple_obstack_stack -{ - struct obstack *obstack; - struct simple_obstack_stack *next; -}; struct emit_status GTY(()) { @@ -168,12 +149,12 @@ DEF_VEC_ALLOC_P(temp_slot_p,gc); enum function_frequency { /* This function most likely won't be executed at all. - (set only when profile feedback is available). */ + (set only when profile feedback is available or via function attribute). */ FUNCTION_FREQUENCY_UNLIKELY_EXECUTED, /* The default value. */ FUNCTION_FREQUENCY_NORMAL, /* Optimize this function hard - (set only when profile feedback is available). */ + (set only when profile feedback is available or via function attribute). */ FUNCTION_FREQUENCY_HOT }; @@ -193,7 +174,7 @@ struct function GTY(()) struct gimple_df *gimple_df; /* The loops in this function. */ - struct loops * GTY((skip)) x_current_loops; + struct loops *x_current_loops; /* Value histograms attached to particular statements. */ htab_t GTY((skip)) value_histograms; @@ -296,10 +277,6 @@ struct function GTY(()) /* List of available temp slots. */ struct temp_slot *x_avail_temp_slots; - /* This slot is initialized as 0 and is added to - during the nested function. */ - struct var_refs_queue *fixup_var_refs_queue; - /* Current nesting level for temporaries. */ int x_temp_slot_level; @@ -309,13 +286,6 @@ struct function GTY(()) /* Function sequence number for profiling, debugging, etc. */ int funcdef_no; - /* For flow.c. */ - - /* Highest loop depth seen so far in loop analysis. Used in flow.c - for the "failure strategy" when doing liveness analysis starting - with non-empty initial sets. */ - int max_loop_depth; - /* For md files. */ /* tm.h can use this to store whatever it likes. */ @@ -349,9 +319,6 @@ struct function GTY(()) /* Line number of the end of the function. */ location_t function_end_locus; - /* Array mapping insn uids to blocks. */ - VEC(tree,gc) *ib_boundaries_block; - /* The variables unexpanded so far. */ tree unexpanded_var_list; @@ -379,16 +346,19 @@ struct function GTY(()) /* Collected bit flags. */ - /* Nonzero if function being compiled needs to be given an address - where the value should be stored. */ - unsigned int returns_struct : 1; + /* Number of units of general registers that need saving in stdarg + function. What unit is depends on the backend, either it is number + of bytes, or it can be number of registers. */ + unsigned int va_list_gpr_size : 8; + + /* Number of units of floating point registers that need saving in stdarg + function. */ + unsigned int va_list_fpr_size : 8; - /* Nonzero if function being compiled needs to - return the address of where it has put a structure value. */ - unsigned int returns_pcc_struct : 1; - /* Nonzero if the current function returns a pointer type. */ - unsigned int returns_pointer : 1; + /* How commonly executed the function is. Initialized during branch + probabilities pass. */ + ENUM_BITFIELD (function_frequency) function_frequency : 2; /* Nonzero if function being compiled can call setjmp. */ unsigned int calls_setjmp : 1; @@ -404,13 +374,21 @@ struct function GTY(()) /* Nonzero if the function calls __builtin_eh_return. */ unsigned int calls_eh_return : 1; + /* Nonzero if function being compiled receives nonlocal gotos from nested functions. */ unsigned int has_nonlocal_label : 1; + /* Nonzero if function saves all registers, e.g. if it has a nonlocal + label that can reach the exit block via non-exceptional paths. */ + unsigned int saves_all_registers : 1; + /* Nonzero if function being compiled has nonlocal gotos to parent function. */ unsigned int has_nonlocal_goto : 1; + + /* Nonzero if function being compiled has an asm statement. */ + unsigned int has_asm_statement : 1; /* Nonzero if the current function is a thunk, i.e., a lightweight function implemented by the output_mi_thunk hook) that just @@ -432,6 +410,7 @@ struct function GTY(()) function. */ unsigned int limit_stack : 1; + /* Nonzero if current function uses stdarg.h or equivalent. */ unsigned int stdarg : 1; @@ -461,26 +440,25 @@ struct function GTY(()) /* Set when the call to function itself has been emit. */ unsigned int recursive_call_emit : 1; + /* Set when the tail call has been produced. */ unsigned int tail_call_emit : 1; - /* How commonly executed the function is. Initialized during branch - probabilities pass. */ - ENUM_BITFIELD (function_frequency) function_frequency : 2; - - /* Number of units of general registers that need saving in stdarg - function. What unit is depends on the backend, either it is number - of bytes, or it can be number of registers. */ - unsigned int va_list_gpr_size : 8; - - /* Number of units of floating point registers that need saving in stdarg - function. */ - unsigned int va_list_fpr_size : 8; - /* FIXME tuples: This bit is temporarily here to mark when a function has been gimplified, so we can make sure we're not creating non GIMPLE tuples after gimplification. */ - unsigned gimplified : 1; + unsigned int gimplified : 1; + + /* Fields below this point are not set for abstract functions; see + allocate_struct_function. */ + + /* Nonzero if function being compiled needs to be given an address + where the value should be stored. */ + unsigned int returns_struct : 1; + + /* Nonzero if function being compiled needs to + return the address of where it has put a structure value. */ + unsigned int returns_pcc_struct : 1; }; /* If va_list_[gf]pr_size is set to this, it means we don't know how @@ -491,6 +469,11 @@ struct function GTY(()) /* The function currently being compiled. */ extern GTY(()) struct function *cfun; +/* In order to ensure that cfun is not set directly, we redefine it so + that it is not an lvalue. Rather than assign to cfun, use + push_cfun or set_cfun. */ +#define cfun (cfun + 0) + /* Pointer to chain of `struct function' for containing functions. */ extern GTY(()) struct function *outer_function_chain; @@ -500,11 +483,15 @@ extern int virtuals_instantiated; /* Nonzero if at least one trampoline has been created. */ extern int trampolines_created; +/* cfun shouldn't be set directly; use one of these functions instead. */ +extern void set_cfun (struct function *new_cfun); +extern void push_cfun (struct function *new_cfun); +extern void pop_cfun (void); + /* For backward compatibility... eventually these should all go away. */ #define current_function_pops_args (cfun->pops_args) #define current_function_returns_struct (cfun->returns_struct) #define current_function_returns_pcc_struct (cfun->returns_pcc_struct) -#define current_function_returns_pointer (cfun->returns_pointer) #define current_function_calls_setjmp (cfun->calls_setjmp) #define current_function_calls_alloca (cfun->calls_alloca) #define current_function_accesses_prior_frames (cfun->accesses_prior_frames) @@ -525,7 +512,9 @@ extern int trampolines_created; #define current_function_uses_const_pool (cfun->uses_const_pool) #define current_function_epilogue_delay_list (cfun->epilogue_delay_list) #define current_function_has_nonlocal_label (cfun->has_nonlocal_label) +#define current_function_saves_all_registers (cfun->saves_all_registers) #define current_function_has_nonlocal_goto (cfun->has_nonlocal_goto) +#define current_function_has_asm_statement (cfun->has_asm_statement) #define return_label (cfun->x_return_label) #define naked_return_label (cfun->x_naked_return_label) @@ -538,7 +527,10 @@ extern int trampolines_created; #define avail_temp_slots (cfun->x_avail_temp_slots) #define temp_slot_level (cfun->x_temp_slot_level) #define nonlocal_goto_handler_labels (cfun->x_nonlocal_goto_handler_labels) +#define rtl_df (cfun->df) #define current_loops (cfun->x_current_loops) +#define dom_computed (cfun->cfg->x_dom_computed) +#define n_bbs_in_dom_tree (cfun->cfg->x_n_bbs_in_dom_tree) #define VALUE_HISTOGRAMS(fun) (fun)->value_histograms /* Given a function decl for a containing function, @@ -554,11 +546,6 @@ extern void number_blocks (tree); extern void clear_block_marks (tree); extern tree blocks_nreverse (tree); -extern void reset_block_changes (void); -extern void record_block_change (tree); -extern void finalize_block_changes (void); -extern void check_block_change (rtx, tree *); -extern void free_block_changes (void); /* Return size needed for stack frame based on slots so far allocated. This size counts from zero. It is not rounded to STACK_BOUNDARY; @@ -589,6 +576,8 @@ extern rtx get_arg_pointer_save_area (struct function *); /* Returns the name of the current function. */ extern const char *current_function_name (void); +/* Returns the assembler name (raw, mangled) of the current function. */ +extern const char *current_function_assembler_name (void); extern void do_warn_unused_parameter (tree); @@ -599,4 +588,5 @@ extern bool reference_callee_copied (CUMULATIVE_ARGS *, enum machine_mode, extern void used_types_insert (tree); +extern int get_next_funcdef_no (void); #endif /* GCC_FUNCTION_H */