context.h (context::set_passes): New.
authorNathan Sidwell <nathan@acm.org>
Fri, 19 May 2017 12:32:48 +0000 (12:32 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 19 May 2017 12:32:48 +0000 (12:32 +0000)
* context.h (context::set_passes): New.
* context.c (context::context): Do not create pass manager.
* toplev.c (general_init): Create pass manager here.

From-SVN: r248268

gcc/ChangeLog
gcc/context.c
gcc/context.h
gcc/toplev.c

index 9006383293e17c981f5ac42f73d611940aa057dd..b11d20dee41759bf09902ba78c41dfcfa7912801 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-19  Nathan Sidwell  <nathan@acm.org>
+
+       * context.h (context::set_passes): New.
+       * context.c (context::context): Do not create pass manager.
+       * toplev.c (general_init): Create pass manager here.
+
 2017-05-19  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.md (splitter to load of -1 and mask): Don't
index bacad5a5e77549ddb6dbd8984cc2fc8efee36cd7..22d91b4fdf655ea36d75067f08c2319a42c59b5f 100644 (file)
@@ -29,14 +29,9 @@ along with GCC; see the file COPYING3.  If not see
 gcc::context *g;
 
 gcc::context::context ()
+  : m_passes (NULL), m_dumps (new gcc::dump_manager ())
 {
   have_offload = false;
-
-  /* The pass manager's constructor uses the dump manager (to set up
-     dumps for the various passes), so the dump manager must be set up
-     before the pass manager.  */
-  m_dumps = new gcc::dump_manager ();
-  m_passes = new gcc::pass_manager (this);
 }
 
 gcc::context::~context ()
index e9113a4ca73b1587f22291d50457b789a17ad9e1..4573f705c46151a37f87cd5f200e00bdae4946ea 100644 (file)
@@ -39,6 +39,12 @@ public:
 
   /* Pass-management.  */
 
+  void set_passes (pass_manager *m)
+  {
+    gcc_assert (!m_passes);
+    m_passes = m;
+  }
+
   pass_manager *get_passes () { gcc_assert (m_passes); return m_passes; }
 
   /* Handling dump files.  */
index f1384fc2fdad01d3383e8f141ae22d30cda5ffce..814193a4509749579d8a78702ac0c904840a6401 100644 (file)
@@ -1154,9 +1154,13 @@ general_init (const char *argv0, bool init_signals)
      processing.  */
   init_ggc_heuristics ();
 
-  /* Create the singleton holder for global state.
-     Doing so also creates the pass manager and with it the passes.  */
+  /* Create the singleton holder for global state.  This creates the
+     dump manager.  */
   g = new gcc::context ();
+
+  /* Create the passes.  */
+  g->set_passes (new gcc::pass_manager (g));
+
   symtab = new (ggc_cleared_alloc <symbol_table> ()) symbol_table ();
 
   statistics_early_init ();