annotate gcc/optinfo-emit-json.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
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Emit optimization information as JSON files.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2018-2020 Free Software Foundation, Inc.
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it under
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 the terms of the GNU General Public License as published by the Free
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 Software Foundation; either version 3, or (at your option) any later
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 #ifndef GCC_OPTINFO_EMIT_JSON_H
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 #define GCC_OPTINFO_EMIT_JSON_H
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
24 #include "json.h"
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
25
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 class optinfo;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
27
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
28 /* A class for writing out optimization records in JSON format. */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
30 class optrecord_json_writer
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
31 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
32 public:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
33 optrecord_json_writer ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
34 ~optrecord_json_writer ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
35 void write () const;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
36 void add_record (const optinfo *optinfo);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
37 void pop_scope ();
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
39 void add_record (json::object *obj);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
40 json::object *impl_location_to_json (dump_impl_location_t loc);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
41 json::object *location_to_json (location_t loc);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
42 json::object *profile_count_to_json (profile_count count);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
43 json::string *get_id_value_for_pass (opt_pass *pass);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
44 json::object *pass_to_json (opt_pass *pass);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
45 json::value *inlining_chain_to_json (location_t loc);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
46 json::object *optinfo_to_json (const optinfo *optinfo);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
47 void add_pass_list (json::array *arr, opt_pass *pass);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
49 private:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
50 /* The root value for the JSON file.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
51 Currently the JSON values are stored in memory, and flushed when the
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
52 compiler exits. It would probably be better to simply write out
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
53 the JSON as we go. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
54 json::array *m_root_tuple;
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
56 /* The currently open scopes, for expressing nested optimization records. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
57 auto_vec<json::array *> m_scopes;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
58 };
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 #endif /* #ifndef GCC_OPTINFO_EMIT_JSON_H */