Fix -fopt-info for plugin passes
commite81a6963c67f865f8ba794167d477dab9eef1824
authordmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Oct 2018 14:33:47 +0000 (4 14:33 +0000)
committerdmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Oct 2018 14:33:47 +0000 (4 14:33 +0000)
tree7f7ee75a6d43b65b14261ebf6740d5d18c39f684
parent0578ac0f6fa44bf609819a60c8f5ef5271e3f70e
Fix -fopt-info for plugin passes

Attempts to dump via -fopt-info from a plugin pass fail, due
to the dfi->alt_state for such passes never being set.

This is because the -fopt-info options were being set up per-pass
during option-parsing (via gcc::dump_manager::opt_info_enable_passes),
but this data was not retained or used it for passes created later
(for plugins and target-specific passes).

This patch fixes the issue by storing the -fopt-info options into
gcc::dump_manager, refactoring the dfi-setup code out of
opt_info_enable_passes, and reusing it for such passes, fixing the
issue.  The patch adds a demo plugin to test that dumping from a
plugin works.

gcc/ChangeLog:
* dumpfile.c (gcc::dump_manager::dump_manager): Initialize new
fields.
(gcc::dump_manager::~dump_manager): Free m_optinfo_filename.
(gcc::dump_manager::register_pass): New member function, adapted
from loop body in gcc::pass_manager::register_pass, adding a
call to update_dfi_for_opt_info.
(gcc::dump_manager::opt_info_enable_passes): Store the
-fopt-info options into the new fields.  Move the loop
bodies into...
(gcc::dump_manager::update_dfi_for_opt_info): ...this new member
function.
* dumpfile.h (struct opt_pass): New forward decl.
(gcc::dump_manager::register_pass): New decl.
(gcc::dump_manager::update_dfi_for_opt_info): New decl.
(class gcc::dump_manager): Add fields "m_optgroup_flags",
"m_optinfo_flags", and "m_optinfo_filename".
* passes.c (gcc::pass_manager::register_pass): Move all of the
dump-handling code to gcc::dump_manager::register_pass.

gcc/testsuite/ChangeLog:
* gcc.dg/plugin/dump-1.c: New test.
* gcc.dg/plugin/dump_plugin.c: New test plugin.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264844 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/dumpfile.c
gcc/dumpfile.h
gcc/passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/plugin/dump-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/dump_plugin.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/plugin.exp