ia64 eh, part 10

Richard Henderson rth@redhat.com
Tue Mar 27 23:14:00 GMT 2001


Really unrelated to exception handling, but something I
happened to notice and clean up while adding more fields.

There are actually quite a lot of these; saves about 80
bytes per function parsed -- could add up quickly with
headers full of c++ inline functions.


r~


        * function.h (struct function): Move all boolean valued fields
        to single bit fields at the end of the struct.

Index: function.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.h,v
retrieving revision 1.59
diff -c -p -d -r1.59 function.h
*** function.h	2001/01/10 21:40:13	1.59
--- function.h	2001/03/28 06:57:16
*************** struct function
*** 191,196 ****
--- 191,197 ----
  
    /* Name of this function.  */
    const char *name;
+ 
    /* Points to the FUNCTION_DECL of this function. */
    tree decl;
  
*************** struct function
*** 199,248 ****
       May affect compilation of return insn or of function epilogue.  */
    int pops_args;
  
-   /* Nonzero if function being compiled needs to be given an address
-      where the value should be stored.  */
-   int returns_struct;
- 
-   /* Nonzero if function being compiled needs to
-      return the address of where it has put a structure value.  */
-   int returns_pcc_struct;
-   
-   /* Nonzero if the current function returns a pointer type.  */
-   int returns_pointer;
- 
-   /* Nonzero if function being compiled needs to be passed a static chain.  */
-   int needs_context;
- 
-   /* Nonzero if function being compiled can call setjmp.  */
-   int calls_setjmp;
- 
-   /* Nonzero if function being compiled can call longjmp.  */
-   int calls_longjmp;
-   
-   /* Nonzero if function being compiled can call alloca,
-      either as a subroutine or builtin.  */
-   int calls_alloca;
- 
-   /* Nonzero if function being compiled receives nonlocal gotos
-      from nested functions.  */
- 
-   int has_nonlocal_label;
- 
-   /* Nonzero if function being compiled has nonlocal gotos to parent
-      function.  */
-   int has_nonlocal_goto;
- 
-   /* Nonzero if function being compiled contains nested functions.  */
-   int contains_functions;
- 
-   /* Nonzero if the function being compiled issues a computed jump.  */
-   int has_computed_jump;
- 
-   /* Nonzero if the current function is a thunk (a lightweight function that
-      just adjusts one of its arguments and forwards to another function), so
-      we should try to cut corners where we can.  */
-   int is_thunk;
- 
    /* If function's args have a fixed size, this is that size, in bytes.
       Otherwise, it is -1.
       May affect compilation of return insn or of function epilogue.  */
--- 200,205 ----
*************** struct function
*** 261,274 ****
       anonymous arg can be found, if there is one.  */
    rtx arg_offset_rtx;
  
-   /* Nonzero if current function uses varargs.h or equivalent.
-      Zero for functions that use stdarg.h.  */
-   int varargs;
- 
-   /* Nonzero if current function uses stdarg.h or equivalent.
-      Zero for functions that use varargs.h.  */
-   int stdarg;
- 
    /* Quantities of various kinds of registers
       used for the current function's args.  */
    CUMULATIVE_ARGS args_info;
--- 218,223 ----
*************** struct function
*** 286,320 ****
       inline.  */
    const char *cannot_inline;
  
-   /* Nonzero if instrumentation calls for function entry and exit should be
-      generated.  */
-   int instrument_entry_exit;
- 
-   /* Nonzero if memory access checking be enabled in the current function.  */
-   int check_memory_usage;
- 
-   /* Nonzero if stack limit checking should be enabled in the current
-      function.  */
-   int limit_stack;
- 
    /* Number of function calls seen so far in current function.  */
    int x_function_call_count;
  
-   /* 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
-      commences.  */
-   int x_whole_function_mode_p;
- 
-   /* Nonzero if the back-end should not keep track of expressions that
-      determine the size of variable-sized objects.  Normally, such
-      expressions are saved away, and then expanded when the next
-      function is started.  For example, if a parameter has a
-      variable-sized type, then the size of the parameter is computed
-      when the function body is entered.  However, some front-ends do
-      not desire this behavior.  */
-   int x_dont_save_pending_sizes_p;
- 
    /* List (chain of TREE_LIST) of LABEL_DECLs for all nonlocal labels
       (labels to which there can be nonlocal gotos from nested functions)
       in this function.  */
--- 235,243 ----
*************** struct function
*** 442,454 ****
    /* Highest label number in current function.  */
    int inl_max_label_num;
  
-   /* Nonzero if the current function uses the constant pool.  */
-   int uses_const_pool;
- 
    /* For md files.  */
  
-   /* Nonzero if the current function uses pic_offset_table_rtx.  */
-   int uses_pic_offset_table;
    /* tm.h can use this to store whatever it likes.  */
    struct machine_function *machine;
    /* The largest alignment of slot allocated on the stack.  */
--- 365,372 ----
*************** struct function
*** 464,469 ****
--- 382,475 ----
    /* If some insns can be deferred to the delay slots of the epilogue, the
       delay list for them is recorded here.  */
    rtx epilogue_delay_list;
+ 
+   /* 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;
+ 
+   /* 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;
+ 
+   /* Nonzero if function being compiled needs to be passed a static chain.  */
+   unsigned int needs_context : 1;
+ 
+   /* Nonzero if function being compiled can call setjmp.  */
+   unsigned int calls_setjmp : 1;
+ 
+   /* Nonzero if function being compiled can call longjmp.  */
+   unsigned int calls_longjmp : 1;
+   
+   /* Nonzero if function being compiled can call alloca,
+      either as a subroutine or builtin.  */
+   unsigned int calls_alloca : 1;
+ 
+   /* Nonzero if function being compiled receives nonlocal gotos
+      from nested functions.  */
+   unsigned int has_nonlocal_label : 1;
+ 
+   /* Nonzero if function being compiled has nonlocal gotos to parent
+      function.  */
+   unsigned int has_nonlocal_goto : 1;
+ 
+   /* Nonzero if function being compiled contains nested functions.  */
+   unsigned int contains_functions : 1;
+ 
+   /* Nonzero if the function being compiled issues a computed jump.  */
+   unsigned int has_computed_jump : 1;
+ 
+   /* Nonzero if the current function is a thunk (a lightweight function that
+      just adjusts one of its arguments and forwards to another function), so
+      we should try to cut corners where we can.  */
+   unsigned int is_thunk : 1;
+ 
+   /* Nonzero if instrumentation calls for function entry and exit should be
+      generated.  */
+   unsigned int instrument_entry_exit : 1;
+ 
+   /* Nonzero if memory access checking be enabled in the current function.  */
+   unsigned int check_memory_usage : 1;
+ 
+   /* Nonzero if stack limit checking should be enabled in the current
+      function.  */
+   unsigned int limit_stack : 1;
+ 
+   /* Nonzero if current function uses varargs.h or equivalent.
+      Zero for functions that use stdarg.h.  */
+   unsigned int varargs : 1;
+ 
+   /* Nonzero if current function uses stdarg.h or equivalent.
+      Zero for functions that use varargs.h.  */
+   unsigned int stdarg : 1;
+ 
+   /* 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
+      commences.  */
+   unsigned int x_whole_function_mode_p : 1;
+ 
+   /* Nonzero if the back-end should not keep track of expressions that
+      determine the size of variable-sized objects.  Normally, such
+      expressions are saved away, and then expanded when the next
+      function is started.  For example, if a parameter has a
+      variable-sized type, then the size of the parameter is computed
+      when the function body is entered.  However, some front-ends do
+      not desire this behavior.  */
+   unsigned int x_dont_save_pending_sizes_p : 1;
+ 
+   /* Nonzero if the current function uses the constant pool.  */
+   unsigned int uses_const_pool : 1;
+ 
+   /* Nonzero if the current function uses pic_offset_table_rtx.  */
+   unsigned int uses_pic_offset_table : 1;
+ 
+   /* Nonzero if the current function needs an lsda for exception handling.  */
+   unsigned int uses_eh_lsda : 1;
  };
  
  /* The function currently being compiled.  */



More information about the Gcc-patches mailing list