diff options
author | David Malcolm <dmalcolm@redhat.com> | 2018-11-19 16:31:03 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2018-11-19 16:31:03 +0000 |
commit | 8d1af516844f94784d9a3a7ffc59f9ab3daa1f5d (patch) | |
tree | c32e504ef3de3abf09e0126e75c2712a7de83e6e /gcc/dump-context.h | |
parent | 4fea820523334138d7165f20333ef30ba8e01c1d (diff) | |
download | gcc-8d1af516844f94784d9a3a7ffc59f9ab3daa1f5d.zip gcc-8d1af516844f94784d9a3a7ffc59f9ab3daa1f5d.tar.gz gcc-8d1af516844f94784d9a3a7ffc59f9ab3daa1f5d.tar.bz2 |
Eliminate global state from -fsave-optimization-record
As work towards fixing PR tree-optimization/87025, this patch
eliminates global state from optinfo-emit-json.cc in favor
of adding an optional m_json_writer field to dump_context,
replacing the m_forcibly_enable_optinfo flag.
This allows for writing selftests for the interaction of the
JSON-building code with the dumpfile.c code.
In particular, the existing selftest that created optinfo
instances now exercise the JSON-building code (although no
JSON is actually written out).
The patch also simplifies the layering by replacing optinfo::emit ()
with dump_context::emit_optinfo, so that dump_context has
responsibility for keeping track of dump destinations.
gcc/ChangeLog:
PR tree-optimization/87025
* dump-context.h: Include "optinfo.h".
(class optrecord_json_writer): New forward decl.
(dump_context::forcibly_enable_optinfo_p): Delete.
(dump_context::optinfo_enabled_p): New member function.
(dump_context::optimization_records_enabled_p): New member
function.
(dump_context::set_json_writer): New member function.
(dump_context::emit_optinfo): New member function.
(dump_context::m_forcibly_enable_optinfo): Delete.
(dump_context::m_json_writer): New member data.
* dumpfile.c (dump_context::set_json_writer): New member function.
(dump_context::finish_any_json_writer): New member function.
(dump_context::end_scope): Replace call to
optimization_records_maybe_pop_dump_scope with call to
m_json_writer->pop_scope.
(dump_context::optinfo_enabled_p): New member function.
(dump_context::end_any_optinfo): Replace call to optinfo::emit with call
to dump_context::emit_optinfo.
(dump_context::emit_optinfo): New member function.
(temp_dump_context::temp_dump_context): Replace
m_forcibly_enable_optinfo with call to set_json_writer.
(temp_dump_context::~temp_dump_context): Clean up any json writer.
* optinfo-emit-json.cc (class optrecord_json_writer): Move to
optinfo-emit-json.h
(the_json_writer): Delete.
(optimization_records_start): Delete.
(optimization_records_finish): Delete.
(optimization_records_enabled_p): Delete, in favor of
dump_context::optimization_records_enabled_p.
(optimization_records_maybe_record_optinfo): Delete.
(optimization_records_maybe_pop_dump_scope): Delete.
* optinfo-emit-json.h: Include "json.h". Delete forward
decl of opt_pass.
(optimization_records_start): Delete.
(optimization_records_finish): Delete.
(optimization_records_enabled_p): Delete.
(optimization_records_maybe_record_optinfo): Delete.
(optimization_records_maybe_pop_dump_scope): Delete.
(class optrecord_json_writer): Move here from
optinfo-emit-json.cc.
* optinfo.cc (optinfo::emit_for_opt_problem): Replace call
to optinfo::emit with call to dump_context::emit_optinfo.
(optinfo::emit): Delete, in favor of dump_context::emit_optinfo.
(optinfo_enabled_p): Delete, in favor of
dump_context::optinfo_enabled_p.
(optinfo_wants_inlining_info_p): Update for conversion o
optimization_records_enabled_p to a member function of
dump_context.
* optinfo.h (optinfo_enabled_p): Delete, in favor of
dump_context::optinfo_enabled_p.
(optinfo::emit): Delete, in favor of dump_context::emit_optinfo.
* toplev.c: Include "dump-context.h".
(compile_file): Replace call to optimization_records_finish with
dump_context::finish_any_json_writer.
(do_compile): Replace call to optimization_records_start with
conditionally creating a optrecord_json_writer for the
dump_context.
From-SVN: r266279
Diffstat (limited to 'gcc/dump-context.h')
-rw-r--r-- | gcc/dump-context.h | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/gcc/dump-context.h b/gcc/dump-context.h index ace139c..2016ce7 100644 --- a/gcc/dump-context.h +++ b/gcc/dump-context.h @@ -25,7 +25,9 @@ along with GCC; see the file COPYING3. If not see #include "dumpfile.h" #include "pretty-print.h" #include "selftest.h" +#include "optinfo.h" +class optrecord_json_writer; namespace selftest { class temp_dump_context; } /* A class for handling the various dump_* calls. @@ -95,14 +97,21 @@ class dump_context void begin_scope (const char *name, const dump_location_t &loc); void end_scope (); - /* For use in selftests; if true then optinfo_enabled_p is true. */ - bool forcibly_enable_optinfo_p () const + /* Should optinfo instances be created? + All creation of optinfos should be guarded by this predicate. + Return true if any optinfo destinations are active. */ + bool optinfo_enabled_p () const; + + bool optimization_records_enabled_p () const { - return m_forcibly_enable_optinfo; + return m_json_writer != NULL; } + void set_json_writer (optrecord_json_writer *writer); + void finish_any_json_writer (); void end_any_optinfo (); + void emit_optinfo (const optinfo *info); void emit_item (optinfo_item *item, dump_flags_t dump_kind); bool apply_dump_filter_p (dump_flags_t dump_kind, dump_flags_t filter) const; @@ -111,9 +120,6 @@ class dump_context optinfo &ensure_pending_optinfo (); optinfo &begin_next_optinfo (const dump_location_t &loc); - /* For use in selftests; if true then optinfo_enabled_p is true. */ - bool m_forcibly_enable_optinfo; - /* The current nesting depth of dump scopes, for showing nesting via indentation). */ unsigned int m_scope_depth; @@ -122,6 +128,10 @@ class dump_context if any. */ optinfo *m_pending; + /* If -fsave-optimization-record is enabled, the heap-allocated JSON writer + instance, otherwise NULL. */ + optrecord_json_writer *m_json_writer; + /* For use in selftests: if non-NULL, then items are to be printed to this, using the given flags. */ pretty_printer *m_test_pp; |