X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Flanghooks.h;h=db7a35e16a5ced883e48fd72048b27c159507e5d;hp=43749a24e88b7592641001ce2a5deeafe40938bd;hb=f1148292f050c38acb714a13d98e2a774e5a0145;hpb=ce45a448519f33c37b3ab6819fed86b28c267ab8 diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 43749a24e88..db7a35e16a5 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -1,5 +1,5 @@ /* The lang_hooks data structure. - Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -15,8 +15,8 @@ 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, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #ifndef GCC_LANG_HOOKS_H #define GCC_LANG_HOOKS_H @@ -25,6 +25,8 @@ Boston, MA 02111-1307, USA. */ struct diagnostic_context; +struct gimplify_omp_ctx; + /* A print hook for print_tree (). */ typedef void (*lang_print_tree_hook) (FILE *, tree, int indent); @@ -35,7 +37,7 @@ struct lang_hooks_for_tree_inlining { tree (*walk_subtrees) (tree *, int *, tree (*) (tree *, int *, void *), - void *, void *); + void *, struct pointer_set_t*); int (*cannot_inline_tree_fn) (tree *); int (*disregard_inline_limits) (tree); tree (*add_pending_fn_decls) (void *, tree); @@ -120,7 +122,7 @@ struct lang_hooks_for_types /* Given a type, apply default promotions to unnamed function arguments and return the new type. Return the same type if no change. Required by any language that supports variadic - arguments. The default hook aborts. */ + arguments. The default hook dies. */ tree (*type_promotes_to) (tree); /* Register TYPE as a builtin type with the indicated NAME. The @@ -142,6 +144,10 @@ struct lang_hooks_for_types for a type. */ tree (*max_size) (tree); + /* Register language specific type size variables as potentially OpenMP + firstprivate variables. */ + void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree); + /* Nonzero if types that are identical are to be hashed so that only one copy is kept. If a language requires unique types for each user-specified type, such as Ada, this should be set to TRUE. */ @@ -192,6 +198,38 @@ struct lang_hooks_for_decls value will be the string already stored in an IDENTIFIER_NODE.) */ const char * (*comdat_group) (tree); + + /* True if OpenMP should privatize what this DECL points to rather + than the DECL itself. */ + bool (*omp_privatize_by_reference) (tree); + + /* Return sharing kind if OpenMP sharing attribute of DECL is + predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise. */ + enum omp_clause_default_kind (*omp_predetermined_sharing) (tree); + + /* Return true if DECL's DECL_VALUE_EXPR (if any) should be + disregarded in OpenMP construct, because it is going to be + remapped during OpenMP lowering. SHARED is true if DECL + is going to be shared, false if it is going to be privatized. */ + bool (*omp_disregard_value_expr) (tree, bool); + + /* Return true if DECL that is shared iff SHARED is true should + be put into OMP_CLAUSE_PRIVATE_DEBUG. */ + bool (*omp_private_debug_clause) (tree, bool); + + /* Build and return code for a default constructor for DECL in + response to CLAUSE. Return NULL if nothing to be done. */ + tree (*omp_clause_default_ctor) (tree clause, tree decl); + + /* Build and return code for a copy constructor from SRC to DST. */ + tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src); + + /* Similarly, except use an assignment operator instead. */ + tree (*omp_clause_assign_op) (tree clause, tree dst, tree src); + + /* Build and return code destructing DECL. Return NULL if nothing + to be done. */ + tree (*omp_clause_dtor) (tree clause, tree decl); }; /* Language-specific hooks. See langhooks-def.h for defaults. */ @@ -207,7 +245,7 @@ struct lang_hooks /* Determines the size of any language-specific tcc_constant or tcc_exceptional nodes. Since it is called from make_node, the - only information available is the tree code. Expected to abort + only information available is the tree code. Expected to die on unrecognized codes. */ size_t (*tree_size) (enum tree_code); @@ -277,19 +315,6 @@ struct lang_hooks 1 if handled, 0 otherwise. */ int (*expand_decl) (tree); - /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical - operation. - - This preparation consists of taking the ordinary representation - of an expression expr and producing a valid tree boolean - expression describing whether expr is nonzero. We could simply - always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1), - but we optimize comparisons, &&, ||, and !. - - The result should be an expression of boolean type (if not an - error_mark_node). */ - tree (*truthvalue_conversion) (tree); - /* Hook called by safe_from_p for language-specific tree codes. It is up to the language front-end to install a hook if it has any such codes that safe_from_p needs to know about. Since same_from_p will @@ -322,10 +347,6 @@ struct lang_hooks assembler does not talk about it. */ void (*set_decl_assembler_name) (tree); - /* Return nonzero if fold-const is free to use bit-field - optimizations, for instance in fold_truthop(). */ - bool (*can_use_bit_fields_p) (void); - /* Nonzero if operations on types narrower than their mode should have their results reduced to the precision of the type. */ bool reduce_bit_field_operations; @@ -357,6 +378,11 @@ struct lang_hooks types in C++. */ const char *(*decl_printable_name) (tree decl, int verbosity); + /* Computes the dwarf-2/3 name for a tree. VERBOSITY determines what + information will be printed: 0: DECL_NAME, demangled as + necessary. 1: and scope information. */ + const char *(*dwarf_name) (tree, int verbosity); + /* This compares two types for equivalence ("compatible" in C-based languages). This routine should only return 1 if it is sure. It should not be used in contexts where erroneously returning 0 causes problems. */ @@ -374,6 +400,15 @@ struct lang_hooks semantics in cases that it doesn't want to handle specially. */ tree (*expr_size) (tree); + /* Convert a character from the host's to the target's character + set. The character should be in what C calls the "basic source + character set" (roughly, the set of characters defined by plain + old ASCII). The default is to return the character unchanged, + which is correct in most circumstances. Note that both argument + and result should be sign-extended under -fsigned-char, + zero-extended under -fno-signed-char. */ + HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT); + /* Pointers to machine-independent attribute tables, for front ends using attribs.c. If one is NULL, it is ignored. Respectively, a table of attributes specific to the language, a table of @@ -404,17 +439,17 @@ struct lang_hooks KNOWN_TYPE carries the true type of the OBJ_TYPE_REF_OBJECT. */ tree (*fold_obj_type_ref) (tree, tree); - /* Return a definition for a builtin function named NAME and whose data type - is TYPE. TYPE should be a function type with argument types. - FUNCTION_CODE tells later passes how to compile calls to this function. - See tree.h for its possible values. + /* Do language specific processing in the builtin function DECL */ + tree (*builtin_function) (tree decl); + + /* Used to set up the tree_contains_structure array for a frontend. */ + void (*init_ts) (void); - If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, - the name to be called if we can't opencode the function. If - ATTRS is nonzero, use that for the function's attribute list. */ - tree (*builtin_function) (const char *name, tree type, int function_code, - enum built_in_class bt_class, - const char *library_name, tree attrs); + /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR + to a contained expression or DECL, possibly updating *TC, *TI or + *SE if in the process TREE_CONSTANT, TREE_INVARIANT or + TREE_SIDE_EFFECTS need updating. */ + tree (*expr_to_decl) (tree expr, bool *tc, bool *ti, bool *se); /* Whenever you add entries here, make sure you adjust langhooks-def.h and langhooks.c accordingly. */ @@ -422,5 +457,9 @@ struct lang_hooks /* Each front end provides its own. */ extern const struct lang_hooks lang_hooks; +extern tree add_builtin_function (const char *name, tree type, + int function_code, enum built_in_class cl, + const char *library_name, + tree attrs); #endif /* GCC_LANG_HOOKS_H */