aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-08-28 09:03:59 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-08-28 09:03:59 +0000
commitc536a6a77a19a895e51e5e5167d266bd8ce61001 (patch)
tree011fca32e4efb23ba0a1e1758ff407cd0dc46ae8 /gcc/tree.h
parent44d5230cc3b623e04e46b2674fbf971743e55057 (diff)
downloadgcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.zip
gcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.tar.gz
gcc-c536a6a77a19a895e51e5e5167d266bd8ce61001.tar.bz2
tree.h (DECL_DISREGARD_INLINE_LIMITS): New.
2007-08-28 Richard Guenther <rguenther@suse.de> * tree.h (DECL_DISREGARD_INLINE_LIMITS): New. (struct tree_function_decl): Make function_code a bitfield. Add disregard_inline_limits flag. * cgraphunit.c (cgraph_process_new_functions): Check DECL_DISREGARD_INLINE_LIMITS instead of disregard_inline_limits_p. (cgraph_preserve_function_body_p): Likewise. * ipa-inline.c (compute_inline_parameters): Likewise. * c-decl.c (finish_function): Set DECL_DISREGARD_INLINE_LIMITS for GNU C extern inline functions. (merge_decls): Merge DECL_DISREGARD_INLINE_LIMITS. * tree-inline.c (disregard_inline_limits_p): Remove. * tree-inline.h (disregard_inline_limits_p): Likewise. * c-common.c (handle_always_inline_attribute): Set DECL_DISREGARD_INLINE_LIMITS. * langhooks.c (add_builtin_function): Verify the function code fits in the bitfield. cp/ * decl.c (duplicate_decls): Merge DECL_DISREGARD_INLINE_LIMITS. From-SVN: r127851
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h23
1 files changed, 18 insertions, 5 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index 43f4021..b3a5955 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3273,6 +3273,13 @@ struct tree_decl_non_common GTY(())
#define DECL_DECLARED_INLINE_P(NODE) \
(FUNCTION_DECL_CHECK (NODE)->function_decl.declared_inline_flag)
+/* Nonzero in a FUNCTION_DECL that should be always inlined by the inliner
+ disregarding size and cost heuristics. This is equivalent to using
+ the always_inline attribute without the required diagnostics if the
+ function cannot be inlined. */
+#define DECL_DISREGARD_INLINE_LIMITS(NODE) \
+ (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits)
+
/* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
that describes the status of this function. */
#define DECL_STRUCT_FUNCTION(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
@@ -3299,27 +3306,33 @@ struct tree_function_decl GTY(())
{
struct tree_decl_non_common common;
+ struct function *f;
+
/* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
- DECL_FUNCTION_CODE. Otherwise unused. */
- enum built_in_function function_code;
+ DECL_FUNCTION_CODE. Otherwise unused.
+ ??? The bitfield needs to be able to hold all target function
+ codes as well. */
+ ENUM_BITFIELD(built_in_function) function_code : 10;
+ ENUM_BITFIELD(built_in_class) built_in_class : 2;
unsigned static_ctor_flag : 1;
unsigned static_dtor_flag : 1;
unsigned uninlinable : 1;
unsigned possibly_inlined : 1;
+
unsigned novops_flag : 1;
unsigned returns_twice_flag : 1;
unsigned malloc_flag : 1;
unsigned pure_flag : 1;
-
unsigned declared_inline_flag : 1;
unsigned regdecl_flag : 1;
unsigned inline_flag : 1;
unsigned no_instrument_function_entry_exit : 1;
+
unsigned no_limit_stack : 1;
- ENUM_BITFIELD(built_in_class) built_in_class : 2;
+ unsigned disregard_inline_limits : 1;
- struct function *f;
+ /* 6 bits left */
};
/* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */