PR tree-optimization/45830
[official-gcc.git] / gcc / streamer-hooks.h
blob0c1d483ac6ac763b06e2050cfe5e7cb578160f1b
1 /* Streamer hooks. Support for adding streamer-specific callbacks to
2 generic streaming routines.
4 Copyright 2011 Free Software Foundation, Inc.
5 Contributed by Diego Novillo <dnovillo@google.com>
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 #ifndef GCC_STREAMER_HOOKS_H
24 #define GCC_STREAMER_HOOKS_H
26 #include "tree.h"
28 /* Forward declarations to avoid including unnecessary headers. */
29 struct output_block;
30 struct lto_input_block;
31 struct data_in;
33 /* Streamer hooks. These functions do additional processing as
34 needed by the module. There are two types of callbacks, those that
35 replace the default behavior and those that supplement it.
37 Hooks marked [REQ] are required to be set. Those marked [OPT] may
38 be NULL, if the streamer does not need to implement them. */
39 struct streamer_hooks {
40 /* [REQ] Called by every tree streaming routine that needs to write
41 a tree node. The arguments are: output_block where to write the
42 node, the tree node to write and a boolean flag that should be true
43 if the caller wants to write a reference to the tree, instead of the
44 tree itself. The referencing mechanism is up to each streamer to
45 implement. */
46 void (*write_tree) (struct output_block *, tree, bool);
48 /* [REQ] Called by every tree streaming routine that needs to read
49 a tree node. It takes two arguments: an lto_input_block pointing
50 to the buffer where to read from and a data_in instance with tables
51 and descriptors needed by the unpickling routines. It returns the
52 tree instantiated from the stream. */
53 tree (*read_tree) (struct lto_input_block *, struct data_in *);
55 /* [OPT] Called by lto_input_location to retrieve the source location of the
56 tree currently being read. If this hook returns NULL, lto_input_location
57 defaults to calling lto_input_location_bitpack. */
58 location_t (*input_location) (struct lto_input_block *, struct data_in *);
60 /* [OPT] Called by lto_output_location to write the source_location of the
61 tree currently being written. If this hook returns NULL,
62 lto_output_location defaults to calling lto_output_location_bitpack. */
63 void (*output_location) (struct output_block *, location_t);
66 #define stream_write_tree(OB, EXPR, REF_P) \
67 streamer_hooks.write_tree(OB, EXPR, REF_P)
69 #define stream_read_tree(IB, DATA_IN) \
70 streamer_hooks.read_tree(IB, DATA_IN)
72 /* Streamer hooks. */
73 extern struct streamer_hooks streamer_hooks;
75 /* In streamer-hooks.c. */
76 void streamer_hooks_init (void);
78 #endif /* GCC_STREAMER_HOOKS_H */