aboutsummaryrefslogtreecommitdiff
path: root/gcc/dumpfile.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2018-10-04 14:33:47 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2018-10-04 14:33:47 +0000
commit5d98e5a6bc715cc865b9110ff0255572ac22570d (patch)
tree7f7ee75a6d43b65b14261ebf6740d5d18c39f684 /gcc/dumpfile.h
parentc19bc1a0832c01c0162aaba829b24609f60bba91 (diff)
downloadgcc-5d98e5a6bc715cc865b9110ff0255572ac22570d.zip
gcc-5d98e5a6bc715cc865b9110ff0255572ac22570d.tar.gz
gcc-5d98e5a6bc715cc865b9110ff0255572ac22570d.tar.bz2
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. From-SVN: r264844
Diffstat (limited to 'gcc/dumpfile.h')
-rw-r--r--gcc/dumpfile.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/dumpfile.h b/gcc/dumpfile.h
index 671b7b9..057ca46 100644
--- a/gcc/dumpfile.h
+++ b/gcc/dumpfile.h
@@ -566,6 +566,8 @@ extern void dump_combine_total_stats (FILE *);
/* In cfghooks.c */
extern void dump_bb (FILE *, basic_block, int, dump_flags_t);
+struct opt_pass;
+
namespace gcc {
/* A class for managing all of the various dump files used by the
@@ -634,6 +636,8 @@ public:
const char *
dump_flag_name (int phase) const;
+ void register_pass (opt_pass *pass);
+
private:
int
@@ -649,6 +653,8 @@ private:
opt_info_enable_passes (optgroup_flags_t optgroup_flags, dump_flags_t flags,
const char *filename);
+ bool update_dfi_for_opt_info (dump_file_info *dfi) const;
+
private:
/* Dynamically registered dump files and switches. */
@@ -657,6 +663,12 @@ private:
size_t m_extra_dump_files_in_use;
size_t m_extra_dump_files_alloced;
+ /* Stored values from -fopt-info, for handling passes created after
+ option-parsing (by backends and by plugins). */
+ optgroup_flags_t m_optgroup_flags;
+ dump_flags_t m_optinfo_flags;
+ char *m_optinfo_filename;
+
/* Grant access to dump_enable_all. */
friend bool ::enable_rtl_dump_file (void);