annotate gcc/lto-streamer.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Data structures and declarations used for reading and writing
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 GIMPLE to a file stream.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
4 Copyright (C) 2009-2020 Free Software Foundation, Inc.
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 Contributed by Doug Kwan <dougkwan@google.com>
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 This file is part of GCC.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 GCC is free software; you can redistribute it and/or modify it under
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 the terms of the GNU General Public License as published by the Free
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 Software Foundation; either version 3, or (at your option) any later
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 version.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 for more details.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 along with GCC; see the file COPYING3. If not see
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 <http://www.gnu.org/licenses/>. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #ifndef GCC_LTO_STREAMER_H
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #define GCC_LTO_STREAMER_H
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 #include "plugin-api.h"
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
27 #include "gcov-io.h"
111
kono
parents: 67
diff changeset
28 #include "diagnostic.h"
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 /* The encoding for a function consists of the following sections:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 1) The header.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 2) FIELD_DECLS.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 3) FUNCTION_DECLS.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 4) global VAR_DECLS.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 5) type_decls
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 6) types.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 7) Names for the labels that have names
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 8) The SSA names.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 9) The control flow graph.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 10-11)Gimple for local decls.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 12) Gimple for the function.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 13) Strings.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 1) THE HEADER.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 2-6) THE GLOBAL DECLS AND TYPES.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 The global decls and types are encoded in the same way. For each
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 entry, there is word with the offset within the section to the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 entry.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 7) THE LABEL NAMES.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 Since most labels do not have names, this section my be of zero
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 length. It consists of an array of string table references, one
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 per label. In the lto code, the labels are given either
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 positive or negative indexes. the positive ones have names and
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 the negative ones do not. The positive index can be used to
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 find the name in this array.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 9) THE CFG.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 10) Index into the local decls. Since local decls can have local
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 decls inside them, they must be read in randomly in order to
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 properly restore them.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 The gimple consists of a set of records.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 THE FUNCTION
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 At the top level of (8) is the function. It consists of five
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 pieces:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 LTO_function - The tag.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 eh tree - This is all of the exception handling regions
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 put out in a post order traversial of the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 tree. Siblings are output as lists terminated
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 by a 0. The set of fields matches the fields
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 defined in except.c.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 last_basic_block - in uleb128 form.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 basic blocks - This is the set of basic blocks.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 zero - The termination of the basic blocks.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 BASIC BLOCKS
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 There are two forms of basic blocks depending on if they are
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 empty or not.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 The basic block consists of:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 LTO_bb1 or LTO_bb0 - The tag.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 bb->index - the index in uleb128 form.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 #succs - The number of successors un uleb128 form.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 the successors - For each edge, a pair. The first of the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 pair is the index of the successor in
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 uleb128 form and the second are the flags in
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 uleb128 form.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 the statements - A gimple tree, as described above.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 These are only present for LTO_BB1.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 Following each statement is an optional
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 exception handling record LTO_eh_region
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 which contains the region number (for
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 regions >= 0).
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 zero - This is only present for LTO_BB1 and is used
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 to terminate the statements and exception
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 regions within this block.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 12) STRINGS
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 String are represented in the table as pairs, a length in ULEB128
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 form followed by the data for the string. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 #define LTO_major_version 9
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 #define LTO_minor_version 0
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 typedef unsigned char lto_decl_flags_t;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 /* Tags representing the various IL objects written to the bytecode file
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 NOTE, when adding new LTO tags, also update lto_tag_name. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 enum LTO_tags
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 LTO_null = 0,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
111
kono
parents: 67
diff changeset
137 /* Special for streamer. Reference to previously-streamed node. */
kono
parents: 67
diff changeset
138 LTO_tree_pickle_reference,
kono
parents: 67
diff changeset
139
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 /* Reserve enough entries to fit all the tree and gimple codes handled
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 by the streamer. This guarantees that:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 1- Given a tree code C:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 enum LTO_tags tag == C + 1
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 2- Given a gimple code C:
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 enum LTO_tags tag == C + NUM_TREE_CODES + 1
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 Conversely, to map between LTO tags and tree/gimple codes, the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 reverse operation must be applied. */
111
kono
parents: 67
diff changeset
151 LTO_bb0 = 1 + MAX_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 LTO_bb1,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 /* EH region holding the previous statement. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 LTO_eh_region,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
111
kono
parents: 67
diff changeset
157 /* Shared INTEGER_CST node. */
kono
parents: 67
diff changeset
158 LTO_integer_cst,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 /* Function body. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 LTO_function,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 /* EH table. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 LTO_eh_table,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 /* EH region types. These mirror enum eh_region_type. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 LTO_ert_cleanup,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 LTO_ert_try,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 LTO_ert_allowed_exceptions,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 LTO_ert_must_not_throw,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 /* EH landing pad. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 LTO_eh_landing_pad,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 /* EH try/catch node. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 LTO_eh_catch,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
111
kono
parents: 67
diff changeset
178 /* Special for global streamer. A blob of unnamed tree nodes. */
kono
parents: 67
diff changeset
179 LTO_tree_scc,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 /* References to indexable tree nodes. These objects are stored in
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 tables that are written separately from the function bodies that
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 reference them. This way they can be instantiated even when the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 referencing functions aren't (e.g., during WPA) and it also allows
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 functions to be copied from one file to another without having
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 to unpickle the body first (the references are location
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 independent).
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 NOTE, do not regroup these values as the grouping is exposed
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 in the range checks done in lto_input_tree. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 LTO_field_decl_ref, /* Do not change. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 LTO_function_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 LTO_label_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 LTO_namespace_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 LTO_result_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 LTO_ssa_name_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 LTO_type_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 LTO_type_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 LTO_const_decl_ref,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 LTO_imported_decl_ref,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
201 LTO_translation_unit_decl_ref,
111
kono
parents: 67
diff changeset
202 LTO_global_decl_ref,
kono
parents: 67
diff changeset
203 LTO_namelist_decl_ref, /* Do not change. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 /* This tag must always be last. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 LTO_NUM_TAGS
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 /* Set of section types that are in an LTO file. This list will grow
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 as the number of IPA passes grows since each IPA pass will need its
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 own section type to store its summary information.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 When adding a new section type, you must also extend the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 LTO_SECTION_NAME array in lto-section-in.c. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 enum lto_section_type
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 LTO_section_decls = 0,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 LTO_section_function_body,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 LTO_section_static_initializer,
111
kono
parents: 67
diff changeset
221 LTO_section_symtab,
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
222 LTO_section_refs,
111
kono
parents: 67
diff changeset
223 LTO_section_asm,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 LTO_section_jump_functions,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 LTO_section_ipa_pure_const,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 LTO_section_ipa_reference,
111
kono
parents: 67
diff changeset
227 LTO_section_ipa_profile,
kono
parents: 67
diff changeset
228 LTO_section_symtab_nodes,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 LTO_section_opts,
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
230 LTO_section_cgraph_opt_sum,
111
kono
parents: 67
diff changeset
231 LTO_section_ipa_fn_summary,
kono
parents: 67
diff changeset
232 LTO_section_ipcp_transform,
kono
parents: 67
diff changeset
233 LTO_section_ipa_icf,
kono
parents: 67
diff changeset
234 LTO_section_offload_table,
kono
parents: 67
diff changeset
235 LTO_section_mode_table,
kono
parents: 67
diff changeset
236 LTO_section_ipa_hsa,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 LTO_section_lto,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 LTO_section_ipa_sra,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 LTO_N_SECTION_TYPES /* Must be last. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 /* Indices to the various function, type and symbol streams. */
111
kono
parents: 67
diff changeset
243 enum lto_decl_stream_e_t
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 LTO_DECL_STREAM_TYPE = 0, /* Must be first. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 LTO_DECL_STREAM_FIELD_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 LTO_DECL_STREAM_FN_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 LTO_DECL_STREAM_VAR_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 LTO_DECL_STREAM_TYPE_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 LTO_DECL_STREAM_NAMESPACE_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 LTO_DECL_STREAM_LABEL_DECL,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 LTO_N_DECL_STREAMS
111
kono
parents: 67
diff changeset
253 };
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 /* Macro to define convenience functions for type and decl streams
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 in lto_file_decl_data. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 #define DEFINE_DECL_STREAM_FUNCS(UPPER_NAME, name) \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 static inline tree \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 lto_file_decl_data_get_ ## name (struct lto_file_decl_data *data, \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 unsigned int idx) \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 { \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 struct lto_in_decl_state *state = data->current_decl_state; \
111
kono
parents: 67
diff changeset
266 return (*state->streams[LTO_DECL_STREAM_## UPPER_NAME])[idx]; \
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 } \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 static inline unsigned int \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 lto_file_decl_data_num_ ## name ## s (struct lto_file_decl_data *data) \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 { \
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 struct lto_in_decl_state *state = data->current_decl_state; \
111
kono
parents: 67
diff changeset
273 return vec_safe_length (state->streams[LTO_DECL_STREAM_## UPPER_NAME]); \
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 /* Return a char pointer to the start of a data stream for an lto pass
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 or function. The first parameter is the file data that contains
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 the information. The second parameter is the type of information
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 to be obtained. The third parameter is the name of the function
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 and is only used when finding a function body; otherwise it is
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 NULL. The fourth parameter is the length of the data returned. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 enum lto_section_type,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 const char *,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
286 int,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 size_t *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 /* Return the data found from the above call. The first three
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 parameters are the same as above. The fourth parameter is the data
111
kono
parents: 67
diff changeset
291 itself and the fifth is the length of the data. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 typedef void (lto_free_section_data_f) (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 enum lto_section_type,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 const char *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 const char *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 size_t);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297
111
kono
parents: 67
diff changeset
298 /* The location cache holds expanded locations for streamed in trees.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
299 This is done to reduce memory usage of libcpp linemap that strongly prefers
111
kono
parents: 67
diff changeset
300 locations to be inserted in the soruce order. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
301
111
kono
parents: 67
diff changeset
302 class lto_location_cache
kono
parents: 67
diff changeset
303 {
kono
parents: 67
diff changeset
304 public:
kono
parents: 67
diff changeset
305 /* Apply all changes in location cache. Add locations into linemap and patch
kono
parents: 67
diff changeset
306 trees. */
kono
parents: 67
diff changeset
307 bool apply_location_cache ();
kono
parents: 67
diff changeset
308 /* Tree merging did not suceed; mark all changes in the cache as accepted. */
kono
parents: 67
diff changeset
309 void accept_location_cache ();
kono
parents: 67
diff changeset
310 /* Tree merging did suceed; throw away recent changes. */
kono
parents: 67
diff changeset
311 void revert_location_cache ();
kono
parents: 67
diff changeset
312 void input_location (location_t *loc, struct bitpack_d *bp,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
313 class data_in *data_in);
111
kono
parents: 67
diff changeset
314 lto_location_cache ()
kono
parents: 67
diff changeset
315 : loc_cache (), accepted_length (0), current_file (NULL), current_line (0),
kono
parents: 67
diff changeset
316 current_col (0), current_sysp (false), current_loc (UNKNOWN_LOCATION)
kono
parents: 67
diff changeset
317 {
kono
parents: 67
diff changeset
318 gcc_assert (!current_cache);
kono
parents: 67
diff changeset
319 current_cache = this;
kono
parents: 67
diff changeset
320 }
kono
parents: 67
diff changeset
321 ~lto_location_cache ()
kono
parents: 67
diff changeset
322 {
kono
parents: 67
diff changeset
323 apply_location_cache ();
kono
parents: 67
diff changeset
324 gcc_assert (current_cache == this);
kono
parents: 67
diff changeset
325 current_cache = NULL;
kono
parents: 67
diff changeset
326 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327
111
kono
parents: 67
diff changeset
328 /* There can be at most one instance of location cache (combining multiple
kono
parents: 67
diff changeset
329 would bring it out of sync with libcpp linemap); point to current
kono
parents: 67
diff changeset
330 one. */
kono
parents: 67
diff changeset
331 static lto_location_cache *current_cache;
kono
parents: 67
diff changeset
332
kono
parents: 67
diff changeset
333 private:
kono
parents: 67
diff changeset
334 static int cmp_loc (const void *pa, const void *pb);
kono
parents: 67
diff changeset
335
kono
parents: 67
diff changeset
336 struct cached_location
kono
parents: 67
diff changeset
337 {
kono
parents: 67
diff changeset
338 const char *file;
kono
parents: 67
diff changeset
339 location_t *loc;
kono
parents: 67
diff changeset
340 int line, col;
kono
parents: 67
diff changeset
341 bool sysp;
kono
parents: 67
diff changeset
342 };
kono
parents: 67
diff changeset
343
kono
parents: 67
diff changeset
344 /* The location cache. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345
111
kono
parents: 67
diff changeset
346 auto_vec<cached_location> loc_cache;
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
347
111
kono
parents: 67
diff changeset
348 /* Accepted entries are ones used by trees that are known to be not unified
kono
parents: 67
diff changeset
349 by tree merging. */
kono
parents: 67
diff changeset
350
kono
parents: 67
diff changeset
351 int accepted_length;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
111
kono
parents: 67
diff changeset
353 /* Bookkeeping to remember state in between calls to lto_apply_location_cache
kono
parents: 67
diff changeset
354 When streaming gimple, the location cache is not used and thus
kono
parents: 67
diff changeset
355 lto_apply_location_cache happens per location basis. It is then
kono
parents: 67
diff changeset
356 useful to avoid redundant calls of linemap API. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357
111
kono
parents: 67
diff changeset
358 const char *current_file;
kono
parents: 67
diff changeset
359 int current_line;
kono
parents: 67
diff changeset
360 int current_col;
kono
parents: 67
diff changeset
361 bool current_sysp;
kono
parents: 67
diff changeset
362 location_t current_loc;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364
111
kono
parents: 67
diff changeset
365 /* Structure used as buffer for reading an LTO file. */
kono
parents: 67
diff changeset
366 class lto_input_block
kono
parents: 67
diff changeset
367 {
kono
parents: 67
diff changeset
368 public:
kono
parents: 67
diff changeset
369 /* Special constructor for the string table, it abuses this to
kono
parents: 67
diff changeset
370 do random access but use the uhwi decoder. */
kono
parents: 67
diff changeset
371 lto_input_block (const char *data_, unsigned int p_, unsigned int len_,
kono
parents: 67
diff changeset
372 const unsigned char *mode_table_)
kono
parents: 67
diff changeset
373 : data (data_), mode_table (mode_table_), p (p_), len (len_) {}
kono
parents: 67
diff changeset
374 lto_input_block (const char *data_, unsigned int len_,
kono
parents: 67
diff changeset
375 const unsigned char *mode_table_)
kono
parents: 67
diff changeset
376 : data (data_), mode_table (mode_table_), p (0), len (len_) {}
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 const char *data;
111
kono
parents: 67
diff changeset
379 const unsigned char *mode_table;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 unsigned int p;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 unsigned int len;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
384 /* Compression algorithm used for compression of LTO bytecode. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
386 enum lto_compression
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
387 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
388 ZLIB,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
389 ZSTD
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
390 };
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
391
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
392 /* Structure that represents LTO ELF section with information
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
393 about the format. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
394
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
395 struct lto_section
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 int16_t major_version;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 int16_t minor_version;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
399 unsigned char slim_object;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
400
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
401 /* Flags is a private field that is not defined publicly. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
402 uint16_t flags;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
403
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
404 /* Set compression to FLAGS. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
405 inline void set_compression (lto_compression c)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
406 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
407 flags = c;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
408 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
409
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
410 /* Get compression from FLAGS. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
411 inline lto_compression get_compression ()
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
412 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
413 return (lto_compression) flags;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
414 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
417 STATIC_ASSERT (sizeof (lto_section) == 8);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
418
111
kono
parents: 67
diff changeset
419 /* The is the first part of the record in an LTO file for many of the
kono
parents: 67
diff changeset
420 IPA passes. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
421 struct lto_simple_header
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 /* Size of main gimple body of function. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 int32_t main_size;
111
kono
parents: 67
diff changeset
425 };
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426
111
kono
parents: 67
diff changeset
427 struct lto_simple_header_with_strings : lto_simple_header
kono
parents: 67
diff changeset
428 {
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 /* Size of the string table. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 int32_t string_size;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
432
111
kono
parents: 67
diff changeset
433 /* The header for a function body. */
kono
parents: 67
diff changeset
434 struct lto_function_header : lto_simple_header_with_strings
kono
parents: 67
diff changeset
435 {
kono
parents: 67
diff changeset
436 /* Size of the cfg. */
kono
parents: 67
diff changeset
437 int32_t cfg_size;
kono
parents: 67
diff changeset
438 };
kono
parents: 67
diff changeset
439
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 /* Structure describing a symbol section. */
111
kono
parents: 67
diff changeset
442 struct lto_decl_header : lto_simple_header_with_strings
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 /* Size of region for decl state. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 int32_t decl_state_size;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 /* Number of nodes in globals stream. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 int32_t num_nodes;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 /* Statistics gathered during LTO, WPA and LTRANS. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 struct lto_stats_d
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 unsigned HOST_WIDE_INT num_input_cgraph_nodes;
111
kono
parents: 67
diff changeset
456 unsigned HOST_WIDE_INT num_output_symtab_nodes;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 unsigned HOST_WIDE_INT num_input_files;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 unsigned HOST_WIDE_INT num_output_files;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 unsigned HOST_WIDE_INT num_cgraph_partitions;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 unsigned HOST_WIDE_INT num_function_bodies;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 unsigned HOST_WIDE_INT num_output_il_bytes;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 unsigned HOST_WIDE_INT num_compressed_il_bytes;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 unsigned HOST_WIDE_INT num_input_il_bytes;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
111
kono
parents: 67
diff changeset
467 unsigned HOST_WIDE_INT num_tree_bodies_output;
kono
parents: 67
diff changeset
468 unsigned HOST_WIDE_INT num_pickle_refs_output;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470
111
kono
parents: 67
diff changeset
471 /* Entry of LTO symtab encoder. */
kono
parents: 67
diff changeset
472 struct lto_encoder_entry
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 {
111
kono
parents: 67
diff changeset
474 symtab_node *node;
kono
parents: 67
diff changeset
475 /* Is the node in this partition (i.e. ltrans of this partition will
kono
parents: 67
diff changeset
476 be responsible for outputting it)? */
kono
parents: 67
diff changeset
477 unsigned int in_partition:1;
kono
parents: 67
diff changeset
478 /* Do we encode body in this partition? */
kono
parents: 67
diff changeset
479 unsigned int body:1;
kono
parents: 67
diff changeset
480 /* Do we encode initializer in this partition?
kono
parents: 67
diff changeset
481 For example the readonly variable initializers are encoded to aid
kono
parents: 67
diff changeset
482 constant folding even if they are not in the partition. */
kono
parents: 67
diff changeset
483 unsigned int initializer:1;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
486
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
487 /* Encoder data structure used to stream callgraph nodes. */
111
kono
parents: 67
diff changeset
488 struct lto_symtab_encoder_d
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
489 {
111
kono
parents: 67
diff changeset
490 vec<lto_encoder_entry> nodes;
kono
parents: 67
diff changeset
491 hash_map<symtab_node *, size_t> *map;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493
111
kono
parents: 67
diff changeset
494 typedef struct lto_symtab_encoder_d *lto_symtab_encoder_t;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495
111
kono
parents: 67
diff changeset
496 /* Iterator structure for cgraph node sets. */
kono
parents: 67
diff changeset
497 struct lto_symtab_encoder_iterator
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
498 {
111
kono
parents: 67
diff changeset
499 lto_symtab_encoder_t encoder;
kono
parents: 67
diff changeset
500 unsigned index;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
502
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503
111
kono
parents: 67
diff changeset
504
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 /* The lto_tree_ref_encoder struct is used to encode trees into indices. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
506
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 struct lto_tree_ref_encoder
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 {
111
kono
parents: 67
diff changeset
509 hash_map<tree, unsigned> *tree_hash_table; /* Maps pointers to indices. */
kono
parents: 67
diff changeset
510 vec<tree> trees; /* Maps indices to pointers. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
512
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
513
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 /* Structure to hold states of input scope. */
111
kono
parents: 67
diff changeset
515 struct GTY((for_user)) lto_in_decl_state
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
516 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 /* Array of lto_in_decl_buffers to store type and decls streams. */
111
kono
parents: 67
diff changeset
518 vec<tree, va_gc> *streams[LTO_N_DECL_STREAMS];
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 /* If this in-decl state is associated with a function. FN_DECL
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 point to the FUNCTION_DECL. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 tree fn_decl;
111
kono
parents: 67
diff changeset
523
kono
parents: 67
diff changeset
524 /* True if decl state is compressed. */
kono
parents: 67
diff changeset
525 bool compressed;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
527
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 typedef struct lto_in_decl_state *lto_in_decl_state_ptr;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529
111
kono
parents: 67
diff changeset
530 struct decl_state_hasher : ggc_ptr_hash<lto_in_decl_state>
kono
parents: 67
diff changeset
531 {
kono
parents: 67
diff changeset
532 static hashval_t
kono
parents: 67
diff changeset
533 hash (lto_in_decl_state *s)
kono
parents: 67
diff changeset
534 {
kono
parents: 67
diff changeset
535 return htab_hash_pointer (s->fn_decl);
kono
parents: 67
diff changeset
536 }
kono
parents: 67
diff changeset
537
kono
parents: 67
diff changeset
538 static bool
kono
parents: 67
diff changeset
539 equal (lto_in_decl_state *a, lto_in_decl_state *b)
kono
parents: 67
diff changeset
540 {
kono
parents: 67
diff changeset
541 return a->fn_decl == b->fn_decl;
kono
parents: 67
diff changeset
542 }
kono
parents: 67
diff changeset
543 };
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 /* The structure that holds all of the vectors of global types,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 decls and cgraph nodes used in the serialization of this file. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 struct lto_out_decl_state
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 /* The buffers contain the sets of decls of various kinds and types we have
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 seen so far and the indexes assigned to them. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 /* Encoder for cgraph nodes. */
111
kono
parents: 67
diff changeset
554 lto_symtab_encoder_t symtab_node_encoder;
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
555
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 /* If this out-decl state belongs to a function, fn_decl points to that
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 function. Otherwise, it is NULL. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 tree fn_decl;
111
kono
parents: 67
diff changeset
559
kono
parents: 67
diff changeset
560 /* True if decl state is compressed. */
kono
parents: 67
diff changeset
561 bool compressed;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
563
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 typedef struct lto_out_decl_state *lto_out_decl_state_ptr;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
565
111
kono
parents: 67
diff changeset
566
kono
parents: 67
diff changeset
567 /* Compact representation of a index <-> resolution pair. Unpacked to an
kono
parents: 67
diff changeset
568 vector later. */
kono
parents: 67
diff changeset
569 struct res_pair
kono
parents: 67
diff changeset
570 {
kono
parents: 67
diff changeset
571 ld_plugin_symbol_resolution_t res;
kono
parents: 67
diff changeset
572 unsigned index;
kono
parents: 67
diff changeset
573 };
kono
parents: 67
diff changeset
574
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
575
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 /* One of these is allocated for each object file that being compiled
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 by lto. This structure contains the tables that are needed by the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 serialized functions and ipa passes to connect themselves to the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 global types and decls as they are reconstituted. */
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
580 struct GTY(()) lto_file_decl_data
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
582 /* Decl state currently used. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 struct lto_in_decl_state *current_decl_state;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
584
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 /* Decl state corresponding to regions outside of any functions
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 in the compilation unit. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 struct lto_in_decl_state *global_decl_state;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
588
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 /* Table of cgraph nodes present in this file. */
111
kono
parents: 67
diff changeset
590 lto_symtab_encoder_t GTY((skip)) symtab_node_encoder;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
591
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 /* Hash table maps lto-related section names to location in file. */
111
kono
parents: 67
diff changeset
593 hash_table<decl_state_hasher> *function_decl_states;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
594
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 /* The .o file that these offsets relate to. */
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
596 const char *GTY((skip)) file_name;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
597
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 /* Hash table maps lto-related section names to location in file. */
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
599 htab_t GTY((skip)) section_hash_table;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 /* Hash new name of renamed global declaration to its original name. */
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
602 htab_t GTY((skip)) renaming_hash_table;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
603
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
604 /* Linked list used temporarily in reader */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
605 struct lto_file_decl_data *next;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
606
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
607 /* Order in which the file appears on the command line. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
608 int order;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
609
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
610 /* Sub ID for merged objects. */
111
kono
parents: 67
diff changeset
611 unsigned HOST_WIDE_INT id;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
612
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
613 /* Symbol resolutions for this file */
111
kono
parents: 67
diff changeset
614 vec<res_pair> GTY((skip)) respairs;
kono
parents: 67
diff changeset
615 unsigned max_index;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
616
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
617 gcov_summary GTY((skip)) profile_info;
111
kono
parents: 67
diff changeset
618
kono
parents: 67
diff changeset
619 /* Map assigning declarations their resolutions. */
kono
parents: 67
diff changeset
620 hash_map<tree, ld_plugin_symbol_resolution> * GTY((skip)) resolution_map;
kono
parents: 67
diff changeset
621
kono
parents: 67
diff changeset
622 /* Mode translation table. */
kono
parents: 67
diff changeset
623 const unsigned char *mode_table;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
624
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
625 /* Read LTO section. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
626 lto_section lto_section_header;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
627
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
628 int order_base;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
629
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
630 int unit_base;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
632
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
633 typedef struct lto_file_decl_data *lto_file_decl_data_ptr;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
634
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 struct lto_char_ptr_base
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
637 char *ptr;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
638 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
639
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
640 /* An incore byte stream to buffer the various parts of the function.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
641 The entire structure should be zeroed when created. The record
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
642 consists of a set of blocks. The first sizeof (ptr) bytes are used
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 as a chain, and the rest store the bytes to be written. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
644 struct lto_output_stream
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 /* The pointer to the first block in the stream. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
647 struct lto_char_ptr_base * first_block;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
648
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 /* The pointer to the last and current block in the stream. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 struct lto_char_ptr_base * current_block;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
651
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 /* The pointer to where the next char should be written. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 char * current_pointer;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
654
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
655 /* The number of characters left in the current block. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 unsigned int left_in_block;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
657
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 /* The block size of the last block allocated. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 unsigned int block_size;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
660
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 /* The total number of characters written. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
662 unsigned int total_size;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
664
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
665 /* A simple output block. This can be used for simple IPA passes that
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
666 do not need more than one stream. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 struct lto_simple_output_block
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
668 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 enum lto_section_type section_type;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
670 struct lto_out_decl_state *decl_state;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
671
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
672 /* The stream that the main tree codes are written to. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
673 struct lto_output_stream *main_stream;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
675
111
kono
parents: 67
diff changeset
676 /* String hashing. */
kono
parents: 67
diff changeset
677
kono
parents: 67
diff changeset
678 struct string_slot
kono
parents: 67
diff changeset
679 {
kono
parents: 67
diff changeset
680 const char *s;
kono
parents: 67
diff changeset
681 int len;
kono
parents: 67
diff changeset
682 unsigned int slot_num;
kono
parents: 67
diff changeset
683 };
kono
parents: 67
diff changeset
684
kono
parents: 67
diff changeset
685 /* Hashtable helpers. */
kono
parents: 67
diff changeset
686
kono
parents: 67
diff changeset
687 struct string_slot_hasher : nofree_ptr_hash <string_slot>
kono
parents: 67
diff changeset
688 {
kono
parents: 67
diff changeset
689 static inline hashval_t hash (const string_slot *);
kono
parents: 67
diff changeset
690 static inline bool equal (const string_slot *, const string_slot *);
kono
parents: 67
diff changeset
691 };
kono
parents: 67
diff changeset
692
kono
parents: 67
diff changeset
693 /* Returns a hash code for DS. Adapted from libiberty's htab_hash_string
kono
parents: 67
diff changeset
694 to support strings that may not end in '\0'. */
kono
parents: 67
diff changeset
695
kono
parents: 67
diff changeset
696 inline hashval_t
kono
parents: 67
diff changeset
697 string_slot_hasher::hash (const string_slot *ds)
kono
parents: 67
diff changeset
698 {
kono
parents: 67
diff changeset
699 hashval_t r = ds->len;
kono
parents: 67
diff changeset
700 int i;
kono
parents: 67
diff changeset
701
kono
parents: 67
diff changeset
702 for (i = 0; i < ds->len; i++)
kono
parents: 67
diff changeset
703 r = r * 67 + (unsigned)ds->s[i] - 113;
kono
parents: 67
diff changeset
704 return r;
kono
parents: 67
diff changeset
705 }
kono
parents: 67
diff changeset
706
kono
parents: 67
diff changeset
707 /* Returns nonzero if DS1 and DS2 are equal. */
kono
parents: 67
diff changeset
708
kono
parents: 67
diff changeset
709 inline bool
kono
parents: 67
diff changeset
710 string_slot_hasher::equal (const string_slot *ds1, const string_slot *ds2)
kono
parents: 67
diff changeset
711 {
kono
parents: 67
diff changeset
712 if (ds1->len == ds2->len)
kono
parents: 67
diff changeset
713 return memcmp (ds1->s, ds2->s, ds1->len) == 0;
kono
parents: 67
diff changeset
714
kono
parents: 67
diff changeset
715 return 0;
kono
parents: 67
diff changeset
716 }
kono
parents: 67
diff changeset
717
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 /* Data structure holding all the data and descriptors used when writing
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
719 an LTO file. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
720 struct output_block
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 enum lto_section_type section_type;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 struct lto_out_decl_state *decl_state;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
724
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
725 /* The stream that the main tree codes are written to. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
726 struct lto_output_stream *main_stream;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
727
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 /* The stream that contains the string table. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
729 struct lto_output_stream *string_stream;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
730
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
731 /* The stream that contains the cfg. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 struct lto_output_stream *cfg_stream;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
733
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
734 /* The hash table that contains the set of strings we have seen so
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
735 far and the indexes assigned to them. */
111
kono
parents: 67
diff changeset
736 hash_table<string_slot_hasher> *string_hash_table;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
737
111
kono
parents: 67
diff changeset
738 /* The current symbol that we are currently serializing. Null
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
739 if we are serializing something else. */
111
kono
parents: 67
diff changeset
740 symtab_node *symbol;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
741
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
742 /* These are the last file and line that were seen in the stream.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
743 If the current node differs from these, it needs to insert
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 something into the stream and fix these up. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
745 const char *current_file;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
746 int current_line;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
747 int current_col;
111
kono
parents: 67
diff changeset
748 bool current_sysp;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
749
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 /* Cache of nodes written in this section. */
111
kono
parents: 67
diff changeset
751 struct streamer_tree_cache_d *writer_cache;
kono
parents: 67
diff changeset
752
kono
parents: 67
diff changeset
753 /* All data persistent across whole duration of output block
kono
parents: 67
diff changeset
754 can go here. */
kono
parents: 67
diff changeset
755 struct obstack obstack;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
756 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
757
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
758
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
759 /* Data and descriptors used when reading from an LTO file. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
760 class data_in
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
761 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
762 public:
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
763 /* The global decls and types. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
764 struct lto_file_decl_data *file_data;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
765
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 /* The string table. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
767 const char *strings;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
768
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
769 /* The length of the string table. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
770 unsigned int strings_len;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
771
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
772 /* Maps each reference number to the resolution done by the linker. */
111
kono
parents: 67
diff changeset
773 vec<ld_plugin_symbol_resolution_t> globals_resolution;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
774
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
775 /* Cache of pickled nodes. */
111
kono
parents: 67
diff changeset
776 struct streamer_tree_cache_d *reader_cache;
kono
parents: 67
diff changeset
777
kono
parents: 67
diff changeset
778 /* Cache of source code location. */
kono
parents: 67
diff changeset
779 lto_location_cache location_cache;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
781
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
782
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
783 /* In lto-section-in.c */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
784 extern class lto_input_block * lto_create_simple_input_block (
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
786 enum lto_section_type, const char **, size_t *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
787 extern void
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 lto_destroy_simple_input_block (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
789 enum lto_section_type,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
790 class lto_input_block *, const char *, size_t);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 extern void lto_set_in_hooks (struct lto_file_decl_data **,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
792 lto_get_section_data_f *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 lto_free_section_data_f *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
794 extern struct lto_file_decl_data **lto_get_file_decl_data (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
795 extern const char *lto_get_section_data (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
796 enum lto_section_type,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
797 const char *, int, size_t *,
111
kono
parents: 67
diff changeset
798 bool decompress = false);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
799 extern const char *lto_get_summary_section_data (struct lto_file_decl_data *,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
800 enum lto_section_type,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
801 size_t *);
111
kono
parents: 67
diff changeset
802 extern const char *lto_get_raw_section_data (struct lto_file_decl_data *,
kono
parents: 67
diff changeset
803 enum lto_section_type,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
804 const char *, int, size_t *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
805 extern void lto_free_section_data (struct lto_file_decl_data *,
111
kono
parents: 67
diff changeset
806 enum lto_section_type,
kono
parents: 67
diff changeset
807 const char *, const char *, size_t,
kono
parents: 67
diff changeset
808 bool decompress = false);
kono
parents: 67
diff changeset
809 extern void lto_free_raw_section_data (struct lto_file_decl_data *,
kono
parents: 67
diff changeset
810 enum lto_section_type,
kono
parents: 67
diff changeset
811 const char *, const char *, size_t);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 extern htab_t lto_create_renaming_table (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
813 extern void lto_record_renamed_decl (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
814 const char *, const char *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
816 const char *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 extern struct lto_in_decl_state *lto_new_in_decl_state (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 extern struct lto_in_decl_state *lto_get_function_in_decl_state (
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 struct lto_file_decl_data *, tree);
111
kono
parents: 67
diff changeset
821 extern void lto_free_function_in_decl_state (struct lto_in_decl_state *);
kono
parents: 67
diff changeset
822 extern void lto_free_function_in_decl_state_for_node (symtab_node *);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
823 extern void lto_section_overrun (class lto_input_block *) ATTRIBUTE_NORETURN;
111
kono
parents: 67
diff changeset
824 extern void lto_value_range_error (const char *,
kono
parents: 67
diff changeset
825 HOST_WIDE_INT, HOST_WIDE_INT,
kono
parents: 67
diff changeset
826 HOST_WIDE_INT) ATTRIBUTE_NORETURN;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
827
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
828 /* In lto-section-out.c */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
829 extern void lto_begin_section (const char *, bool);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
830 extern void lto_end_section (void);
111
kono
parents: 67
diff changeset
831 extern void lto_write_data (const void *, unsigned int);
kono
parents: 67
diff changeset
832 extern void lto_write_raw_data (const void *, unsigned int);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 extern void lto_write_stream (struct lto_output_stream *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 extern bool lto_output_decl_index (struct lto_output_stream *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 struct lto_tree_ref_encoder *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 tree, unsigned int *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 extern void lto_output_field_decl_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 extern void lto_output_fn_decl_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 extern void lto_output_namespace_decl_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 extern void lto_output_var_decl_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
845 extern void lto_output_type_decl_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 extern void lto_output_type_ref_index (struct lto_out_decl_state *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 struct lto_output_stream *, tree);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
849 extern struct lto_simple_output_block *lto_create_simple_output_block (
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 enum lto_section_type);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
851 extern void lto_destroy_simple_output_block (struct lto_simple_output_block *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 extern struct lto_out_decl_state *lto_new_out_decl_state (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
853 extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
854 extern struct lto_out_decl_state *lto_get_out_decl_state (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 extern void lto_push_out_decl_state (struct lto_out_decl_state *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 extern void lto_record_function_out_decl_state (tree,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
858 struct lto_out_decl_state *);
111
kono
parents: 67
diff changeset
859 extern void lto_append_block (struct lto_output_stream *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
860
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
861
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 /* In lto-streamer.c. */
111
kono
parents: 67
diff changeset
863
kono
parents: 67
diff changeset
864 /* Set when streaming LTO for offloading compiler. */
kono
parents: 67
diff changeset
865 extern bool lto_stream_offload_p;
kono
parents: 67
diff changeset
866
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 extern const char *lto_tag_name (enum LTO_tags);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
868 extern char *lto_get_section_name (int, const char *, int,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
869 struct lto_file_decl_data *);
111
kono
parents: 67
diff changeset
870 extern void print_lto_report (const char *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
871 extern void lto_streamer_init (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 extern bool gate_lto_out (void);
111
kono
parents: 67
diff changeset
873 extern void lto_check_version (int, int, const char *);
kono
parents: 67
diff changeset
874 extern void lto_streamer_hooks_init (void);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
875
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 /* In lto-streamer-in.c */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
111
kono
parents: 67
diff changeset
878 extern void lto_reader_init (void);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
879 extern void lto_free_file_name_hash (void);
111
kono
parents: 67
diff changeset
880 extern void lto_input_function_body (struct lto_file_decl_data *,
kono
parents: 67
diff changeset
881 struct cgraph_node *,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 const char *);
111
kono
parents: 67
diff changeset
883 extern void lto_input_variable_constructor (struct lto_file_decl_data *,
kono
parents: 67
diff changeset
884 struct varpool_node *,
kono
parents: 67
diff changeset
885 const char *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 extern void lto_input_constructors_and_inits (struct lto_file_decl_data *,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 const char *);
111
kono
parents: 67
diff changeset
888 extern void lto_input_toplevel_asms (struct lto_file_decl_data *, int);
kono
parents: 67
diff changeset
889 extern void lto_input_mode_table (struct lto_file_decl_data *);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
890 extern class data_in *lto_data_in_create (struct lto_file_decl_data *,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 const char *, unsigned,
111
kono
parents: 67
diff changeset
892 vec<ld_plugin_symbol_resolution_t> );
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
893 extern void lto_data_in_delete (class data_in *);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
894 extern void lto_input_data_block (class lto_input_block *, void *, size_t);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
895 void lto_input_location (location_t *, struct bitpack_d *, class data_in *);
111
kono
parents: 67
diff changeset
896 location_t stream_input_location_now (struct bitpack_d *bp,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
897 class data_in *data);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
898 tree lto_input_tree_ref (class lto_input_block *, class data_in *,
111
kono
parents: 67
diff changeset
899 struct function *, enum LTO_tags);
kono
parents: 67
diff changeset
900 void lto_tag_check_set (enum LTO_tags, int, ...);
kono
parents: 67
diff changeset
901 void lto_init_eh (void);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
902 hashval_t lto_input_scc (class lto_input_block *, class data_in *,
111
kono
parents: 67
diff changeset
903 unsigned *, unsigned *);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
904 tree lto_input_tree_1 (class lto_input_block *, class data_in *,
111
kono
parents: 67
diff changeset
905 enum LTO_tags, hashval_t hash);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
906 tree lto_input_tree (class lto_input_block *, class data_in *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
907
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
908
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
909 /* In lto-streamer-out.c */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
910 extern void lto_register_decl_definition (tree, struct lto_file_decl_data *);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
911 extern struct output_block *create_output_block (enum lto_section_type);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
912 extern void destroy_output_block (struct output_block *);
111
kono
parents: 67
diff changeset
913 extern void lto_output_tree (struct output_block *, tree, bool, bool);
kono
parents: 67
diff changeset
914 extern void lto_output_toplevel_asms (void);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
915 extern void produce_asm (struct output_block *ob, tree fn);
111
kono
parents: 67
diff changeset
916 extern void lto_output ();
kono
parents: 67
diff changeset
917 extern void produce_asm_for_decls ();
kono
parents: 67
diff changeset
918 void lto_output_decl_state_streams (struct output_block *,
kono
parents: 67
diff changeset
919 struct lto_out_decl_state *);
kono
parents: 67
diff changeset
920 void lto_output_decl_state_refs (struct output_block *,
kono
parents: 67
diff changeset
921 struct lto_output_stream *,
kono
parents: 67
diff changeset
922 struct lto_out_decl_state *);
kono
parents: 67
diff changeset
923 void lto_output_location (struct output_block *, struct bitpack_d *, location_t);
kono
parents: 67
diff changeset
924 void lto_output_init_mode_table (void);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
925 void lto_prepare_function_for_streaming (cgraph_node *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
926
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
927
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 /* In lto-cgraph.c */
111
kono
parents: 67
diff changeset
929 extern bool asm_nodes_output;
kono
parents: 67
diff changeset
930 lto_symtab_encoder_t lto_symtab_encoder_new (bool);
kono
parents: 67
diff changeset
931 int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node *);
kono
parents: 67
diff changeset
932 void lto_symtab_encoder_delete (lto_symtab_encoder_t);
kono
parents: 67
diff changeset
933 bool lto_symtab_encoder_delete_node (lto_symtab_encoder_t, symtab_node *);
kono
parents: 67
diff changeset
934 bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t,
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
935 struct cgraph_node *);
111
kono
parents: 67
diff changeset
936 bool lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t,
kono
parents: 67
diff changeset
937 symtab_node *);
kono
parents: 67
diff changeset
938 void lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t,
kono
parents: 67
diff changeset
939 symtab_node *);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
940
111
kono
parents: 67
diff changeset
941 bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t,
kono
parents: 67
diff changeset
942 varpool_node *);
kono
parents: 67
diff changeset
943 void output_symtab (void);
kono
parents: 67
diff changeset
944 void input_symtab (void);
kono
parents: 67
diff changeset
945 void output_offload_tables (void);
kono
parents: 67
diff changeset
946 void input_offload_tables (bool);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
947 bool referenced_from_other_partition_p (struct ipa_ref_list *,
111
kono
parents: 67
diff changeset
948 lto_symtab_encoder_t);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
949 bool reachable_from_other_partition_p (struct cgraph_node *,
111
kono
parents: 67
diff changeset
950 lto_symtab_encoder_t);
kono
parents: 67
diff changeset
951 bool referenced_from_this_partition_p (symtab_node *,
kono
parents: 67
diff changeset
952 lto_symtab_encoder_t);
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
953 bool reachable_from_this_partition_p (struct cgraph_node *,
111
kono
parents: 67
diff changeset
954 lto_symtab_encoder_t);
kono
parents: 67
diff changeset
955 lto_symtab_encoder_t compute_ltrans_boundary (lto_symtab_encoder_t encoder);
kono
parents: 67
diff changeset
956 void select_what_to_stream (void);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
957
111
kono
parents: 67
diff changeset
958 /* In options-save.c. */
kono
parents: 67
diff changeset
959 void cl_target_option_stream_out (struct output_block *, struct bitpack_d *,
kono
parents: 67
diff changeset
960 struct cl_target_option *);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
961
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
962 void cl_target_option_stream_in (class data_in *,
111
kono
parents: 67
diff changeset
963 struct bitpack_d *,
kono
parents: 67
diff changeset
964 struct cl_target_option *);
kono
parents: 67
diff changeset
965
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
966 void cl_optimization_stream_out (struct output_block *,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
967 struct bitpack_d *, struct cl_optimization *);
111
kono
parents: 67
diff changeset
968
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
969 void cl_optimization_stream_in (class data_in *,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
970 struct bitpack_d *, struct cl_optimization *);
111
kono
parents: 67
diff changeset
971
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
972
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
973
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
974 /* In lto-opts.c. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
975 extern void lto_write_options (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
976
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
977
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
978 /* Statistics gathered during LTO, WPA and LTRANS. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
979 extern struct lto_stats_d lto_stats;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
980
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
981 /* Section names corresponding to the values of enum lto_section_type. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
982 extern const char *lto_section_name[];
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
983
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
984 /* Holds all the out decl states of functions output so far in the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
985 current output file. */
111
kono
parents: 67
diff changeset
986 extern vec<lto_out_decl_state_ptr> lto_function_decl_states;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
987
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
988 /* Return true if LTO tag TAG corresponds to a tree code. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
989 static inline bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
990 lto_tag_is_tree_code_p (enum LTO_tags tag)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 {
111
kono
parents: 67
diff changeset
992 return tag > LTO_tree_pickle_reference && (unsigned) tag <= MAX_TREE_CODES;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
993 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
994
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
995
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
996 /* Return true if LTO tag TAG corresponds to a gimple code. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
997 static inline bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
998 lto_tag_is_gimple_code_p (enum LTO_tags tag)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
999 {
111
kono
parents: 67
diff changeset
1000 return (unsigned) tag >= NUM_TREE_CODES + 2
kono
parents: 67
diff changeset
1001 && (unsigned) tag < 2 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1002 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1003
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1004
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1005 /* Return the LTO tag corresponding to gimple code CODE. See enum
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1006 LTO_tags for details on the conversion. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1007 static inline enum LTO_tags
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1008 lto_gimple_code_to_tag (enum gimple_code code)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1009 {
111
kono
parents: 67
diff changeset
1010 return (enum LTO_tags) ((unsigned) code + NUM_TREE_CODES + 2);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1011 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1012
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1013
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1014 /* Return the GIMPLE code corresponding to TAG. See enum LTO_tags for
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1015 details on the conversion. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1016 static inline enum gimple_code
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1017 lto_tag_to_gimple_code (enum LTO_tags tag)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1018 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1019 gcc_assert (lto_tag_is_gimple_code_p (tag));
111
kono
parents: 67
diff changeset
1020 return (enum gimple_code) ((unsigned) tag - NUM_TREE_CODES - 2);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1021 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1022
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1023
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1024 /* Return the LTO tag corresponding to tree code CODE. See enum
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1025 LTO_tags for details on the conversion. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1026 static inline enum LTO_tags
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1027 lto_tree_code_to_tag (enum tree_code code)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1028 {
111
kono
parents: 67
diff changeset
1029 return (enum LTO_tags) ((unsigned) code + 2);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1030 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1031
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1032
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1033 /* Return the tree code corresponding to TAG. See enum LTO_tags for
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1034 details on the conversion. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1035 static inline enum tree_code
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1036 lto_tag_to_tree_code (enum LTO_tags tag)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1037 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1038 gcc_assert (lto_tag_is_tree_code_p (tag));
111
kono
parents: 67
diff changeset
1039 return (enum tree_code) ((unsigned) tag - 2);
kono
parents: 67
diff changeset
1040 }
kono
parents: 67
diff changeset
1041
kono
parents: 67
diff changeset
1042 /* Check that tag ACTUAL == EXPECTED. */
kono
parents: 67
diff changeset
1043 static inline void
kono
parents: 67
diff changeset
1044 lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
kono
parents: 67
diff changeset
1045 {
kono
parents: 67
diff changeset
1046 if (actual != expected)
kono
parents: 67
diff changeset
1047 internal_error ("bytecode stream: expected tag %s instead of %s",
kono
parents: 67
diff changeset
1048 lto_tag_name (expected), lto_tag_name (actual));
kono
parents: 67
diff changeset
1049 }
kono
parents: 67
diff changeset
1050
kono
parents: 67
diff changeset
1051 /* Check that tag ACTUAL is in the range [TAG1, TAG2]. */
kono
parents: 67
diff changeset
1052 static inline void
kono
parents: 67
diff changeset
1053 lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
kono
parents: 67
diff changeset
1054 enum LTO_tags tag2)
kono
parents: 67
diff changeset
1055 {
kono
parents: 67
diff changeset
1056 if (actual < tag1 || actual > tag2)
kono
parents: 67
diff changeset
1057 internal_error ("bytecode stream: tag %s is not in the expected range "
kono
parents: 67
diff changeset
1058 "[%s, %s]",
kono
parents: 67
diff changeset
1059 lto_tag_name (actual),
kono
parents: 67
diff changeset
1060 lto_tag_name (tag1),
kono
parents: 67
diff changeset
1061 lto_tag_name (tag2));
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1062 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1063
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 /* Initialize an lto_out_decl_buffer ENCODER. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065 static inline void
111
kono
parents: 67
diff changeset
1066 lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067 {
111
kono
parents: 67
diff changeset
1068 encoder->tree_hash_table = new hash_map<tree, unsigned> (251);
kono
parents: 67
diff changeset
1069 encoder->trees.create (0);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1070 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1071
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1072
111
kono
parents: 67
diff changeset
1073 /* Destroy an lto_tree_ref_encoder ENCODER by freeing its contents. The
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1074 memory used by ENCODER is not freed by this function. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1075 static inline void
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1076 lto_destroy_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1078 /* Hash table may be delete already. */
111
kono
parents: 67
diff changeset
1079 delete encoder->tree_hash_table;
kono
parents: 67
diff changeset
1080 encoder->tree_hash_table = NULL;
kono
parents: 67
diff changeset
1081 encoder->trees.release ();
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1083
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 /* Return the number of trees encoded in ENCODER. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1085 static inline unsigned int
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086 lto_tree_ref_encoder_size (struct lto_tree_ref_encoder *encoder)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087 {
111
kono
parents: 67
diff changeset
1088 return encoder->trees.length ();
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1089 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1090
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1091 /* Return the IDX-th tree in ENCODER. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1092 static inline tree
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1093 lto_tree_ref_encoder_get_tree (struct lto_tree_ref_encoder *encoder,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1094 unsigned int idx)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1095 {
111
kono
parents: 67
diff changeset
1096 return encoder->trees[idx];
kono
parents: 67
diff changeset
1097 }
kono
parents: 67
diff changeset
1098
kono
parents: 67
diff changeset
1099 /* Return number of encoded nodes in ENCODER. */
kono
parents: 67
diff changeset
1100 static inline int
kono
parents: 67
diff changeset
1101 lto_symtab_encoder_size (lto_symtab_encoder_t encoder)
kono
parents: 67
diff changeset
1102 {
kono
parents: 67
diff changeset
1103 return encoder->nodes.length ();
kono
parents: 67
diff changeset
1104 }
kono
parents: 67
diff changeset
1105
kono
parents: 67
diff changeset
1106 /* Value used to represent failure of lto_symtab_encoder_lookup. */
kono
parents: 67
diff changeset
1107 #define LCC_NOT_FOUND (-1)
kono
parents: 67
diff changeset
1108
kono
parents: 67
diff changeset
1109 /* Look up NODE in encoder. Return NODE's reference if it has been encoded
kono
parents: 67
diff changeset
1110 or LCC_NOT_FOUND if it is not there. */
kono
parents: 67
diff changeset
1111
kono
parents: 67
diff changeset
1112 static inline int
kono
parents: 67
diff changeset
1113 lto_symtab_encoder_lookup (lto_symtab_encoder_t encoder,
kono
parents: 67
diff changeset
1114 symtab_node *node)
kono
parents: 67
diff changeset
1115 {
kono
parents: 67
diff changeset
1116 size_t *slot = encoder->map->get (node);
kono
parents: 67
diff changeset
1117 return (slot && *slot ? *(slot) - 1 : LCC_NOT_FOUND);
kono
parents: 67
diff changeset
1118 }
kono
parents: 67
diff changeset
1119
kono
parents: 67
diff changeset
1120 /* Return true if iterator LSE points to nothing. */
kono
parents: 67
diff changeset
1121 static inline bool
kono
parents: 67
diff changeset
1122 lsei_end_p (lto_symtab_encoder_iterator lsei)
kono
parents: 67
diff changeset
1123 {
kono
parents: 67
diff changeset
1124 return lsei.index >= (unsigned)lto_symtab_encoder_size (lsei.encoder);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1126
111
kono
parents: 67
diff changeset
1127 /* Advance iterator LSE. */
kono
parents: 67
diff changeset
1128 static inline void
kono
parents: 67
diff changeset
1129 lsei_next (lto_symtab_encoder_iterator *lsei)
kono
parents: 67
diff changeset
1130 {
kono
parents: 67
diff changeset
1131 lsei->index++;
kono
parents: 67
diff changeset
1132 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133
111
kono
parents: 67
diff changeset
1134 /* Return the node pointed to by LSI. */
kono
parents: 67
diff changeset
1135 static inline symtab_node *
kono
parents: 67
diff changeset
1136 lsei_node (lto_symtab_encoder_iterator lsei)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 {
111
kono
parents: 67
diff changeset
1138 return lsei.encoder->nodes[lsei.index].node;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1140
111
kono
parents: 67
diff changeset
1141 /* Return the node pointed to by LSI. */
kono
parents: 67
diff changeset
1142 static inline struct cgraph_node *
kono
parents: 67
diff changeset
1143 lsei_cgraph_node (lto_symtab_encoder_iterator lsei)
kono
parents: 67
diff changeset
1144 {
kono
parents: 67
diff changeset
1145 return dyn_cast<cgraph_node *> (lsei.encoder->nodes[lsei.index].node);
kono
parents: 67
diff changeset
1146 }
kono
parents: 67
diff changeset
1147
kono
parents: 67
diff changeset
1148 /* Return the node pointed to by LSI. */
kono
parents: 67
diff changeset
1149 static inline varpool_node *
kono
parents: 67
diff changeset
1150 lsei_varpool_node (lto_symtab_encoder_iterator lsei)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 {
111
kono
parents: 67
diff changeset
1152 return dyn_cast<varpool_node *> (lsei.encoder->nodes[lsei.index].node);
kono
parents: 67
diff changeset
1153 }
kono
parents: 67
diff changeset
1154
kono
parents: 67
diff changeset
1155 /* Return the cgraph node corresponding to REF using ENCODER. */
kono
parents: 67
diff changeset
1156
kono
parents: 67
diff changeset
1157 static inline symtab_node *
kono
parents: 67
diff changeset
1158 lto_symtab_encoder_deref (lto_symtab_encoder_t encoder, int ref)
kono
parents: 67
diff changeset
1159 {
kono
parents: 67
diff changeset
1160 if (ref == LCC_NOT_FOUND)
kono
parents: 67
diff changeset
1161 return NULL;
kono
parents: 67
diff changeset
1162
kono
parents: 67
diff changeset
1163 return encoder->nodes[ref].node;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1165
111
kono
parents: 67
diff changeset
1166 /* Return an iterator to the first node in LSI. */
kono
parents: 67
diff changeset
1167 static inline lto_symtab_encoder_iterator
kono
parents: 67
diff changeset
1168 lsei_start (lto_symtab_encoder_t encoder)
kono
parents: 67
diff changeset
1169 {
kono
parents: 67
diff changeset
1170 lto_symtab_encoder_iterator lsei;
kono
parents: 67
diff changeset
1171
kono
parents: 67
diff changeset
1172 lsei.encoder = encoder;
kono
parents: 67
diff changeset
1173 lsei.index = 0;
kono
parents: 67
diff changeset
1174 return lsei;
kono
parents: 67
diff changeset
1175 }
kono
parents: 67
diff changeset
1176
kono
parents: 67
diff changeset
1177 /* Advance iterator LSE. */
kono
parents: 67
diff changeset
1178 static inline void
kono
parents: 67
diff changeset
1179 lsei_next_in_partition (lto_symtab_encoder_iterator *lsei)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 {
111
kono
parents: 67
diff changeset
1181 lsei_next (lsei);
kono
parents: 67
diff changeset
1182 while (!lsei_end_p (*lsei)
kono
parents: 67
diff changeset
1183 && !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei)))
kono
parents: 67
diff changeset
1184 lsei_next (lsei);
kono
parents: 67
diff changeset
1185 }
kono
parents: 67
diff changeset
1186
kono
parents: 67
diff changeset
1187 /* Return an iterator to the first node in LSI. */
kono
parents: 67
diff changeset
1188 static inline lto_symtab_encoder_iterator
kono
parents: 67
diff changeset
1189 lsei_start_in_partition (lto_symtab_encoder_t encoder)
kono
parents: 67
diff changeset
1190 {
kono
parents: 67
diff changeset
1191 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
kono
parents: 67
diff changeset
1192
kono
parents: 67
diff changeset
1193 if (lsei_end_p (lsei))
kono
parents: 67
diff changeset
1194 return lsei;
kono
parents: 67
diff changeset
1195 if (!lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
kono
parents: 67
diff changeset
1196 lsei_next_in_partition (&lsei);
kono
parents: 67
diff changeset
1197
kono
parents: 67
diff changeset
1198 return lsei;
kono
parents: 67
diff changeset
1199 }
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1200
111
kono
parents: 67
diff changeset
1201 /* Advance iterator LSE. */
kono
parents: 67
diff changeset
1202 static inline void
kono
parents: 67
diff changeset
1203 lsei_next_function_in_partition (lto_symtab_encoder_iterator *lsei)
kono
parents: 67
diff changeset
1204 {
kono
parents: 67
diff changeset
1205 lsei_next (lsei);
kono
parents: 67
diff changeset
1206 while (!lsei_end_p (*lsei)
kono
parents: 67
diff changeset
1207 && (!is_a <cgraph_node *> (lsei_node (*lsei))
kono
parents: 67
diff changeset
1208 || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
kono
parents: 67
diff changeset
1209 lsei_next (lsei);
kono
parents: 67
diff changeset
1210 }
kono
parents: 67
diff changeset
1211
kono
parents: 67
diff changeset
1212 /* Return an iterator to the first node in LSI. */
kono
parents: 67
diff changeset
1213 static inline lto_symtab_encoder_iterator
kono
parents: 67
diff changeset
1214 lsei_start_function_in_partition (lto_symtab_encoder_t encoder)
kono
parents: 67
diff changeset
1215 {
kono
parents: 67
diff changeset
1216 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
kono
parents: 67
diff changeset
1217
kono
parents: 67
diff changeset
1218 if (lsei_end_p (lsei))
kono
parents: 67
diff changeset
1219 return lsei;
kono
parents: 67
diff changeset
1220 if (!is_a <cgraph_node *> (lsei_node (lsei))
kono
parents: 67
diff changeset
1221 || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
kono
parents: 67
diff changeset
1222 lsei_next_function_in_partition (&lsei);
kono
parents: 67
diff changeset
1223
kono
parents: 67
diff changeset
1224 return lsei;
kono
parents: 67
diff changeset
1225 }
kono
parents: 67
diff changeset
1226
kono
parents: 67
diff changeset
1227 /* Advance iterator LSE. */
kono
parents: 67
diff changeset
1228 static inline void
kono
parents: 67
diff changeset
1229 lsei_next_variable_in_partition (lto_symtab_encoder_iterator *lsei)
kono
parents: 67
diff changeset
1230 {
kono
parents: 67
diff changeset
1231 lsei_next (lsei);
kono
parents: 67
diff changeset
1232 while (!lsei_end_p (*lsei)
kono
parents: 67
diff changeset
1233 && (!is_a <varpool_node *> (lsei_node (*lsei))
kono
parents: 67
diff changeset
1234 || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
kono
parents: 67
diff changeset
1235 lsei_next (lsei);
kono
parents: 67
diff changeset
1236 }
kono
parents: 67
diff changeset
1237
kono
parents: 67
diff changeset
1238 /* Return an iterator to the first node in LSI. */
kono
parents: 67
diff changeset
1239 static inline lto_symtab_encoder_iterator
kono
parents: 67
diff changeset
1240 lsei_start_variable_in_partition (lto_symtab_encoder_t encoder)
kono
parents: 67
diff changeset
1241 {
kono
parents: 67
diff changeset
1242 lto_symtab_encoder_iterator lsei = lsei_start (encoder);
kono
parents: 67
diff changeset
1243
kono
parents: 67
diff changeset
1244 if (lsei_end_p (lsei))
kono
parents: 67
diff changeset
1245 return lsei;
kono
parents: 67
diff changeset
1246 if (!is_a <varpool_node *> (lsei_node (lsei))
kono
parents: 67
diff changeset
1247 || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
kono
parents: 67
diff changeset
1248 lsei_next_variable_in_partition (&lsei);
kono
parents: 67
diff changeset
1249
kono
parents: 67
diff changeset
1250 return lsei;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1251 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1252
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1253 DEFINE_DECL_STREAM_FUNCS (TYPE, type)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1255 DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256 DEFINE_DECL_STREAM_FUNCS (VAR_DECL, var_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257 DEFINE_DECL_STREAM_FUNCS (TYPE_DECL, type_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1258 DEFINE_DECL_STREAM_FUNCS (NAMESPACE_DECL, namespace_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1259 DEFINE_DECL_STREAM_FUNCS (LABEL_DECL, label_decl)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1260
111
kono
parents: 67
diff changeset
1261 /* Entry for the delayed registering of decl -> DIE references. */
kono
parents: 67
diff changeset
1262 struct dref_entry {
kono
parents: 67
diff changeset
1263 tree decl;
kono
parents: 67
diff changeset
1264 const char *sym;
kono
parents: 67
diff changeset
1265 unsigned HOST_WIDE_INT off;
kono
parents: 67
diff changeset
1266 };
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1267
111
kono
parents: 67
diff changeset
1268 extern vec<dref_entry> dref_queue;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1269
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1270 extern FILE *streamer_dump_file;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1271
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272 #endif /* GCC_LTO_STREAMER_H */