OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [langhooks.h] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* The lang_hooks data structure.
2
   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
3
   Free Software Foundation, Inc.
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
10
any later version.
11
 
12
GCC is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3.  If not see
19
<http://www.gnu.org/licenses/>.  */
20
 
21
#ifndef GCC_LANG_HOOKS_H
22
#define GCC_LANG_HOOKS_H
23
 
24
/* This file should be #include-d after tree.h.  */
25
 
26
struct diagnostic_context;
27
 
28
struct gimplify_omp_ctx;
29
 
30
/* A print hook for print_tree ().  */
31
typedef void (*lang_print_tree_hook) (FILE *, tree, int indent);
32
 
33
/* The following hooks are documented in langhooks.c.  Must not be
34
   NULL.  */
35
 
36
struct lang_hooks_for_tree_inlining
37
{
38
  tree (*walk_subtrees) (tree *, int *,
39
                         tree (*) (tree *, int *, void *),
40
                         void *, struct pointer_set_t*);
41
  int (*cannot_inline_tree_fn) (tree *);
42
  int (*disregard_inline_limits) (tree);
43
  tree (*add_pending_fn_decls) (void *, tree);
44
  int (*auto_var_in_fn_p) (tree, tree);
45
  int (*anon_aggr_type_p) (tree);
46
  bool (*var_mod_type_p) (tree, tree);
47
  int (*start_inlining) (tree);
48
  void (*end_inlining) (tree);
49
  tree (*convert_parm_for_inlining) (tree, tree, tree, int);
50
};
51
 
52
struct lang_hooks_for_callgraph
53
{
54
  /* The node passed is a language-specific tree node.  If its contents
55
     are relevant to use of other declarations, mark them.  */
56
  tree (*analyze_expr) (tree *, int *, tree);
57
 
58
  /* Produce RTL for function passed as argument.  */
59
  void (*expand_function) (tree);
60
};
61
 
62
/* Lang hooks for management of language-specific data or status
63
   when entering / leaving functions etc.  */
64
struct lang_hooks_for_functions
65
{
66
  /* Called when entering a function.  */
67
  void (*init) (struct function *);
68
 
69
  /* Called when leaving a function.  */
70
  void (*final) (struct function *);
71
 
72
  /* Called when entering a nested function.  */
73
  void (*enter_nested) (struct function *);
74
 
75
  /* Called when leaving a nested function.  */
76
  void (*leave_nested) (struct function *);
77
 
78
  /* Determines if it's ok for a function to have no noreturn attribute.  */
79
  bool (*missing_noreturn_ok_p) (tree);
80
};
81
 
82
/* The following hooks are used by tree-dump.c.  */
83
 
84
struct lang_hooks_for_tree_dump
85
{
86
  /* Dump language-specific parts of tree nodes.  Returns nonzero if it
87
     does not want the usual dumping of the second argument.  */
88
  bool (*dump_tree) (void *, tree);
89
 
90
  /* Determine type qualifiers in a language-specific way.  */
91
  int (*type_quals) (tree);
92
};
93
 
94
/* Hooks related to types.  */
95
 
96
struct lang_hooks_for_types
97
{
98
  /* Return a new type (with the indicated CODE), doing whatever
99
     language-specific processing is required.  */
100
  tree (*make_type) (enum tree_code);
101
 
102
  /* Given MODE and UNSIGNEDP, return a suitable type-tree with that
103
     mode.  */
104
  tree (*type_for_mode) (enum machine_mode, int);
105
 
106
  /* Given PRECISION and UNSIGNEDP, return a suitable type-tree for an
107
     integer type with at least that precision.  */
108
  tree (*type_for_size) (unsigned, int);
109
 
110
  /* Given an integer type T, return a type like T but unsigned.
111
     If T is unsigned, the value is T.  */
112
  tree (*unsigned_type) (tree);
113
 
114
  /* Given an integer type T, return a type like T but signed.
115
     If T is signed, the value is T.  */
116
  tree (*signed_type) (tree);
117
 
118
  /* Return a type the same as TYPE except unsigned or signed
119
     according to UNSIGNEDP.  */
120
  tree (*signed_or_unsigned_type) (int, tree);
121
 
122
  /* Given a type, apply default promotions to unnamed function
123
     arguments and return the new type.  Return the same type if no
124
     change.  Required by any language that supports variadic
125
     arguments.  The default hook dies.  */
126
  tree (*type_promotes_to) (tree);
127
 
128
  /* Register TYPE as a builtin type with the indicated NAME.  The
129
     TYPE is placed in the outermost lexical scope.  The semantics
130
     should be analogous to:
131
 
132
       typedef TYPE NAME;
133
 
134
     in C.  The default hook ignores the declaration.  */
135
  void (*register_builtin_type) (tree, const char *);
136
 
137
  /* This routine is called in tree.c to print an error message for
138
     invalid use of an incomplete type.  VALUE is the expression that
139
     was used (or 0 if that isn't known) and TYPE is the type that was
140
     invalid.  */
141
  void (*incomplete_type_error) (tree value, tree type);
142
 
143
  /* Called from assign_temp to return the maximum size, if there is one,
144
     for a type.  */
145
  tree (*max_size) (tree);
146
 
147
  /* Register language specific type size variables as potentially OpenMP
148
     firstprivate variables.  */
149
  void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree);
150
 
151
  /* Nonzero if types that are identical are to be hashed so that only
152
     one copy is kept.  If a language requires unique types for each
153
     user-specified type, such as Ada, this should be set to TRUE.  */
154
  bool hash_types;
155
};
156
 
157
/* Language hooks related to decls and the symbol table.  */
158
 
159
struct lang_hooks_for_decls
160
{
161
  /* Returns nonzero if we are in the global binding level.  Ada
162
     returns -1 for an undocumented reason used in stor-layout.c.  */
163
  int (*global_bindings_p) (void);
164
 
165
  /* Insert BLOCK at the end of the list of subblocks of the
166
     current binding level.  This is used when a BIND_EXPR is expanded,
167
     to handle the BLOCK node inside the BIND_EXPR.  */
168
  void (*insert_block) (tree);
169
 
170
  /* Function to add a decl to the current scope level.  Takes one
171
     argument, a decl to add.  Returns that decl, or, if the same
172
     symbol is already declared, may return a different decl for that
173
     name.  */
174
  tree (*pushdecl) (tree);
175
 
176
  /* Returns the chain of decls so far in the current scope level.  */
177
  tree (*getdecls) (void);
178
 
179
  /* Returns true when we should warn for an unused global DECL.
180
     We will already have checked that it has static binding.  */
181
  bool (*warn_unused_global) (tree);
182
 
183
  /* Obtain a list of globals and do final output on them at end
184
     of compilation */
185
  void (*final_write_globals) (void);
186
 
187
  /* Do necessary preparations before assemble_variable can proceed.  */
188
  void (*prepare_assemble_variable) (tree);
189
 
190
  /* True if this decl may be called via a sibcall.  */
191
  bool (*ok_for_sibcall) (tree);
192
 
193
  /* Return the COMDAT group into which this DECL should be placed.
194
     It is known that the DECL belongs in *some* COMDAT group when
195
     this hook is called.  The return value will be used immediately,
196
     but not explicitly deallocated, so implementations should not use
197
     xmalloc to allocate the string returned.  (Typically, the return
198
     value will be the string already stored in an
199
     IDENTIFIER_NODE.)  */
200
  const char * (*comdat_group) (tree);
201
 
202
  /* True if OpenMP should privatize what this DECL points to rather
203
     than the DECL itself.  */
204
  bool (*omp_privatize_by_reference) (tree);
205
 
206
  /* Return sharing kind if OpenMP sharing attribute of DECL is
207
     predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise.  */
208
  enum omp_clause_default_kind (*omp_predetermined_sharing) (tree);
209
 
210
  /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
211
     disregarded in OpenMP construct, because it is going to be
212
     remapped during OpenMP lowering.  SHARED is true if DECL
213
     is going to be shared, false if it is going to be privatized.  */
214
  bool (*omp_disregard_value_expr) (tree, bool);
215
 
216
  /* Return true if DECL that is shared iff SHARED is true should
217
     be put into OMP_CLAUSE_PRIVATE_DEBUG.  */
218
  bool (*omp_private_debug_clause) (tree, bool);
219
 
220
  /* Build and return code for a default constructor for DECL in
221
     response to CLAUSE.  Return NULL if nothing to be done.  */
222
  tree (*omp_clause_default_ctor) (tree clause, tree decl);
223
 
224
  /* Build and return code for a copy constructor from SRC to DST.  */
225
  tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src);
226
 
227
  /* Similarly, except use an assignment operator instead.  */
228
  tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
229
 
230
  /* Build and return code destructing DECL.  Return NULL if nothing
231
     to be done.  */
232
  tree (*omp_clause_dtor) (tree clause, tree decl);
233
};
234
 
235
/* Language-specific hooks.  See langhooks-def.h for defaults.  */
236
 
237
struct lang_hooks
238
{
239
  /* String identifying the front end.  e.g. "GNU C++".  */
240
  const char *name;
241
 
242
  /* sizeof (struct lang_identifier), so make_node () creates
243
     identifier nodes long enough for the language-specific slots.  */
244
  size_t identifier_size;
245
 
246
  /* Determines the size of any language-specific tcc_constant or
247
     tcc_exceptional nodes.  Since it is called from make_node, the
248
     only information available is the tree code.  Expected to die
249
     on unrecognized codes.  */
250
  size_t (*tree_size) (enum tree_code);
251
 
252
  /* The first callback made to the front end, for simple
253
     initialization needed before any calls to handle_option.  Return
254
     the language mask to filter the switch array with.  */
255
  unsigned int (*init_options) (unsigned int argc, const char **argv);
256
 
257
  /* Callback used to perform language-specific initialization for the
258
     global diagnostic context structure.  */
259
  void (*initialize_diagnostics) (struct diagnostic_context *);
260
 
261
  /* Handle the switch CODE, which has real type enum opt_code from
262
     options.h.  If the switch takes an argument, it is passed in ARG
263
     which points to permanent storage.  The handler is responsible for
264
     checking whether ARG is NULL, which indicates that no argument
265
     was in fact supplied.  For -f and -W switches, VALUE is 1 or 0
266
     for the positive and negative forms respectively.
267
 
268
     Return 1 if the switch is valid, 0 if invalid, and -1 if it's
269
     valid and should not be treated as language-independent too.  */
270
  int (*handle_option) (size_t code, const char *arg, int value);
271
 
272
  /* Return false to use the default complaint about a missing
273
     argument, otherwise output a complaint and return true.  */
274
  bool (*missing_argument) (const char *opt, size_t code);
275
 
276
  /* Called when all command line options have been parsed to allow
277
     further processing and initialization
278
 
279
     Should return true to indicate that a compiler back-end is
280
     not required, such as with the -E option.
281
 
282
     If errorcount is nonzero after this call the compiler exits
283
     immediately and the finish hook is not called.  */
284
  bool (*post_options) (const char **);
285
 
286
  /* Called after post_options to initialize the front end.  Return
287
     false to indicate that no further compilation be performed, in
288
     which case the finish hook is called immediately.  */
289
  bool (*init) (void);
290
 
291
  /* Called at the end of compilation, as a finalizer.  */
292
  void (*finish) (void);
293
 
294
  /* Parses the entire file.  The argument is nonzero to cause bison
295
     parsers to dump debugging information during parsing.  */
296
  void (*parse_file) (int);
297
 
298
  /* Called immediately after parsing to clear the binding stack.  */
299
  void (*clear_binding_stack) (void);
300
 
301
  /* Called to obtain the alias set to be used for an expression or type.
302
     Returns -1 if the language does nothing special for it.  */
303
  HOST_WIDE_INT (*get_alias_set) (tree);
304
 
305
  /* Called with an expression that is to be processed as a constant.
306
     Returns either the same expression or a language-independent
307
     constant equivalent to its input.  */
308
  tree (*expand_constant) (tree);
309
 
310
  /* Called by expand_expr for language-specific tree codes.
311
     Fourth argument is actually an enum expand_modifier.  */
312
  rtx (*expand_expr) (tree, rtx, enum machine_mode, int, rtx *);
313
 
314
  /* Called by expand_expr to generate the definition of a decl.  Returns
315
     1 if handled, 0 otherwise.  */
316
  int (*expand_decl) (tree);
317
 
318
  /* Hook called by safe_from_p for language-specific tree codes.  It is
319
     up to the language front-end to install a hook if it has any such
320
     codes that safe_from_p needs to know about.  Since same_from_p will
321
     recursively explore the TREE_OPERANDs of an expression, this hook
322
     should not reexamine those pieces.  This routine may recursively
323
     call safe_from_p; it should always pass `0' as the TOP_P
324
     parameter.  */
325
  int (*safe_from_p) (rtx, tree);
326
 
327
  /* Function to finish handling an incomplete decl at the end of
328
     compilation.  Default hook is does nothing.  */
329
  void (*finish_incomplete_decl) (tree);
330
 
331
  /* Mark EXP saying that we need to be able to take the address of
332
     it; it should not be allocated in a register.  Return true if
333
     successful.  */
334
  bool (*mark_addressable) (tree);
335
 
336
  /* Hook called by staticp for language-specific tree codes.  */
337
  tree (*staticp) (tree);
338
 
339
  /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the
340
     DECL_NODE with a newly GC-allocated copy.  */
341
  void (*dup_lang_specific_decl) (tree);
342
 
343
  /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of
344
     thing that the assembler should talk about, set
345
     DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
346
     Otherwise, set it to the ERROR_MARK_NODE to ensure that the
347
     assembler does not talk about it.  */
348
  void (*set_decl_assembler_name) (tree);
349
 
350
  /* Return nonzero if fold-const is free to use bit-field
351
     optimizations, for instance in fold_truthop().  */
352
  bool (*can_use_bit_fields_p) (void);
353
 
354
  /* Nonzero if operations on types narrower than their mode should
355
     have their results reduced to the precision of the type.  */
356
  bool reduce_bit_field_operations;
357
 
358
  /* Nonzero if this front end does not generate a dummy BLOCK between
359
     the outermost scope of the function and the FUNCTION_DECL.  See
360
     is_body_block in stmt.c, and its callers.  */
361
  bool no_body_blocks;
362
 
363
  /* The front end can add its own statistics to -fmem-report with
364
     this hook.  It should output to stderr.  */
365
  void (*print_statistics) (void);
366
 
367
  /* Called by print_tree when there is a tree of class tcc_exceptional
368
     that it doesn't know how to display.  */
369
  lang_print_tree_hook print_xnode;
370
 
371
  /* Called to print language-dependent parts of tcc_decl, tcc_type,
372
     and IDENTIFIER_NODE nodes.  */
373
  lang_print_tree_hook print_decl;
374
  lang_print_tree_hook print_type;
375
  lang_print_tree_hook print_identifier;
376
 
377
  /* Computes the name to use to print a declaration.  DECL is the
378
     non-NULL declaration in question.  VERBOSITY determines what
379
     information will be printed: 0: DECL_NAME, demangled as
380
     necessary.  1: and scope information.  2: and any other
381
     information that might be interesting, such as function parameter
382
     types in C++.  */
383
  const char *(*decl_printable_name) (tree decl, int verbosity);
384
 
385
  /* Computes the dwarf-2/3 name for a tree.  VERBOSITY determines what
386
     information will be printed: 0: DECL_NAME, demangled as
387
     necessary.  1: and scope information.  */
388
  const char *(*dwarf_name) (tree, int verbosity);
389
 
390
  /* This compares two types for equivalence ("compatible" in C-based languages).
391
     This routine should only return 1 if it is sure.  It should not be used
392
     in contexts where erroneously returning 0 causes problems.  */
393
  int (*types_compatible_p) (tree x, tree y);
394
 
395
  /* Given a CALL_EXPR, return a function decl that is its target.  */
396
  tree (*lang_get_callee_fndecl) (tree);
397
 
398
  /* Called by report_error_function to print out function name.  */
399
  void (*print_error_function) (struct diagnostic_context *, const char *);
400
 
401
  /* Called from expr_size to calculate the size of the value of an
402
     expression in a language-dependent way.  Returns a tree for the size
403
     in bytes.  A frontend can call lhd_expr_size to get the default
404
     semantics in cases that it doesn't want to handle specially.  */
405
  tree (*expr_size) (tree);
406
 
407
  /* Convert a character from the host's to the target's character
408
     set.  The character should be in what C calls the "basic source
409
     character set" (roughly, the set of characters defined by plain
410
     old ASCII).  The default is to return the character unchanged,
411
     which is correct in most circumstances.  Note that both argument
412
     and result should be sign-extended under -fsigned-char,
413
     zero-extended under -fno-signed-char.  */
414
  HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT);
415
 
416
  /* Pointers to machine-independent attribute tables, for front ends
417
     using attribs.c.  If one is NULL, it is ignored.  Respectively, a
418
     table of attributes specific to the language, a table of
419
     attributes common to two or more languages (to allow easy
420
     sharing), and a table of attributes for checking formats.  */
421
  const struct attribute_spec *attribute_table;
422
  const struct attribute_spec *common_attribute_table;
423
  const struct attribute_spec *format_attribute_table;
424
 
425
  /* Function-related language hooks.  */
426
  struct lang_hooks_for_functions function;
427
 
428
  struct lang_hooks_for_tree_inlining tree_inlining;
429
 
430
  struct lang_hooks_for_callgraph callgraph;
431
 
432
  struct lang_hooks_for_tree_dump tree_dump;
433
 
434
  struct lang_hooks_for_decls decls;
435
 
436
  struct lang_hooks_for_types types;
437
 
438
  /* Perform language-specific gimplification on the argument.  Returns an
439
     enum gimplify_status, though we can't see that type here.  */
440
  int (*gimplify_expr) (tree *, tree *, tree *);
441
 
442
  /* Fold an OBJ_TYPE_REF expression to the address of a function.
443
     KNOWN_TYPE carries the true type of the OBJ_TYPE_REF_OBJECT.  */
444
  tree (*fold_obj_type_ref) (tree, tree);
445
 
446
  /* Return a definition for a builtin function named NAME and whose data type
447
     is TYPE.  TYPE should be a function type with argument types.
448
     FUNCTION_CODE tells later passes how to compile calls to this function.
449
     See tree.h for its possible values.
450
 
451
     If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
452
     the name to be called if we can't opencode the function.  If
453
     ATTRS is nonzero, use that for the function's attribute list.  */
454
  tree (*builtin_function) (const char *name, tree type, int function_code,
455
                            enum built_in_class bt_class,
456
                            const char *library_name, tree attrs);
457
 
458
  /* Used to set up the tree_contains_structure array for a frontend. */
459
  void (*init_ts) (void);
460
 
461
  /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR
462
     to a contained expression or DECL, possibly updating *TC, *TI or
463
     *SE if in the process TREE_CONSTANT, TREE_INVARIANT or
464
     TREE_SIDE_EFFECTS need updating.  */
465
  tree (*expr_to_decl) (tree expr, bool *tc, bool *ti, bool *se);
466
 
467
  /* Whenever you add entries here, make sure you adjust langhooks-def.h
468
     and langhooks.c accordingly.  */
469
};
470
 
471
/* Each front end provides its own.  */
472
extern const struct lang_hooks lang_hooks;
473
 
474
#endif /* GCC_LANG_HOOKS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.