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