This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/87025] [9 Regression] ICE in add_record, at optinfo-emit-json.cc:175


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87025

--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Mon Nov 19 16:31:03 2018
New Revision: 266279

URL: https://gcc.gnu.org/viewcvs?rev=266279&root=gcc&view=rev
Log:
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.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/dump-context.h
    trunk/gcc/dumpfile.c
    trunk/gcc/optinfo-emit-json.cc
    trunk/gcc/optinfo-emit-json.h
    trunk/gcc/optinfo.cc
    trunk/gcc/optinfo.h
    trunk/gcc/toplev.c

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]