public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
@ 2013-03-19 12:34 Richard Biener
  2013-03-19 14:20 ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-03-19 12:34 UTC (permalink / raw)
  To: gcc-patches


This adds a GC collection point after each pass instead just after
those with TODO_ggc_collect in their todo.  The patch will possibly
slow-down gcac checking a bit (80 passes have TODO_ggc_collect,
I didn't try to enumerate those that do not, but a grep shows we
may have up to 212 passes.  OTOH gcac checking will now "properly"
verify that all pass boundaries are suitable for collection.

A complete patch will remove TODO_ggc_collect and all its uses
as well.

The patch should result in lower peak memory consumption for
some of the odd testcases that we worked on.

Bootstrap & regtest scheduled on x86_64-unknown-linux-gnu.

Richard.

2013-03-19  Richard Biener  <rguenther@suse.de>

	* passes.c (execute_todo): Do not call ggc_collect conditional here.
	(execute_one_ipa_transform_pass): But unconditionally here.
	(execute_one_pass): And here.

Index: trunk/gcc/passes.c
===================================================================
*** trunk.orig/gcc/passes.c	2013-03-19 12:25:46.000000000 +0100
--- trunk/gcc/passes.c	2013-03-19 13:25:49.757259321 +0100
*************** execute_todo (unsigned int flags)
*** 2016,2024 ****
        fflush (dump_file);
      }
  
-   if (flags & TODO_ggc_collect)
-     ggc_collect ();
- 
    /* Now that the dumping has been done, we can get rid of the optional
       df problems.  */
    if (flags & TODO_df_finish)
--- 2016,2021 ----
*************** execute_one_ipa_transform_pass (struct c
*** 2190,2195 ****
--- 2187,2195 ----
    pass_fini_dump_file (pass);
  
    current_pass = NULL;
+ 
+   /* Signal this is a suitable GC collection point.  */
+   ggc_collect ();
  }
  
  /* For the current function, execute all ipa transforms. */
*************** execute_one_pass (struct opt_pass *pass)
*** 2367,2372 ****
--- 2367,2375 ----
  
    current_pass = NULL;
  
+   /* Signal this is a suitable GC collection point.  */
+   ggc_collect ();
+ 
    return true;
  }
  

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-03-19 12:34 [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally Richard Biener
@ 2013-03-19 14:20 ` Richard Biener
  2013-03-19 15:37   ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-03-19 14:20 UTC (permalink / raw)
  To: gcc-patches

On Tue, 19 Mar 2013, Richard Biener wrote:

> 
> This adds a GC collection point after each pass instead just after
> those with TODO_ggc_collect in their todo.  The patch will possibly
> slow-down gcac checking a bit (80 passes have TODO_ggc_collect,
> I didn't try to enumerate those that do not, but a grep shows we
> may have up to 212 passes.  OTOH gcac checking will now "properly"
> verify that all pass boundaries are suitable for collection.
> 
> A complete patch will remove TODO_ggc_collect and all its uses
> as well.
> 
> The patch should result in lower peak memory consumption for
> some of the odd testcases that we worked on.
> 
> Bootstrap & regtest scheduled on x86_64-unknown-linux-gnu.

Which shows that I need to merge the IRA and reload/lra passes.
Honza tells me that they are considered "separate" has historical
reasons only.  Given that reload pushes TV_IRA and that the boundary
isn't GC safe I don't think that is too bad (dump files will now
be shared, of course).

I'll schedule a gcac checking bootstrap over night as well.

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-03-19 14:20 ` Richard Biener
@ 2013-03-19 15:37   ` Richard Biener
  2013-03-21  9:07     ` Richard Biener
  2013-04-11 10:45     ` Bernd Schmidt
  0 siblings, 2 replies; 16+ messages in thread
From: Richard Biener @ 2013-03-19 15:37 UTC (permalink / raw)
  To: gcc-patches

On Tue, 19 Mar 2013, Richard Biener wrote:

> On Tue, 19 Mar 2013, Richard Biener wrote:
> 
> > 
> > This adds a GC collection point after each pass instead just after
> > those with TODO_ggc_collect in their todo.  The patch will possibly
> > slow-down gcac checking a bit (80 passes have TODO_ggc_collect,
> > I didn't try to enumerate those that do not, but a grep shows we
> > may have up to 212 passes.  OTOH gcac checking will now "properly"
> > verify that all pass boundaries are suitable for collection.
> > 
> > A complete patch will remove TODO_ggc_collect and all its uses
> > as well.
> > 
> > The patch should result in lower peak memory consumption for
> > some of the odd testcases that we worked on.
> > 
> > Bootstrap & regtest scheduled on x86_64-unknown-linux-gnu.
> 
> Which shows that I need to merge the IRA and reload/lra passes.
> Honza tells me that they are considered "separate" has historical
> reasons only.  Given that reload pushes TV_IRA and that the boundary
> isn't GC safe I don't think that is too bad (dump files will now
> be shared, of course).
> 
> I'll schedule a gcac checking bootstrap over night as well.

The following is it, changelog omits the boring part (enumerating
all files and pass structs touched ...).

Regularly bootstrapped and tested on x86_64-unknown-linux-gnu,
the gcac one is still running (as expected ...).

Any objections?

Thanks,
Richard.

2013-03-19  Richard Biener  <rguenther@suse.de>

	* passes.c (execute_todo): Do not call ggc_collect conditional here.
	(execute_one_ipa_transform_pass): But unconditionally here.
	(execute_one_pass): And here.
	(init_optimization_passes): Remove reload pass.
	* tree-pass.h (TODO_ggc_collect): Remove.
	(pass_reload): Likewise.
	* ira.c (do_reload): Merge into ...
	(ira): ... this.
	(rest_of_handle_reload): Remove.
	(pass_reload): Likewise.
	* config/i386/i386.c (ix86_option_override): Refer to ira instead
	of reload for vzeroupper pass placement.
	* <everywhere>: Remove TODO_ggc_collect from todo_flags_start
	and todo_flags_finish of all passes.

Index: trunk/gcc/passes.c
===================================================================
*** trunk.orig/gcc/passes.c	2013-03-19 12:25:46.000000000 +0100
--- trunk/gcc/passes.c	2013-03-19 15:07:06.015047490 +0100
*************** static struct rtl_opt_pass pass_rest_of_
*** 406,412 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 406,412 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
  
*************** static struct rtl_opt_pass pass_postrelo
*** 432,438 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
  
--- 432,438 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing               /* todo_flags_finish */
   }
  };
  
*************** init_optimization_passes (void)
*** 1620,1626 ****
        NEXT_PASS (pass_sms);
        NEXT_PASS (pass_sched);
        NEXT_PASS (pass_ira);
-       NEXT_PASS (pass_reload);
        NEXT_PASS (pass_postreload);
  	{
  	  struct opt_pass **p = &pass_postreload.pass.sub;
--- 1620,1625 ----
*************** execute_todo (unsigned int flags)
*** 2016,2024 ****
        fflush (dump_file);
      }
  
-   if (flags & TODO_ggc_collect)
-     ggc_collect ();
- 
    /* Now that the dumping has been done, we can get rid of the optional
       df problems.  */
    if (flags & TODO_df_finish)
--- 2015,2020 ----
*************** execute_one_ipa_transform_pass (struct c
*** 2190,2195 ****
--- 2186,2194 ----
    pass_fini_dump_file (pass);
  
    current_pass = NULL;
+ 
+   /* Signal this is a suitable GC collection point.  */
+   ggc_collect ();
  }
  
  /* For the current function, execute all ipa transforms. */
*************** execute_one_pass (struct opt_pass *pass)
*** 2367,2372 ****
--- 2366,2374 ----
  
    current_pass = NULL;
  
+   /* Signal this is a suitable GC collection point.  */
+   ggc_collect ();
+ 
    return true;
  }
  
Index: trunk/gcc/bt-load.c
===================================================================
*** trunk.orig/gcc/bt-load.c	2013-01-11 10:54:52.000000000 +0100
--- trunk/gcc/bt-load.c	2013-03-19 14:49:29.666365217 +0100
*************** struct rtl_opt_pass pass_branch_target_l
*** 1520,1527 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing |
!   TODO_ggc_collect,                     /* todo_flags_finish */
   }
  };
  
--- 1520,1526 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing,              /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_branch_target_l
*** 1570,1575 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect,                     /* todo_flags_finish */
   }
  };
--- 1569,1574 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0,                                    /* todo_flags_finish */
   }
  };
Index: trunk/gcc/cfgcleanup.c
===================================================================
*** trunk.orig/gcc/cfgcleanup.c	2013-01-31 11:06:09.000000000 +0100
--- trunk/gcc/cfgcleanup.c	2013-03-19 14:49:46.809555946 +0100
*************** struct rtl_opt_pass pass_jump =
*** 3057,3063 ****
    0,					/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   TODO_ggc_collect,			/* todo_flags_start */
    TODO_verify_rtl_sharing,		/* todo_flags_finish */
   }
  };
--- 3057,3063 ----
    0,					/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   0,					/* todo_flags_start */
    TODO_verify_rtl_sharing,		/* todo_flags_finish */
   }
  };
*************** struct rtl_opt_pass pass_jump2 =
*** 3084,3090 ****
    0,					/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   TODO_ggc_collect,			/* todo_flags_start */
    TODO_verify_rtl_sharing,		/* todo_flags_finish */
   }
  };
--- 3084,3090 ----
    0,					/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   0,					/* todo_flags_start */
    TODO_verify_rtl_sharing,		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/cfgexpand.c
===================================================================
*** trunk.orig/gcc/cfgexpand.c	2013-03-18 12:31:42.000000000 +0100
--- trunk/gcc/cfgexpand.c	2013-03-19 14:49:59.956702233 +0100
*************** struct rtl_opt_pass pass_expand =
*** 4863,4868 ****
    PROP_ssa | PROP_trees,		/* properties_destroyed */
    TODO_verify_ssa | TODO_verify_flow
      | TODO_verify_stmts,		/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
--- 4863,4868 ----
    PROP_ssa | PROP_trees,		/* properties_destroyed */
    TODO_verify_ssa | TODO_verify_flow
      | TODO_verify_stmts,		/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
Index: trunk/gcc/combine-stack-adj.c
===================================================================
*** trunk.orig/gcc/combine-stack-adj.c	2013-01-11 10:55:26.000000000 +0100
--- trunk/gcc/combine-stack-adj.c	2013-03-19 14:50:33.851079297 +0100
*************** struct rtl_opt_pass pass_stack_adjustmen
*** 659,665 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect,                     /* todo_flags_finish */
   }
  };
--- 659,664 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/combine.c
===================================================================
*** trunk.orig/gcc/combine.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/combine.c	2013-03-19 14:51:01.178383334 +0100
*************** struct rtl_opt_pass pass_combine =
*** 13823,13829 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect,                     /* todo_flags_finish */
   }
  };
--- 13823,13828 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/compare-elim.c
===================================================================
*** trunk.orig/gcc/compare-elim.c	2013-01-11 10:54:42.000000000 +0100
--- trunk/gcc/compare-elim.c	2013-03-19 14:51:09.767478849 +0100
*************** struct rtl_opt_pass pass_compare_elim_af
*** 669,675 ****
    0,					/* todo_flags_start */
    TODO_df_finish
    | TODO_df_verify
!   | TODO_verify_rtl_sharing
!   | TODO_ggc_collect			/* todo_flags_finish */
   }
  };
--- 669,674 ----
    0,					/* todo_flags_start */
    TODO_df_finish
    | TODO_df_verify
!   | TODO_verify_rtl_sharing		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/cprop.c
===================================================================
*** trunk.orig/gcc/cprop.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/cprop.c	2013-03-19 14:51:18.068571228 +0100
*************** struct rtl_opt_pass pass_rtl_cprop =
*** 1930,1935 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
   }
  };
--- 1930,1935 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
Index: trunk/gcc/cse.c
===================================================================
*** trunk.orig/gcc/cse.c	2013-02-07 10:14:45.000000000 +0100
--- trunk/gcc/cse.c	2013-03-19 14:51:33.389741719 +0100
*************** struct rtl_opt_pass pass_cse =
*** 7466,7473 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect |
!   TODO_verify_flow,                     /* todo_flags_finish */
   }
  };
  
--- 7466,7472 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_cse2 =
*** 7529,7535 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
-   TODO_ggc_collect |
    TODO_verify_flow                      /* todo_flags_finish */
   }
  };
--- 7528,7533 ----
*************** struct rtl_opt_pass pass_cse_after_globa
*** 7590,7596 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
-   TODO_ggc_collect |
    TODO_verify_flow                      /* todo_flags_finish */
   }
  };
--- 7588,7593 ----
Index: trunk/gcc/dce.c
===================================================================
*** trunk.orig/gcc/dce.c	2013-01-11 10:55:26.000000000 +0100
--- trunk/gcc/dce.c	2013-03-19 14:51:45.045871389 +0100
*************** struct rtl_opt_pass pass_ud_rtl_dce =
*** 802,809 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                     /* todo_flags_finish */
   }
  };
  
--- 802,808 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_fast_rtl_dce =
*** 1218,1224 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 1217,1222 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/dse.c
===================================================================
*** trunk.orig/gcc/dse.c	2013-03-11 11:00:38.000000000 +0100
--- trunk/gcc/dse.c	2013-03-19 14:51:53.264962797 +0100
*************** struct rtl_opt_pass pass_rtl_dse1 =
*** 3935,3942 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 3935,3941 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_rtl_dse2 =
*** 3956,3962 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 3955,3960 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/final.c
===================================================================
*** trunk.orig/gcc/final.c	2013-02-04 11:18:45.000000000 +0100
--- trunk/gcc/final.c	2013-03-19 14:52:09.083138974 +0100
*************** struct rtl_opt_pass pass_compute_alignme
*** 821,828 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing
!   | TODO_ggc_collect                    /* todo_flags_finish */
   }
  };
  
--- 821,827 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing               /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_final =
*** 4405,4411 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 4404,4410 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/function.c
===================================================================
*** trunk.orig/gcc/function.c	2013-03-11 11:00:39.000000000 +0100
--- trunk/gcc/function.c	2013-03-19 14:52:27.275341219 +0100
*************** struct rtl_opt_pass pass_thread_prologue
*** 6995,7003 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    TODO_verify_flow,                     /* todo_flags_start */
!   TODO_df_verify |
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  \f
--- 6995,7002 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    TODO_verify_flow,                     /* todo_flags_start */
!   TODO_df_verify | TODO_df_finish
!   | TODO_verify_rtl_sharing             /* todo_flags_finish */
   }
  };
  \f
Index: trunk/gcc/gcse.c
===================================================================
*** trunk.orig/gcc/gcse.c	2013-01-11 10:54:52.000000000 +0100
--- trunk/gcc/gcse.c	2013-03-19 14:52:38.648467764 +0100
*************** struct rtl_opt_pass pass_rtl_pre =
*** 4154,4160 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
   }
  };
  
--- 4154,4160 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_rtl_hoist =
*** 4175,4181 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
   }
  };
  
--- 4175,4181 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/ifcvt.c
===================================================================
*** trunk.orig/gcc/ifcvt.c	2013-03-06 09:46:38.000000000 +0100
--- trunk/gcc/ifcvt.c	2013-03-19 14:52:48.857581358 +0100
*************** struct rtl_opt_pass pass_if_after_combin
*** 4514,4521 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 4514,4520 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_if_after_reload
*** 4551,4557 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 4550,4555 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/ipa-cp.c
===================================================================
*** trunk.orig/gcc/ipa-cp.c	2013-03-01 12:05:02.000000000 +0100
--- trunk/gcc/ipa-cp.c	2013-03-19 14:52:54.478643890 +0100
*************** struct ipa_opt_pass_d pass_ipa_cp =
*** 3632,3638 ****
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
    TODO_dump_symtab |
!   TODO_remove_functions | TODO_ggc_collect /* todo_flags_finish */
   },
   ipcp_generate_summary,			/* generate_summary */
   ipcp_write_summary,			/* write_summary */
--- 3632,3638 ----
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
    TODO_dump_symtab |
!   TODO_remove_functions         /* todo_flags_finish */
   },
   ipcp_generate_summary,			/* generate_summary */
   ipcp_write_summary,			/* write_summary */
Index: trunk/gcc/ipa-inline.c
===================================================================
*** trunk.orig/gcc/ipa-inline.c	2013-03-08 12:56:05.000000000 +0100
--- trunk/gcc/ipa-inline.c	2013-03-19 14:53:06.384776340 +0100
*************** struct gimple_opt_pass pass_early_inline
*** 2091,2097 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa | TODO_ggc_collect	/* todo_flags_finish */
   }
  };
  
--- 2091,2097 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
*************** struct ipa_opt_pass_d pass_ipa_inline =
*** 2125,2131 ****
    0,					/* properties_destroyed */
    TODO_remove_functions,		/* todo_flags_finish */
    TODO_dump_symtab 
!   | TODO_remove_functions | TODO_ggc_collect	/* todo_flags_finish */
   },
   inline_generate_summary,		/* generate_summary */
   inline_write_summary,			/* write_summary */
--- 2125,2131 ----
    0,					/* properties_destroyed */
    TODO_remove_functions,		/* todo_flags_finish */
    TODO_dump_symtab 
!   | TODO_remove_functions		/* todo_flags_finish */
   },
   inline_generate_summary,		/* generate_summary */
   inline_write_summary,			/* write_summary */
Index: trunk/gcc/ipa.c
===================================================================
*** trunk.orig/gcc/ipa.c	2013-01-17 13:38:08.000000000 +0100
--- trunk/gcc/ipa.c	2013-03-19 14:53:23.951971808 +0100
*************** struct simple_ipa_opt_pass pass_ipa_func
*** 957,964 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_remove_functions | TODO_dump_symtab
!   | TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 957,963 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_remove_functions | TODO_dump_symtab /* todo_flags_finish */
   }
  };
  
*************** struct simple_ipa_opt_pass pass_ipa_free
*** 987,993 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 986,992 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
*************** struct ipa_opt_pass_d pass_ipa_whole_pro
*** 1026,1033 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_remove_functions | TODO_dump_symtab
!   | TODO_ggc_collect			/* todo_flags_finish */
   },
   NULL,					/* generate_summary */
   NULL,					/* write_summary */
--- 1025,1031 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_remove_functions | TODO_dump_symtab /* todo_flags_finish */
   },
   NULL,					/* generate_summary */
   NULL,					/* write_summary */
Index: trunk/gcc/ira.c
===================================================================
*** trunk.orig/gcc/ira.c	2013-02-14 15:51:57.000000000 +0100
--- trunk/gcc/ira.c	2013-03-19 15:13:11.932087373 +0100
*************** ira (FILE *f)
*** 4359,4364 ****
--- 4359,4366 ----
    int rebuild_p;
    bool saved_flag_caller_saves = flag_caller_saves;
    enum ira_region saved_flag_ira_region = flag_ira_region;
+   basic_block bb;
+   bool need_dce;
  
    ira_conflicts_p = optimize > 0;
  
*************** ira (FILE *f)
*** 4588,4600 ****
        flag_caller_saves = saved_flag_caller_saves;
        flag_ira_region = saved_flag_ira_region;
      }
- }
- 
- static void
- do_reload (void)
- {
-   basic_block bb;
-   bool need_dce;
  
    if (flag_ira_verbose < 10)
      ira_dump_file = dump_file;
--- 4590,4595 ----
*************** do_reload (void)
*** 4634,4641 ****
  
    timevar_pop (TV_RELOAD);
  
-   timevar_push (TV_IRA);
- 
    if (ira_conflicts_p && ! ira_use_lra_p)
      {
        ira_free (ira_spilled_reg_stack_slots);
--- 4629,4634 ----
*************** do_reload (void)
*** 4693,4700 ****
  
    if (need_dce && optimize)
      run_fast_dce ();
- 
-   timevar_pop (TV_IRA);
  }
  \f
  /* Run the integrated register allocator.  */
--- 4686,4691 ----
*************** struct rtl_opt_pass pass_ira =
*** 4721,4753 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0,                                    /* todo_flags_finish */
!  }
! };
! 
! static unsigned int
! rest_of_handle_reload (void)
! {
!   do_reload ();
!   return 0;
! }
! 
! struct rtl_opt_pass pass_reload =
! {
!  {
!   RTL_PASS,
!   "reload",                             /* name */
!   OPTGROUP_NONE,                        /* optinfo_flags */
!   NULL,                                 /* gate */
!   rest_of_handle_reload,	        /* execute */
!   NULL,                                 /* sub */
!   NULL,                                 /* next */
!   0,                                    /* static_pass_number */
!   TV_RELOAD,	                        /* tv_id */
!   0,                                    /* properties_required */
!   0,                                    /* properties_provided */
!   0,                                    /* properties_destroyed */
!   0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 4712,4717 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
Index: trunk/gcc/loop-init.c
===================================================================
*** trunk.orig/gcc/loop-init.c	2013-03-19 13:18:37.000000000 +0100
--- trunk/gcc/loop-init.c	2013-03-19 16:35:23.655956258 +0100
*************** struct rtl_opt_pass pass_loop2 =
*** 318,324 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 318,324 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/lower-subreg.c
===================================================================
*** trunk.orig/gcc/lower-subreg.c	2013-02-25 13:37:17.000000000 +0100
--- trunk/gcc/lower-subreg.c	2013-03-19 14:53:52.171285783 +0100
*************** struct rtl_opt_pass pass_lower_subreg =
*** 1699,1705 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
-   TODO_ggc_collect |
    TODO_verify_flow                      /* todo_flags_finish */
   }
  };
--- 1699,1704 ----
*************** struct rtl_opt_pass pass_lower_subreg2 =
*** 1721,1727 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
-   TODO_ggc_collect |
    TODO_verify_flow                      /* todo_flags_finish */
   }
  };
--- 1720,1725 ----
Index: trunk/gcc/modulo-sched.c
===================================================================
*** trunk.orig/gcc/modulo-sched.c	2013-01-11 10:54:42.000000000 +0100
--- trunk/gcc/modulo-sched.c	2013-03-19 14:54:04.186419474 +0100
*************** struct rtl_opt_pass pass_sms =
*** 3369,3375 ****
    0,                                    /* todo_flags_start */
    TODO_df_finish
      | TODO_verify_flow
!     | TODO_verify_rtl_sharing
!     | TODO_ggc_collect                  /* todo_flags_finish */
   }
  };
--- 3369,3374 ----
    0,                                    /* todo_flags_start */
    TODO_df_finish
      | TODO_verify_flow
!     | TODO_verify_rtl_sharing           /* todo_flags_finish */
   }
  };
Index: trunk/gcc/postreload-gcse.c
===================================================================
*** trunk.orig/gcc/postreload-gcse.c	2013-01-11 10:54:28.000000000 +0100
--- trunk/gcc/postreload-gcse.c	2013-03-19 14:54:26.732670295 +0100
*************** struct rtl_opt_pass pass_gcse2 =
*** 1339,1344 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_verify_rtl_sharing
!   | TODO_verify_flow | TODO_ggc_collect /* todo_flags_finish */
   }
  };
--- 1339,1344 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_verify_rtl_sharing
!   | TODO_verify_flow                    /* todo_flags_finish */
   }
  };
Index: trunk/gcc/predict.c
===================================================================
*** trunk.orig/gcc/predict.c	2013-03-08 15:48:08.000000000 +0100
--- trunk/gcc/predict.c	2013-03-19 14:55:02.373064708 +0100
*************** struct gimple_opt_pass pass_profile =
*** 2895,2901 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect | TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
--- 2895,2901 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_strip_predic
*** 2915,2921 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect | TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
--- 2915,2921 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/ree.c
===================================================================
*** trunk.orig/gcc/ree.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/ree.c	2013-03-19 14:55:09.719145692 +0100
*************** struct rtl_opt_pass pass_ree =
*** 958,964 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect |
!   TODO_verify_rtl_sharing,              /* todo_flags_finish */
   }
  };
--- 958,963 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_rtl_sharing               /* todo_flags_finish */
   }
  };
Index: trunk/gcc/reg-stack.c
===================================================================
*** trunk.orig/gcc/reg-stack.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/reg-stack.c	2013-03-19 14:55:18.145238579 +0100
*************** struct rtl_opt_pass pass_stack_regs_run
*** 3344,3350 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 3344,3349 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/regmove.c
===================================================================
*** trunk.orig/gcc/regmove.c	2013-01-11 10:54:52.000000000 +0100
--- trunk/gcc/regmove.c	2013-03-19 14:55:22.974291828 +0100
*************** struct rtl_opt_pass pass_regmove =
*** 1377,1383 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 1377,1382 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
   }
  };
Index: trunk/gcc/reorg.c
===================================================================
*** trunk.orig/gcc/reorg.c	2013-01-11 10:54:31.000000000 +0100
--- trunk/gcc/reorg.c	2013-03-19 14:55:36.837444691 +0100
*************** struct rtl_opt_pass pass_delay_slots =
*** 3909,3915 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 3909,3915 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_machine_reorg =
*** 3944,3949 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 3944,3949 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
Index: trunk/gcc/sched-rgn.c
===================================================================
*** trunk.orig/gcc/sched-rgn.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/sched-rgn.c	2013-03-19 14:55:56.177657906 +0100
*************** struct rtl_opt_pass pass_sched =
*** 3628,3635 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
  
--- 3628,3634 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
  
*************** struct rtl_opt_pass pass_sched2 =
*** 3650,3656 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow |
!   TODO_ggc_collect                      /* todo_flags_finish */
   }
  };
--- 3649,3654 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
Index: trunk/gcc/store-motion.c
===================================================================
*** trunk.orig/gcc/store-motion.c	2013-01-11 10:54:52.000000000 +0100
--- trunk/gcc/store-motion.c	2013-03-19 14:56:02.297725389 +0100
*************** struct rtl_opt_pass pass_rtl_store_motio
*** 1249,1254 ****
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
   }
  };
--- 1249,1254 ----
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_df_finish | TODO_verify_rtl_sharing |
!   TODO_verify_flow                      /* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-cfgcleanup.c
===================================================================
*** trunk.orig/gcc/tree-cfgcleanup.c	2013-03-01 12:05:04.000000000 +0100
--- trunk/gcc/tree-cfgcleanup.c	2013-03-19 16:35:23.654956247 +0100
*************** struct gimple_opt_pass pass_merge_phi =
*** 992,998 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect      	/* todo_flags_finish */
!   | TODO_verify_ssa
   }
  };
--- 992,997 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_verify_ssa               /* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-complex.c
===================================================================
*** trunk.orig/gcc/tree-complex.c	2013-01-11 10:54:24.000000000 +0100
--- trunk/gcc/tree-complex.c	2013-03-19 14:57:00.809370589 +0100
*************** struct gimple_opt_pass pass_lower_comple
*** 1648,1656 ****
    PROP_gimple_lcx,			/* properties_provided */
    0,                       		/* properties_destroyed */
    0,					/* todo_flags_start */
!     TODO_ggc_collect
!     | TODO_update_ssa
!     | TODO_verify_stmts	 		/* todo_flags_finish */
   }
  };
  
--- 1648,1655 ----
    PROP_gimple_lcx,			/* properties_provided */
    0,                       		/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_update_ssa
!   | TODO_verify_stmts	 		/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_lower_comple
*** 1679,1686 ****
    PROP_gimple_lcx,			/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_update_ssa
!     | TODO_verify_stmts	 		/* todo_flags_finish */
   }
  };
--- 1678,1684 ----
    PROP_gimple_lcx,			/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_update_ssa
!   | TODO_verify_stmts	 		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-emutls.c
===================================================================
*** trunk.orig/gcc/tree-emutls.c	2013-01-11 10:54:30.000000000 +0100
--- trunk/gcc/tree-emutls.c	2013-03-19 14:57:04.606412445 +0100
*************** ipa_lower_emutls (void)
*** 798,804 ****
    access_vars.release ();
    free_varpool_node_set (tls_vars);
  
!   return TODO_ggc_collect | TODO_verify_all;
  }
  
  /* If the target supports TLS natively, we need do nothing here.  */
--- 798,804 ----
    access_vars.release ();
    free_varpool_node_set (tls_vars);
  
!   return TODO_verify_all;
  }
  
  /* If the target supports TLS natively, we need do nothing here.  */
Index: trunk/gcc/tree-loop-distribution.c
===================================================================
*** trunk.orig/gcc/tree-loop-distribution.c	2013-03-05 10:15:39.000000000 +0100
--- trunk/gcc/tree-loop-distribution.c	2013-03-19 14:57:10.918482053 +0100
*************** struct gimple_opt_pass pass_loop_distrib
*** 1585,1591 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!   | TODO_verify_ssa             /* todo_flags_finish */
   }
  };
--- 1585,1590 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_verify_ssa               /* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-nrv.c
===================================================================
*** trunk.orig/gcc/tree-nrv.c	2013-01-11 10:54:42.000000000 +0100
--- trunk/gcc/tree-nrv.c	2013-03-19 14:57:22.183606284 +0100
*************** struct gimple_opt_pass pass_nrv =
*** 285,291 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 285,291 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/tree-pass.h
===================================================================
*** trunk.orig/gcc/tree-pass.h	2013-03-07 15:55:32.000000000 +0100
--- trunk/gcc/tree-pass.h	2013-03-19 16:35:58.666318670 +0100
*************** struct simple_ipa_opt_pass
*** 153,159 ****
    (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
  
  /* To-do flags.  */
- #define TODO_ggc_collect		(1 << 1)
  #define TODO_verify_ssa			(1 << 2)
  #define TODO_verify_flow		(1 << 3)
  #define TODO_verify_stmts		(1 << 4)
--- 153,158 ----
*************** extern struct rtl_opt_pass pass_mode_swi
*** 445,451 ****
  extern struct rtl_opt_pass pass_sms;
  extern struct rtl_opt_pass pass_sched;
  extern struct rtl_opt_pass pass_ira;
- extern struct rtl_opt_pass pass_reload;
  extern struct rtl_opt_pass pass_clean_state;
  extern struct rtl_opt_pass pass_branch_prob;
  extern struct rtl_opt_pass pass_value_profile_transformations;
--- 444,449 ----
Index: trunk/gcc/tree-sra.c
===================================================================
*** trunk.orig/gcc/tree-sra.c	2013-03-19 13:18:37.000000000 +0100
--- trunk/gcc/tree-sra.c	2013-03-19 16:35:23.654956247 +0100
*************** struct gimple_opt_pass pass_sra_early =
*** 3450,3456 ****
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_update_ssa
-   | TODO_ggc_collect
    | TODO_verify_ssa			/* todo_flags_finish */
   }
  };
--- 3450,3455 ----
*************** struct gimple_opt_pass pass_sra =
*** 3472,3478 ****
    0,					/* properties_destroyed */
    TODO_update_address_taken,		/* todo_flags_start */
    TODO_update_ssa
-   | TODO_ggc_collect
    | TODO_verify_ssa			/* todo_flags_finish */
   }
  };
--- 3471,3476 ----
Index: trunk/gcc/tree-ssa-ccp.c
===================================================================
*** trunk.orig/gcc/tree-ssa-ccp.c	2013-02-20 16:19:27.000000000 +0100
--- trunk/gcc/tree-ssa-ccp.c	2013-03-19 14:57:35.191749754 +0100
*************** struct gimple_opt_pass pass_ccp =
*** 2139,2145 ****
    0,					/* todo_flags_start */
    TODO_verify_ssa
    | TODO_update_address_taken
!   | TODO_verify_stmts | TODO_ggc_collect/* todo_flags_finish */
   }
  };
  
--- 2139,2145 ----
    0,					/* todo_flags_start */
    TODO_verify_ssa
    | TODO_update_address_taken
!   | TODO_verify_stmts			/* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/tree-ssa-copy.c
===================================================================
*** trunk.orig/gcc/tree-ssa-copy.c	2013-03-19 11:35:19.000000000 +0100
--- trunk/gcc/tree-ssa-copy.c	2013-03-19 14:57:39.812800695 +0100
*************** struct gimple_opt_pass pass_copy_prop =
*** 844,850 ****
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_cleanup_cfg
-     | TODO_ggc_collect
      | TODO_verify_ssa
      | TODO_update_ssa			/* todo_flags_finish */
   }
--- 844,849 ----
Index: trunk/gcc/tree-ssa-dom.c
===================================================================
*** trunk.orig/gcc/tree-ssa-dom.c	2013-01-31 10:58:22.000000000 +0100
--- trunk/gcc/tree-ssa-dom.c	2013-03-19 14:57:45.883867651 +0100
*************** struct gimple_opt_pass pass_phi_only_cpr
*** 3043,3049 ****
    0,		                        /* properties_destroyed */
    0,                                    /* todo_flags_start */
    TODO_cleanup_cfg
-     | TODO_ggc_collect
      | TODO_verify_ssa
      | TODO_verify_stmts
      | TODO_update_ssa			/* todo_flags_finish */
--- 3043,3048 ----
Index: trunk/gcc/tree-ssa-dse.c
===================================================================
*** trunk.orig/gcc/tree-ssa-dse.c	2013-01-11 10:54:31.000000000 +0100
--- trunk/gcc/tree-ssa-dse.c	2013-03-19 14:57:50.096914113 +0100
*************** struct gimple_opt_pass pass_dse =
*** 366,372 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
--- 366,371 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_verify_ssa		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-forwprop.c
===================================================================
*** trunk.orig/gcc/tree-ssa-forwprop.c	2013-03-08 16:22:34.000000000 +0100
--- trunk/gcc/tree-ssa-forwprop.c	2013-03-19 14:57:54.751965447 +0100
*************** struct gimple_opt_pass pass_forwprop =
*** 3153,3160 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!   | TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
--- 3153,3159 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-ifcombine.c
===================================================================
*** trunk.orig/gcc/tree-ssa-ifcombine.c	2013-01-11 10:54:46.000000000 +0100
--- trunk/gcc/tree-ssa-ifcombine.c	2013-03-19 14:58:00.305026682 +0100
*************** struct gimple_opt_pass pass_tree_ifcombi
*** 664,671 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!   | TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
--- 664,670 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-loop.c
===================================================================
*** trunk.orig/gcc/tree-ssa-loop.c	2013-03-19 13:18:37.000000000 +0100
--- trunk/gcc/tree-ssa-loop.c	2013-03-19 16:35:23.643956132 +0100
*************** struct gimple_opt_pass pass_tree_loop =
*** 56,63 ****
    PROP_cfg,				/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   TODO_ggc_collect,			/* todo_flags_start */
!   TODO_verify_ssa | TODO_ggc_collect	/* todo_flags_finish */
   }
  };
  
--- 56,63 ----
    PROP_cfg,				/* properties_required */
    0,					/* properties_provided */
    0,					/* properties_destroyed */
!   0,					/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_tree_unswitc
*** 170,176 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect                  	/* todo_flags_finish */
   }
  };
  
--- 170,176 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_vectorize =
*** 245,251 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 245,251 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_complete_unr
*** 491,497 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 491,497 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_complete_unr
*** 538,545 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_flow
!     | TODO_ggc_collect 			/* todo_flags_finish */
   }
  };
  
--- 538,544 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_flow			/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_iv_optimize
*** 653,659 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_update_ssa | TODO_ggc_collect	/* todo_flags_finish */
   }
  };
  
--- 652,658 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_update_ssa			/* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/tree-ssa-phiopt.c
===================================================================
*** trunk.orig/gcc/tree-ssa-phiopt.c	2013-03-19 13:18:37.000000000 +0100
--- trunk/gcc/tree-ssa-phiopt.c	2013-03-19 16:35:23.654956247 +0100
*************** struct gimple_opt_pass pass_phiopt =
*** 2013,2020 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_verify_ssa
      | TODO_verify_flow
      | TODO_verify_stmts	 		/* todo_flags_finish */
   }
--- 2013,2019 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa
      | TODO_verify_flow
      | TODO_verify_stmts	 		/* todo_flags_finish */
   }
*************** struct gimple_opt_pass pass_cselim =
*** 2042,2049 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_verify_ssa
      | TODO_verify_flow
      | TODO_verify_stmts	 		/* todo_flags_finish */
   }
--- 2041,2047 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa
      | TODO_verify_flow
      | TODO_verify_stmts	 		/* todo_flags_finish */
   }
Index: trunk/gcc/tree-ssa-phiprop.c
===================================================================
*** trunk.orig/gcc/tree-ssa-phiprop.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/tree-ssa-phiprop.c	2013-03-19 14:58:50.951585259 +0100
*************** struct gimple_opt_pass pass_phiprop =
*** 420,427 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!   | TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
--- 420,426 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_update_ssa
    | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-pre.c
===================================================================
*** trunk.orig/gcc/tree-ssa-pre.c	2013-03-19 11:16:05.000000000 +0100
--- trunk/gcc/tree-ssa-pre.c	2013-03-19 14:59:07.428766988 +0100
*************** struct gimple_opt_pass pass_pre =
*** 4789,4795 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    TODO_rebuild_alias,			/* todo_flags_start */
!   TODO_ggc_collect | TODO_verify_ssa	/* todo_flags_finish */
   }
  };
  
--- 4789,4795 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    TODO_rebuild_alias,			/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
  
*************** struct gimple_opt_pass pass_fre =
*** 4841,4846 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
   }
  };
--- 4841,4846 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_verify_ssa			/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-reassoc.c
===================================================================
*** trunk.orig/gcc/tree-ssa-reassoc.c	2013-03-07 15:56:14.000000000 +0100
--- trunk/gcc/tree-ssa-reassoc.c	2013-03-19 14:59:14.888849246 +0100
*************** struct gimple_opt_pass pass_reassoc =
*** 4293,4299 ****
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_verify_ssa
!     | TODO_verify_flow
!     | TODO_ggc_collect			/* todo_flags_finish */
   }
  };
--- 4293,4298 ----
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_verify_ssa
!     | TODO_verify_flow			/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-sink.c
===================================================================
*** trunk.orig/gcc/tree-ssa-sink.c	2013-03-19 11:27:30.000000000 +0100
--- trunk/gcc/tree-ssa-sink.c	2013-03-19 14:59:21.649923834 +0100
*************** struct gimple_opt_pass pass_sink_code =
*** 597,603 ****
    0,					/* todo_flags_start */
    TODO_update_ssa
      | TODO_verify_ssa
!     | TODO_verify_flow
!     | TODO_ggc_collect			/* todo_flags_finish */
   }
  };
--- 597,602 ----
    0,					/* todo_flags_start */
    TODO_update_ssa
      | TODO_verify_ssa
!     | TODO_verify_flow			/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-ssa-strlen.c
===================================================================
*** trunk.orig/gcc/tree-ssa-strlen.c	2013-01-11 10:54:28.000000000 +0100
--- trunk/gcc/tree-ssa-strlen.c	2013-03-19 14:59:39.859124663 +0100
*************** struct gimple_opt_pass pass_strlen =
*** 2020,2026 ****
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_verify_ssa		/* todo_flags_finish */
   }
  };
--- 2020,2025 ----
    0,				/* properties_provided */
    0,				/* properties_destroyed */
    0,				/* todo_flags_start */
!   TODO_verify_ssa		/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree-switch-conversion.c
===================================================================
*** trunk.orig/gcc/tree-switch-conversion.c	2013-01-11 10:54:56.000000000 +0100
--- trunk/gcc/tree-switch-conversion.c	2013-03-19 14:59:43.423163973 +0100
*************** struct gimple_opt_pass pass_convert_swit
*** 1477,1483 ****
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_update_ssa 
!   | TODO_ggc_collect | TODO_verify_ssa
    | TODO_verify_stmts
    | TODO_verify_flow			/* todo_flags_finish */
   }
--- 1477,1483 ----
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
    TODO_update_ssa 
!   | TODO_verify_ssa
    | TODO_verify_stmts
    | TODO_verify_flow			/* todo_flags_finish */
   }
Index: trunk/gcc/tree-vectorizer.c
===================================================================
*** trunk.orig/gcc/tree-vectorizer.c	2013-03-18 09:55:09.000000000 +0100
--- trunk/gcc/tree-vectorizer.c	2013-03-19 14:59:47.037203861 +0100
*************** struct gimple_opt_pass pass_slp_vectoriz
*** 214,221 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_ggc_collect
!     | TODO_verify_ssa
      | TODO_update_ssa
      | TODO_verify_stmts                 /* todo_flags_finish */
   }
--- 214,220 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_verify_ssa
      | TODO_update_ssa
      | TODO_verify_stmts                 /* todo_flags_finish */
   }
Index: trunk/gcc/tree-vrp.c
===================================================================
*** trunk.orig/gcc/tree-vrp.c	2013-02-27 12:26:24.000000000 +0100
--- trunk/gcc/tree-vrp.c	2013-03-19 14:59:52.518264325 +0100
*************** struct gimple_opt_pass pass_vrp =
*** 9365,9371 ****
    TODO_cleanup_cfg
      | TODO_update_ssa
      | TODO_verify_ssa
!     | TODO_verify_flow
!     | TODO_ggc_collect			/* todo_flags_finish */
   }
  };
--- 9365,9370 ----
    TODO_cleanup_cfg
      | TODO_update_ssa
      | TODO_verify_ssa
!     | TODO_verify_flow			/* todo_flags_finish */
   }
  };
Index: trunk/gcc/tree.c
===================================================================
*** trunk.orig/gcc/tree.c	2013-03-18 09:55:00.000000000 +0100
--- trunk/gcc/tree.c	2013-03-19 14:59:59.297339104 +0100
*************** struct simple_ipa_opt_pass pass_ipa_free
*** 5296,5302 ****
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   TODO_ggc_collect			/* todo_flags_finish */
   }
  };
  
--- 5296,5302 ----
    0,					/* properties_provided */
    0,					/* properties_destroyed */
    0,					/* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
  
Index: trunk/gcc/config/i386/i386.c
===================================================================
*** trunk.orig/gcc/config/i386/i386.c	2013-03-07 13:26:01.000000000 +0100
--- trunk/gcc/config/i386/i386.c	2013-03-19 15:14:18.103818196 +0100
*************** static void
*** 3930,3936 ****
  ix86_option_override (void)
  {
    static struct register_pass_info insert_vzeroupper_info
!     = { &pass_insert_vzeroupper.pass, "reload",
  	1, PASS_POS_INSERT_AFTER
        };
  
--- 3930,3936 ----
  ix86_option_override (void)
  {
    static struct register_pass_info insert_vzeroupper_info
!     = { &pass_insert_vzeroupper.pass, "ira",
  	1, PASS_POS_INSERT_AFTER
        };
  

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-03-19 15:37   ` Richard Biener
@ 2013-03-21  9:07     ` Richard Biener
  2013-04-10 15:57       ` Richard Biener
  2013-04-11 10:45     ` Bernd Schmidt
  1 sibling, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-03-21  9:07 UTC (permalink / raw)
  To: gcc-patches

On Tue, 19 Mar 2013, Richard Biener wrote:

> On Tue, 19 Mar 2013, Richard Biener wrote:
> 
> > On Tue, 19 Mar 2013, Richard Biener wrote:
> > 
> > > 
> > > This adds a GC collection point after each pass instead just after
> > > those with TODO_ggc_collect in their todo.  The patch will possibly
> > > slow-down gcac checking a bit (80 passes have TODO_ggc_collect,
> > > I didn't try to enumerate those that do not, but a grep shows we
> > > may have up to 212 passes.  OTOH gcac checking will now "properly"
> > > verify that all pass boundaries are suitable for collection.
> > > 
> > > A complete patch will remove TODO_ggc_collect and all its uses
> > > as well.
> > > 
> > > The patch should result in lower peak memory consumption for
> > > some of the odd testcases that we worked on.
> > > 
> > > Bootstrap & regtest scheduled on x86_64-unknown-linux-gnu.
> > 
> > Which shows that I need to merge the IRA and reload/lra passes.
> > Honza tells me that they are considered "separate" has historical
> > reasons only.  Given that reload pushes TV_IRA and that the boundary
> > isn't GC safe I don't think that is too bad (dump files will now
> > be shared, of course).
> > 
> > I'll schedule a gcac checking bootstrap over night as well.
> 
> The following is it, changelog omits the boring part (enumerating
> all files and pass structs touched ...).
> 
> Regularly bootstrapped and tested on x86_64-unknown-linux-gnu,
> the gcac one is still running (as expected ...).
> 
> Any objections?

One testcase, g++.dg/pr55604.C, needs adjustment (it uses
-fdump-rtl-reload which is gone after the patch).

I let a gcac bootstrap run into stage3 (and then killed it after
3 days ...).  I also built a gcac compiler without bootstrapping
and ran the testsuite.  Unfortunately that results in lot of
timeouts and weird errors.  I have reported PR56673 for a GC issue
unrelated to this patch (multi-versioning is broken).  Weird errors
include -frepo linking errors.

Any hints on how to globally disable the dejagnu timeout so I can
eventually get a clean gcac testsuite run without the patch to
compare against (I doubt -frepo errors can be related to this patch).

Thanks,
Richard.

> 2013-03-19  Richard Biener  <rguenther@suse.de>
> 
> 	* passes.c (execute_todo): Do not call ggc_collect conditional here.
> 	(execute_one_ipa_transform_pass): But unconditionally here.
> 	(execute_one_pass): And here.
> 	(init_optimization_passes): Remove reload pass.
> 	* tree-pass.h (TODO_ggc_collect): Remove.
> 	(pass_reload): Likewise.
> 	* ira.c (do_reload): Merge into ...
> 	(ira): ... this.
> 	(rest_of_handle_reload): Remove.
> 	(pass_reload): Likewise.
> 	* config/i386/i386.c (ix86_option_override): Refer to ira instead
> 	of reload for vzeroupper pass placement.
> 	* <everywhere>: Remove TODO_ggc_collect from todo_flags_start
> 	and todo_flags_finish of all passes.
> 
> Index: trunk/gcc/passes.c
> ===================================================================
> *** trunk.orig/gcc/passes.c	2013-03-19 12:25:46.000000000 +0100
> --- trunk/gcc/passes.c	2013-03-19 15:07:06.015047490 +0100
> *************** static struct rtl_opt_pass pass_rest_of_
> *** 406,412 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 406,412 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
>   
> *************** static struct rtl_opt_pass pass_postrelo
> *** 432,438 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
>   
> --- 432,438 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing               /* todo_flags_finish */
>    }
>   };
>   
> *************** init_optimization_passes (void)
> *** 1620,1626 ****
>         NEXT_PASS (pass_sms);
>         NEXT_PASS (pass_sched);
>         NEXT_PASS (pass_ira);
> -       NEXT_PASS (pass_reload);
>         NEXT_PASS (pass_postreload);
>   	{
>   	  struct opt_pass **p = &pass_postreload.pass.sub;
> --- 1620,1625 ----
> *************** execute_todo (unsigned int flags)
> *** 2016,2024 ****
>         fflush (dump_file);
>       }
>   
> -   if (flags & TODO_ggc_collect)
> -     ggc_collect ();
> - 
>     /* Now that the dumping has been done, we can get rid of the optional
>        df problems.  */
>     if (flags & TODO_df_finish)
> --- 2015,2020 ----
> *************** execute_one_ipa_transform_pass (struct c
> *** 2190,2195 ****
> --- 2186,2194 ----
>     pass_fini_dump_file (pass);
>   
>     current_pass = NULL;
> + 
> +   /* Signal this is a suitable GC collection point.  */
> +   ggc_collect ();
>   }
>   
>   /* For the current function, execute all ipa transforms. */
> *************** execute_one_pass (struct opt_pass *pass)
> *** 2367,2372 ****
> --- 2366,2374 ----
>   
>     current_pass = NULL;
>   
> +   /* Signal this is a suitable GC collection point.  */
> +   ggc_collect ();
> + 
>     return true;
>   }
>   
> Index: trunk/gcc/bt-load.c
> ===================================================================
> *** trunk.orig/gcc/bt-load.c	2013-01-11 10:54:52.000000000 +0100
> --- trunk/gcc/bt-load.c	2013-03-19 14:49:29.666365217 +0100
> *************** struct rtl_opt_pass pass_branch_target_l
> *** 1520,1527 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing |
> !   TODO_ggc_collect,                     /* todo_flags_finish */
>    }
>   };
>   
> --- 1520,1526 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing,              /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_branch_target_l
> *** 1570,1575 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect,                     /* todo_flags_finish */
>    }
>   };
> --- 1569,1574 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0,                                    /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/cfgcleanup.c
> ===================================================================
> *** trunk.orig/gcc/cfgcleanup.c	2013-01-31 11:06:09.000000000 +0100
> --- trunk/gcc/cfgcleanup.c	2013-03-19 14:49:46.809555946 +0100
> *************** struct rtl_opt_pass pass_jump =
> *** 3057,3063 ****
>     0,					/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   TODO_ggc_collect,			/* todo_flags_start */
>     TODO_verify_rtl_sharing,		/* todo_flags_finish */
>    }
>   };
> --- 3057,3063 ----
>     0,					/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   0,					/* todo_flags_start */
>     TODO_verify_rtl_sharing,		/* todo_flags_finish */
>    }
>   };
> *************** struct rtl_opt_pass pass_jump2 =
> *** 3084,3090 ****
>     0,					/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   TODO_ggc_collect,			/* todo_flags_start */
>     TODO_verify_rtl_sharing,		/* todo_flags_finish */
>    }
>   };
> --- 3084,3090 ----
>     0,					/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   0,					/* todo_flags_start */
>     TODO_verify_rtl_sharing,		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/cfgexpand.c
> ===================================================================
> *** trunk.orig/gcc/cfgexpand.c	2013-03-18 12:31:42.000000000 +0100
> --- trunk/gcc/cfgexpand.c	2013-03-19 14:49:59.956702233 +0100
> *************** struct rtl_opt_pass pass_expand =
> *** 4863,4868 ****
>     PROP_ssa | PROP_trees,		/* properties_destroyed */
>     TODO_verify_ssa | TODO_verify_flow
>       | TODO_verify_stmts,		/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
> --- 4863,4868 ----
>     PROP_ssa | PROP_trees,		/* properties_destroyed */
>     TODO_verify_ssa | TODO_verify_flow
>       | TODO_verify_stmts,		/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/combine-stack-adj.c
> ===================================================================
> *** trunk.orig/gcc/combine-stack-adj.c	2013-01-11 10:55:26.000000000 +0100
> --- trunk/gcc/combine-stack-adj.c	2013-03-19 14:50:33.851079297 +0100
> *************** struct rtl_opt_pass pass_stack_adjustmen
> *** 659,665 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect,                     /* todo_flags_finish */
>    }
>   };
> --- 659,664 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/combine.c
> ===================================================================
> *** trunk.orig/gcc/combine.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/combine.c	2013-03-19 14:51:01.178383334 +0100
> *************** struct rtl_opt_pass pass_combine =
> *** 13823,13829 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect,                     /* todo_flags_finish */
>    }
>   };
> --- 13823,13828 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/compare-elim.c
> ===================================================================
> *** trunk.orig/gcc/compare-elim.c	2013-01-11 10:54:42.000000000 +0100
> --- trunk/gcc/compare-elim.c	2013-03-19 14:51:09.767478849 +0100
> *************** struct rtl_opt_pass pass_compare_elim_af
> *** 669,675 ****
>     0,					/* todo_flags_start */
>     TODO_df_finish
>     | TODO_df_verify
> !   | TODO_verify_rtl_sharing
> !   | TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
> --- 669,674 ----
>     0,					/* todo_flags_start */
>     TODO_df_finish
>     | TODO_df_verify
> !   | TODO_verify_rtl_sharing		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/cprop.c
> ===================================================================
> *** trunk.orig/gcc/cprop.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/cprop.c	2013-03-19 14:51:18.068571228 +0100
> *************** struct rtl_opt_pass pass_rtl_cprop =
> *** 1930,1935 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
>    }
>   };
> --- 1930,1935 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/cse.c
> ===================================================================
> *** trunk.orig/gcc/cse.c	2013-02-07 10:14:45.000000000 +0100
> --- trunk/gcc/cse.c	2013-03-19 14:51:33.389741719 +0100
> *************** struct rtl_opt_pass pass_cse =
> *** 7466,7473 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect |
> !   TODO_verify_flow,                     /* todo_flags_finish */
>    }
>   };
>   
> --- 7466,7472 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_cse2 =
> *** 7529,7535 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> -   TODO_ggc_collect |
>     TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> --- 7528,7533 ----
> *************** struct rtl_opt_pass pass_cse_after_globa
> *** 7590,7596 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> -   TODO_ggc_collect |
>     TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> --- 7588,7593 ----
> Index: trunk/gcc/dce.c
> ===================================================================
> *** trunk.orig/gcc/dce.c	2013-01-11 10:55:26.000000000 +0100
> --- trunk/gcc/dce.c	2013-03-19 14:51:45.045871389 +0100
> *************** struct rtl_opt_pass pass_ud_rtl_dce =
> *** 802,809 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                     /* todo_flags_finish */
>    }
>   };
>   
> --- 802,808 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_fast_rtl_dce =
> *** 1218,1224 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 1217,1222 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/dse.c
> ===================================================================
> *** trunk.orig/gcc/dse.c	2013-03-11 11:00:38.000000000 +0100
> --- trunk/gcc/dse.c	2013-03-19 14:51:53.264962797 +0100
> *************** struct rtl_opt_pass pass_rtl_dse1 =
> *** 3935,3942 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 3935,3941 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_rtl_dse2 =
> *** 3956,3962 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 3955,3960 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/final.c
> ===================================================================
> *** trunk.orig/gcc/final.c	2013-02-04 11:18:45.000000000 +0100
> --- trunk/gcc/final.c	2013-03-19 14:52:09.083138974 +0100
> *************** struct rtl_opt_pass pass_compute_alignme
> *** 821,828 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing
> !   | TODO_ggc_collect                    /* todo_flags_finish */
>    }
>   };
>   
> --- 821,827 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing               /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_final =
> *** 4405,4411 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 4404,4410 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/function.c
> ===================================================================
> *** trunk.orig/gcc/function.c	2013-03-11 11:00:39.000000000 +0100
> --- trunk/gcc/function.c	2013-03-19 14:52:27.275341219 +0100
> *************** struct rtl_opt_pass pass_thread_prologue
> *** 6995,7003 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     TODO_verify_flow,                     /* todo_flags_start */
> !   TODO_df_verify |
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   \f
> --- 6995,7002 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     TODO_verify_flow,                     /* todo_flags_start */
> !   TODO_df_verify | TODO_df_finish
> !   | TODO_verify_rtl_sharing             /* todo_flags_finish */
>    }
>   };
>   \f
> Index: trunk/gcc/gcse.c
> ===================================================================
> *** trunk.orig/gcc/gcse.c	2013-01-11 10:54:52.000000000 +0100
> --- trunk/gcc/gcse.c	2013-03-19 14:52:38.648467764 +0100
> *************** struct rtl_opt_pass pass_rtl_pre =
> *** 4154,4160 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
>    }
>   };
>   
> --- 4154,4160 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_rtl_hoist =
> *** 4175,4181 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
>    }
>   };
>   
> --- 4175,4181 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/ifcvt.c
> ===================================================================
> *** trunk.orig/gcc/ifcvt.c	2013-03-06 09:46:38.000000000 +0100
> --- trunk/gcc/ifcvt.c	2013-03-19 14:52:48.857581358 +0100
> *************** struct rtl_opt_pass pass_if_after_combin
> *** 4514,4521 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 4514,4520 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_if_after_reload
> *** 4551,4557 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 4550,4555 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/ipa-cp.c
> ===================================================================
> *** trunk.orig/gcc/ipa-cp.c	2013-03-01 12:05:02.000000000 +0100
> --- trunk/gcc/ipa-cp.c	2013-03-19 14:52:54.478643890 +0100
> *************** struct ipa_opt_pass_d pass_ipa_cp =
> *** 3632,3638 ****
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
>     TODO_dump_symtab |
> !   TODO_remove_functions | TODO_ggc_collect /* todo_flags_finish */
>    },
>    ipcp_generate_summary,			/* generate_summary */
>    ipcp_write_summary,			/* write_summary */
> --- 3632,3638 ----
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
>     TODO_dump_symtab |
> !   TODO_remove_functions         /* todo_flags_finish */
>    },
>    ipcp_generate_summary,			/* generate_summary */
>    ipcp_write_summary,			/* write_summary */
> Index: trunk/gcc/ipa-inline.c
> ===================================================================
> *** trunk.orig/gcc/ipa-inline.c	2013-03-08 12:56:05.000000000 +0100
> --- trunk/gcc/ipa-inline.c	2013-03-19 14:53:06.384776340 +0100
> *************** struct gimple_opt_pass pass_early_inline
> *** 2091,2097 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa | TODO_ggc_collect	/* todo_flags_finish */
>    }
>   };
>   
> --- 2091,2097 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> *************** struct ipa_opt_pass_d pass_ipa_inline =
> *** 2125,2131 ****
>     0,					/* properties_destroyed */
>     TODO_remove_functions,		/* todo_flags_finish */
>     TODO_dump_symtab 
> !   | TODO_remove_functions | TODO_ggc_collect	/* todo_flags_finish */
>    },
>    inline_generate_summary,		/* generate_summary */
>    inline_write_summary,			/* write_summary */
> --- 2125,2131 ----
>     0,					/* properties_destroyed */
>     TODO_remove_functions,		/* todo_flags_finish */
>     TODO_dump_symtab 
> !   | TODO_remove_functions		/* todo_flags_finish */
>    },
>    inline_generate_summary,		/* generate_summary */
>    inline_write_summary,			/* write_summary */
> Index: trunk/gcc/ipa.c
> ===================================================================
> *** trunk.orig/gcc/ipa.c	2013-01-17 13:38:08.000000000 +0100
> --- trunk/gcc/ipa.c	2013-03-19 14:53:23.951971808 +0100
> *************** struct simple_ipa_opt_pass pass_ipa_func
> *** 957,964 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_remove_functions | TODO_dump_symtab
> !   | TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 957,963 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_remove_functions | TODO_dump_symtab /* todo_flags_finish */
>    }
>   };
>   
> *************** struct simple_ipa_opt_pass pass_ipa_free
> *** 987,993 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 986,992 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> *************** struct ipa_opt_pass_d pass_ipa_whole_pro
> *** 1026,1033 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_remove_functions | TODO_dump_symtab
> !   | TODO_ggc_collect			/* todo_flags_finish */
>    },
>    NULL,					/* generate_summary */
>    NULL,					/* write_summary */
> --- 1025,1031 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_remove_functions | TODO_dump_symtab /* todo_flags_finish */
>    },
>    NULL,					/* generate_summary */
>    NULL,					/* write_summary */
> Index: trunk/gcc/ira.c
> ===================================================================
> *** trunk.orig/gcc/ira.c	2013-02-14 15:51:57.000000000 +0100
> --- trunk/gcc/ira.c	2013-03-19 15:13:11.932087373 +0100
> *************** ira (FILE *f)
> *** 4359,4364 ****
> --- 4359,4366 ----
>     int rebuild_p;
>     bool saved_flag_caller_saves = flag_caller_saves;
>     enum ira_region saved_flag_ira_region = flag_ira_region;
> +   basic_block bb;
> +   bool need_dce;
>   
>     ira_conflicts_p = optimize > 0;
>   
> *************** ira (FILE *f)
> *** 4588,4600 ****
>         flag_caller_saves = saved_flag_caller_saves;
>         flag_ira_region = saved_flag_ira_region;
>       }
> - }
> - 
> - static void
> - do_reload (void)
> - {
> -   basic_block bb;
> -   bool need_dce;
>   
>     if (flag_ira_verbose < 10)
>       ira_dump_file = dump_file;
> --- 4590,4595 ----
> *************** do_reload (void)
> *** 4634,4641 ****
>   
>     timevar_pop (TV_RELOAD);
>   
> -   timevar_push (TV_IRA);
> - 
>     if (ira_conflicts_p && ! ira_use_lra_p)
>       {
>         ira_free (ira_spilled_reg_stack_slots);
> --- 4629,4634 ----
> *************** do_reload (void)
> *** 4693,4700 ****
>   
>     if (need_dce && optimize)
>       run_fast_dce ();
> - 
> -   timevar_pop (TV_IRA);
>   }
>   \f
>   /* Run the integrated register allocator.  */
> --- 4686,4691 ----
> *************** struct rtl_opt_pass pass_ira =
> *** 4721,4753 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0,                                    /* todo_flags_finish */
> !  }
> ! };
> ! 
> ! static unsigned int
> ! rest_of_handle_reload (void)
> ! {
> !   do_reload ();
> !   return 0;
> ! }
> ! 
> ! struct rtl_opt_pass pass_reload =
> ! {
> !  {
> !   RTL_PASS,
> !   "reload",                             /* name */
> !   OPTGROUP_NONE,                        /* optinfo_flags */
> !   NULL,                                 /* gate */
> !   rest_of_handle_reload,	        /* execute */
> !   NULL,                                 /* sub */
> !   NULL,                                 /* next */
> !   0,                                    /* static_pass_number */
> !   TV_RELOAD,	                        /* tv_id */
> !   0,                                    /* properties_required */
> !   0,                                    /* properties_provided */
> !   0,                                    /* properties_destroyed */
> !   0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 4712,4717 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/loop-init.c
> ===================================================================
> *** trunk.orig/gcc/loop-init.c	2013-03-19 13:18:37.000000000 +0100
> --- trunk/gcc/loop-init.c	2013-03-19 16:35:23.655956258 +0100
> *************** struct rtl_opt_pass pass_loop2 =
> *** 318,324 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 318,324 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/lower-subreg.c
> ===================================================================
> *** trunk.orig/gcc/lower-subreg.c	2013-02-25 13:37:17.000000000 +0100
> --- trunk/gcc/lower-subreg.c	2013-03-19 14:53:52.171285783 +0100
> *************** struct rtl_opt_pass pass_lower_subreg =
> *** 1699,1705 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> -   TODO_ggc_collect |
>     TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> --- 1699,1704 ----
> *************** struct rtl_opt_pass pass_lower_subreg2 =
> *** 1721,1727 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> -   TODO_ggc_collect |
>     TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> --- 1720,1725 ----
> Index: trunk/gcc/modulo-sched.c
> ===================================================================
> *** trunk.orig/gcc/modulo-sched.c	2013-01-11 10:54:42.000000000 +0100
> --- trunk/gcc/modulo-sched.c	2013-03-19 14:54:04.186419474 +0100
> *************** struct rtl_opt_pass pass_sms =
> *** 3369,3375 ****
>     0,                                    /* todo_flags_start */
>     TODO_df_finish
>       | TODO_verify_flow
> !     | TODO_verify_rtl_sharing
> !     | TODO_ggc_collect                  /* todo_flags_finish */
>    }
>   };
> --- 3369,3374 ----
>     0,                                    /* todo_flags_start */
>     TODO_df_finish
>       | TODO_verify_flow
> !     | TODO_verify_rtl_sharing           /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/postreload-gcse.c
> ===================================================================
> *** trunk.orig/gcc/postreload-gcse.c	2013-01-11 10:54:28.000000000 +0100
> --- trunk/gcc/postreload-gcse.c	2013-03-19 14:54:26.732670295 +0100
> *************** struct rtl_opt_pass pass_gcse2 =
> *** 1339,1344 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_verify_rtl_sharing
> !   | TODO_verify_flow | TODO_ggc_collect /* todo_flags_finish */
>    }
>   };
> --- 1339,1344 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_verify_rtl_sharing
> !   | TODO_verify_flow                    /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/predict.c
> ===================================================================
> *** trunk.orig/gcc/predict.c	2013-03-08 15:48:08.000000000 +0100
> --- trunk/gcc/predict.c	2013-03-19 14:55:02.373064708 +0100
> *************** struct gimple_opt_pass pass_profile =
> *** 2895,2901 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect | TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> --- 2895,2901 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_strip_predic
> *** 2915,2921 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect | TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> --- 2915,2921 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/ree.c
> ===================================================================
> *** trunk.orig/gcc/ree.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/ree.c	2013-03-19 14:55:09.719145692 +0100
> *************** struct rtl_opt_pass pass_ree =
> *** 958,964 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect |
> !   TODO_verify_rtl_sharing,              /* todo_flags_finish */
>    }
>   };
> --- 958,963 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_rtl_sharing               /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/reg-stack.c
> ===================================================================
> *** trunk.orig/gcc/reg-stack.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/reg-stack.c	2013-03-19 14:55:18.145238579 +0100
> *************** struct rtl_opt_pass pass_stack_regs_run
> *** 3344,3350 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 3344,3349 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/regmove.c
> ===================================================================
> *** trunk.orig/gcc/regmove.c	2013-01-11 10:54:52.000000000 +0100
> --- trunk/gcc/regmove.c	2013-03-19 14:55:22.974291828 +0100
> *************** struct rtl_opt_pass pass_regmove =
> *** 1377,1383 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 1377,1382 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_df_finish | TODO_verify_rtl_sharing /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/reorg.c
> ===================================================================
> *** trunk.orig/gcc/reorg.c	2013-01-11 10:54:31.000000000 +0100
> --- trunk/gcc/reorg.c	2013-03-19 14:55:36.837444691 +0100
> *************** struct rtl_opt_pass pass_delay_slots =
> *** 3909,3915 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 3909,3915 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_machine_reorg =
> *** 3944,3949 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 3944,3949 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   0                                     /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/sched-rgn.c
> ===================================================================
> *** trunk.orig/gcc/sched-rgn.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/sched-rgn.c	2013-03-19 14:55:56.177657906 +0100
> *************** struct rtl_opt_pass pass_sched =
> *** 3628,3635 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
>   
> --- 3628,3634 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
>   
> *************** struct rtl_opt_pass pass_sched2 =
> *** 3650,3656 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow |
> !   TODO_ggc_collect                      /* todo_flags_finish */
>    }
>   };
> --- 3649,3654 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/store-motion.c
> ===================================================================
> *** trunk.orig/gcc/store-motion.c	2013-01-11 10:54:52.000000000 +0100
> --- trunk/gcc/store-motion.c	2013-03-19 14:56:02.297725389 +0100
> *************** struct rtl_opt_pass pass_rtl_store_motio
> *** 1249,1254 ****
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow | TODO_ggc_collect   /* todo_flags_finish */
>    }
>   };
> --- 1249,1254 ----
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_df_finish | TODO_verify_rtl_sharing |
> !   TODO_verify_flow                      /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-cfgcleanup.c
> ===================================================================
> *** trunk.orig/gcc/tree-cfgcleanup.c	2013-03-01 12:05:04.000000000 +0100
> --- trunk/gcc/tree-cfgcleanup.c	2013-03-19 16:35:23.654956247 +0100
> *************** struct gimple_opt_pass pass_merge_phi =
> *** 992,998 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect      	/* todo_flags_finish */
> !   | TODO_verify_ssa
>    }
>   };
> --- 992,997 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_verify_ssa               /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-complex.c
> ===================================================================
> *** trunk.orig/gcc/tree-complex.c	2013-01-11 10:54:24.000000000 +0100
> --- trunk/gcc/tree-complex.c	2013-03-19 14:57:00.809370589 +0100
> *************** struct gimple_opt_pass pass_lower_comple
> *** 1648,1656 ****
>     PROP_gimple_lcx,			/* properties_provided */
>     0,                       		/* properties_destroyed */
>     0,					/* todo_flags_start */
> !     TODO_ggc_collect
> !     | TODO_update_ssa
> !     | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
>   };
>   
> --- 1648,1655 ----
>     PROP_gimple_lcx,			/* properties_provided */
>     0,                       		/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_update_ssa
> !   | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_lower_comple
> *** 1679,1686 ****
>     PROP_gimple_lcx,			/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_update_ssa
> !     | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
>   };
> --- 1678,1684 ----
>     PROP_gimple_lcx,			/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_update_ssa
> !   | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-emutls.c
> ===================================================================
> *** trunk.orig/gcc/tree-emutls.c	2013-01-11 10:54:30.000000000 +0100
> --- trunk/gcc/tree-emutls.c	2013-03-19 14:57:04.606412445 +0100
> *************** ipa_lower_emutls (void)
> *** 798,804 ****
>     access_vars.release ();
>     free_varpool_node_set (tls_vars);
>   
> !   return TODO_ggc_collect | TODO_verify_all;
>   }
>   
>   /* If the target supports TLS natively, we need do nothing here.  */
> --- 798,804 ----
>     access_vars.release ();
>     free_varpool_node_set (tls_vars);
>   
> !   return TODO_verify_all;
>   }
>   
>   /* If the target supports TLS natively, we need do nothing here.  */
> Index: trunk/gcc/tree-loop-distribution.c
> ===================================================================
> *** trunk.orig/gcc/tree-loop-distribution.c	2013-03-05 10:15:39.000000000 +0100
> --- trunk/gcc/tree-loop-distribution.c	2013-03-19 14:57:10.918482053 +0100
> *************** struct gimple_opt_pass pass_loop_distrib
> *** 1585,1591 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !   | TODO_verify_ssa             /* todo_flags_finish */
>    }
>   };
> --- 1585,1590 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_verify_ssa               /* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-nrv.c
> ===================================================================
> *** trunk.orig/gcc/tree-nrv.c	2013-01-11 10:54:42.000000000 +0100
> --- trunk/gcc/tree-nrv.c	2013-03-19 14:57:22.183606284 +0100
> *************** struct gimple_opt_pass pass_nrv =
> *** 285,291 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 285,291 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/tree-pass.h
> ===================================================================
> *** trunk.orig/gcc/tree-pass.h	2013-03-07 15:55:32.000000000 +0100
> --- trunk/gcc/tree-pass.h	2013-03-19 16:35:58.666318670 +0100
> *************** struct simple_ipa_opt_pass
> *** 153,159 ****
>     (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
>   
>   /* To-do flags.  */
> - #define TODO_ggc_collect		(1 << 1)
>   #define TODO_verify_ssa			(1 << 2)
>   #define TODO_verify_flow		(1 << 3)
>   #define TODO_verify_stmts		(1 << 4)
> --- 153,158 ----
> *************** extern struct rtl_opt_pass pass_mode_swi
> *** 445,451 ****
>   extern struct rtl_opt_pass pass_sms;
>   extern struct rtl_opt_pass pass_sched;
>   extern struct rtl_opt_pass pass_ira;
> - extern struct rtl_opt_pass pass_reload;
>   extern struct rtl_opt_pass pass_clean_state;
>   extern struct rtl_opt_pass pass_branch_prob;
>   extern struct rtl_opt_pass pass_value_profile_transformations;
> --- 444,449 ----
> Index: trunk/gcc/tree-sra.c
> ===================================================================
> *** trunk.orig/gcc/tree-sra.c	2013-03-19 13:18:37.000000000 +0100
> --- trunk/gcc/tree-sra.c	2013-03-19 16:35:23.654956247 +0100
> *************** struct gimple_opt_pass pass_sra_early =
> *** 3450,3456 ****
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_update_ssa
> -   | TODO_ggc_collect
>     | TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
> --- 3450,3455 ----
> *************** struct gimple_opt_pass pass_sra =
> *** 3472,3478 ****
>     0,					/* properties_destroyed */
>     TODO_update_address_taken,		/* todo_flags_start */
>     TODO_update_ssa
> -   | TODO_ggc_collect
>     | TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
> --- 3471,3476 ----
> Index: trunk/gcc/tree-ssa-ccp.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-ccp.c	2013-02-20 16:19:27.000000000 +0100
> --- trunk/gcc/tree-ssa-ccp.c	2013-03-19 14:57:35.191749754 +0100
> *************** struct gimple_opt_pass pass_ccp =
> *** 2139,2145 ****
>     0,					/* todo_flags_start */
>     TODO_verify_ssa
>     | TODO_update_address_taken
> !   | TODO_verify_stmts | TODO_ggc_collect/* todo_flags_finish */
>    }
>   };
>   
> --- 2139,2145 ----
>     0,					/* todo_flags_start */
>     TODO_verify_ssa
>     | TODO_update_address_taken
> !   | TODO_verify_stmts			/* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/tree-ssa-copy.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-copy.c	2013-03-19 11:35:19.000000000 +0100
> --- trunk/gcc/tree-ssa-copy.c	2013-03-19 14:57:39.812800695 +0100
> *************** struct gimple_opt_pass pass_copy_prop =
> *** 844,850 ****
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_cleanup_cfg
> -     | TODO_ggc_collect
>       | TODO_verify_ssa
>       | TODO_update_ssa			/* todo_flags_finish */
>    }
> --- 844,849 ----
> Index: trunk/gcc/tree-ssa-dom.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-dom.c	2013-01-31 10:58:22.000000000 +0100
> --- trunk/gcc/tree-ssa-dom.c	2013-03-19 14:57:45.883867651 +0100
> *************** struct gimple_opt_pass pass_phi_only_cpr
> *** 3043,3049 ****
>     0,		                        /* properties_destroyed */
>     0,                                    /* todo_flags_start */
>     TODO_cleanup_cfg
> -     | TODO_ggc_collect
>       | TODO_verify_ssa
>       | TODO_verify_stmts
>       | TODO_update_ssa			/* todo_flags_finish */
> --- 3043,3048 ----
> Index: trunk/gcc/tree-ssa-dse.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-dse.c	2013-01-11 10:54:31.000000000 +0100
> --- trunk/gcc/tree-ssa-dse.c	2013-03-19 14:57:50.096914113 +0100
> *************** struct gimple_opt_pass pass_dse =
> *** 366,372 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> --- 366,371 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-forwprop.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-forwprop.c	2013-03-08 16:22:34.000000000 +0100
> --- trunk/gcc/tree-ssa-forwprop.c	2013-03-19 14:57:54.751965447 +0100
> *************** struct gimple_opt_pass pass_forwprop =
> *** 3153,3160 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !   | TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> --- 3153,3159 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-ifcombine.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-ifcombine.c	2013-01-11 10:54:46.000000000 +0100
> --- trunk/gcc/tree-ssa-ifcombine.c	2013-03-19 14:58:00.305026682 +0100
> *************** struct gimple_opt_pass pass_tree_ifcombi
> *** 664,671 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !   | TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> --- 664,670 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-loop.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-loop.c	2013-03-19 13:18:37.000000000 +0100
> --- trunk/gcc/tree-ssa-loop.c	2013-03-19 16:35:23.643956132 +0100
> *************** struct gimple_opt_pass pass_tree_loop =
> *** 56,63 ****
>     PROP_cfg,				/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   TODO_ggc_collect,			/* todo_flags_start */
> !   TODO_verify_ssa | TODO_ggc_collect	/* todo_flags_finish */
>    }
>   };
>   
> --- 56,63 ----
>     PROP_cfg,				/* properties_required */
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
> !   0,					/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_tree_unswitc
> *** 170,176 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect                  	/* todo_flags_finish */
>    }
>   };
>   
> --- 170,176 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_vectorize =
> *** 245,251 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 245,251 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_complete_unr
> *** 491,497 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 491,497 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_complete_unr
> *** 538,545 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_flow
> !     | TODO_ggc_collect 			/* todo_flags_finish */
>    }
>   };
>   
> --- 538,544 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_flow			/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_iv_optimize
> *** 653,659 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_update_ssa | TODO_ggc_collect	/* todo_flags_finish */
>    }
>   };
>   
> --- 652,658 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_update_ssa			/* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/tree-ssa-phiopt.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-phiopt.c	2013-03-19 13:18:37.000000000 +0100
> --- trunk/gcc/tree-ssa-phiopt.c	2013-03-19 16:35:23.654956247 +0100
> *************** struct gimple_opt_pass pass_phiopt =
> *** 2013,2020 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_verify_ssa
>       | TODO_verify_flow
>       | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
> --- 2013,2019 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa
>       | TODO_verify_flow
>       | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
> *************** struct gimple_opt_pass pass_cselim =
> *** 2042,2049 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_verify_ssa
>       | TODO_verify_flow
>       | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
> --- 2041,2047 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa
>       | TODO_verify_flow
>       | TODO_verify_stmts	 		/* todo_flags_finish */
>    }
> Index: trunk/gcc/tree-ssa-phiprop.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-phiprop.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/tree-ssa-phiprop.c	2013-03-19 14:58:50.951585259 +0100
> *************** struct gimple_opt_pass pass_phiprop =
> *** 420,427 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !   | TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> --- 420,426 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_update_ssa
>     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-pre.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-pre.c	2013-03-19 11:16:05.000000000 +0100
> --- trunk/gcc/tree-ssa-pre.c	2013-03-19 14:59:07.428766988 +0100
> *************** struct gimple_opt_pass pass_pre =
> *** 4789,4795 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     TODO_rebuild_alias,			/* todo_flags_start */
> !   TODO_ggc_collect | TODO_verify_ssa	/* todo_flags_finish */
>    }
>   };
>   
> --- 4789,4795 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     TODO_rebuild_alias,			/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
>   
> *************** struct gimple_opt_pass pass_fre =
> *** 4841,4846 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
>    }
>   };
> --- 4841,4846 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_verify_ssa			/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-reassoc.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-reassoc.c	2013-03-07 15:56:14.000000000 +0100
> --- trunk/gcc/tree-ssa-reassoc.c	2013-03-19 14:59:14.888849246 +0100
> *************** struct gimple_opt_pass pass_reassoc =
> *** 4293,4299 ****
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_verify_ssa
> !     | TODO_verify_flow
> !     | TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
> --- 4293,4298 ----
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_verify_ssa
> !     | TODO_verify_flow			/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-sink.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-sink.c	2013-03-19 11:27:30.000000000 +0100
> --- trunk/gcc/tree-ssa-sink.c	2013-03-19 14:59:21.649923834 +0100
> *************** struct gimple_opt_pass pass_sink_code =
> *** 597,603 ****
>     0,					/* todo_flags_start */
>     TODO_update_ssa
>       | TODO_verify_ssa
> !     | TODO_verify_flow
> !     | TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
> --- 597,602 ----
>     0,					/* todo_flags_start */
>     TODO_update_ssa
>       | TODO_verify_ssa
> !     | TODO_verify_flow			/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-ssa-strlen.c
> ===================================================================
> *** trunk.orig/gcc/tree-ssa-strlen.c	2013-01-11 10:54:28.000000000 +0100
> --- trunk/gcc/tree-ssa-strlen.c	2013-03-19 14:59:39.859124663 +0100
> *************** struct gimple_opt_pass pass_strlen =
> *** 2020,2026 ****
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> --- 2020,2025 ----
>     0,				/* properties_provided */
>     0,				/* properties_destroyed */
>     0,				/* todo_flags_start */
> !   TODO_verify_ssa		/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree-switch-conversion.c
> ===================================================================
> *** trunk.orig/gcc/tree-switch-conversion.c	2013-01-11 10:54:56.000000000 +0100
> --- trunk/gcc/tree-switch-conversion.c	2013-03-19 14:59:43.423163973 +0100
> *************** struct gimple_opt_pass pass_convert_swit
> *** 1477,1483 ****
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_update_ssa 
> !   | TODO_ggc_collect | TODO_verify_ssa
>     | TODO_verify_stmts
>     | TODO_verify_flow			/* todo_flags_finish */
>    }
> --- 1477,1483 ----
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
>     TODO_update_ssa 
> !   | TODO_verify_ssa
>     | TODO_verify_stmts
>     | TODO_verify_flow			/* todo_flags_finish */
>    }
> Index: trunk/gcc/tree-vectorizer.c
> ===================================================================
> *** trunk.orig/gcc/tree-vectorizer.c	2013-03-18 09:55:09.000000000 +0100
> --- trunk/gcc/tree-vectorizer.c	2013-03-19 14:59:47.037203861 +0100
> *************** struct gimple_opt_pass pass_slp_vectoriz
> *** 214,221 ****
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_ggc_collect
> !     | TODO_verify_ssa
>       | TODO_update_ssa
>       | TODO_verify_stmts                 /* todo_flags_finish */
>    }
> --- 214,220 ----
>     0,                                    /* properties_provided */
>     0,                                    /* properties_destroyed */
>     0,                                    /* todo_flags_start */
> !   TODO_verify_ssa
>       | TODO_update_ssa
>       | TODO_verify_stmts                 /* todo_flags_finish */
>    }
> Index: trunk/gcc/tree-vrp.c
> ===================================================================
> *** trunk.orig/gcc/tree-vrp.c	2013-02-27 12:26:24.000000000 +0100
> --- trunk/gcc/tree-vrp.c	2013-03-19 14:59:52.518264325 +0100
> *************** struct gimple_opt_pass pass_vrp =
> *** 9365,9371 ****
>     TODO_cleanup_cfg
>       | TODO_update_ssa
>       | TODO_verify_ssa
> !     | TODO_verify_flow
> !     | TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
> --- 9365,9370 ----
>     TODO_cleanup_cfg
>       | TODO_update_ssa
>       | TODO_verify_ssa
> !     | TODO_verify_flow			/* todo_flags_finish */
>    }
>   };
> Index: trunk/gcc/tree.c
> ===================================================================
> *** trunk.orig/gcc/tree.c	2013-03-18 09:55:00.000000000 +0100
> --- trunk/gcc/tree.c	2013-03-19 14:59:59.297339104 +0100
> *************** struct simple_ipa_opt_pass pass_ipa_free
> *** 5296,5302 ****
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   TODO_ggc_collect			/* todo_flags_finish */
>    }
>   };
>   
> --- 5296,5302 ----
>     0,					/* properties_provided */
>     0,					/* properties_destroyed */
>     0,					/* todo_flags_start */
> !   0					/* todo_flags_finish */
>    }
>   };
>   
> Index: trunk/gcc/config/i386/i386.c
> ===================================================================
> *** trunk.orig/gcc/config/i386/i386.c	2013-03-07 13:26:01.000000000 +0100
> --- trunk/gcc/config/i386/i386.c	2013-03-19 15:14:18.103818196 +0100
> *************** static void
> *** 3930,3936 ****
>   ix86_option_override (void)
>   {
>     static struct register_pass_info insert_vzeroupper_info
> !     = { &pass_insert_vzeroupper.pass, "reload",
>   	1, PASS_POS_INSERT_AFTER
>         };
>   
> --- 3930,3936 ----
>   ix86_option_override (void)
>   {
>     static struct register_pass_info insert_vzeroupper_info
> !     = { &pass_insert_vzeroupper.pass, "ira",
>   	1, PASS_POS_INSERT_AFTER
>         };
>   
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-03-21  9:07     ` Richard Biener
@ 2013-04-10 15:57       ` Richard Biener
  0 siblings, 0 replies; 16+ messages in thread
From: Richard Biener @ 2013-04-10 15:57 UTC (permalink / raw)
  To: gcc-patches

On Thu, 21 Mar 2013, Richard Biener wrote:

> On Tue, 19 Mar 2013, Richard Biener wrote:
> 
> > On Tue, 19 Mar 2013, Richard Biener wrote:
> > 
> > > On Tue, 19 Mar 2013, Richard Biener wrote:
> > > 
> > > > 
> > > > This adds a GC collection point after each pass instead just after
> > > > those with TODO_ggc_collect in their todo.  The patch will possibly
> > > > slow-down gcac checking a bit (80 passes have TODO_ggc_collect,
> > > > I didn't try to enumerate those that do not, but a grep shows we
> > > > may have up to 212 passes.  OTOH gcac checking will now "properly"
> > > > verify that all pass boundaries are suitable for collection.
> > > > 
> > > > A complete patch will remove TODO_ggc_collect and all its uses
> > > > as well.
> > > > 
> > > > The patch should result in lower peak memory consumption for
> > > > some of the odd testcases that we worked on.
> > > > 
> > > > Bootstrap & regtest scheduled on x86_64-unknown-linux-gnu.
> > > 
> > > Which shows that I need to merge the IRA and reload/lra passes.
> > > Honza tells me that they are considered "separate" has historical
> > > reasons only.  Given that reload pushes TV_IRA and that the boundary
> > > isn't GC safe I don't think that is too bad (dump files will now
> > > be shared, of course).
> > > 
> > > I'll schedule a gcac checking bootstrap over night as well.
> > 
> > The following is it, changelog omits the boring part (enumerating
> > all files and pass structs touched ...).
> > 
> > Regularly bootstrapped and tested on x86_64-unknown-linux-gnu,
> > the gcac one is still running (as expected ...).
> > 
> > Any objections?
> 
> One testcase, g++.dg/pr55604.C, needs adjustment (it uses
> -fdump-rtl-reload which is gone after the patch).
> 
> I let a gcac bootstrap run into stage3 (and then killed it after
> 3 days ...).  I also built a gcac compiler without bootstrapping
> and ran the testsuite.  Unfortunately that results in lot of
> timeouts and weird errors.  I have reported PR56673 for a GC issue
> unrelated to this patch (multi-versioning is broken).  Weird errors
> include -frepo linking errors.
> 
> Any hints on how to globally disable the dejagnu timeout so I can
> eventually get a clean gcac testsuite run without the patch to
> compare against (I doubt -frepo errors can be related to this patch).

I went ahead with this now, given no comments at all and this
both bit-rotting and blocking the IL verifier TODO cleanups
in my pipeline.

Re-bootstrapped and tested on x86_64-unknown-linux-gnu and
committed.

Richard.

> > 2013-03-19  Richard Biener  <rguenther@suse.de>
> > 
> > 	* passes.c (execute_todo): Do not call ggc_collect conditional here.
> > 	(execute_one_ipa_transform_pass): But unconditionally here.
> > 	(execute_one_pass): And here.
> > 	(init_optimization_passes): Remove reload pass.
> > 	* tree-pass.h (TODO_ggc_collect): Remove.
> > 	(pass_reload): Likewise.
> > 	* ira.c (do_reload): Merge into ...
> > 	(ira): ... this.
> > 	(rest_of_handle_reload): Remove.
> > 	(pass_reload): Likewise.
> > 	* config/i386/i386.c (ix86_option_override): Refer to ira instead
> > 	of reload for vzeroupper pass placement.
> > 	* <everywhere>: Remove TODO_ggc_collect from todo_flags_start
> > 	and todo_flags_finish of all passes.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-03-19 15:37   ` Richard Biener
  2013-03-21  9:07     ` Richard Biener
@ 2013-04-11 10:45     ` Bernd Schmidt
  2013-04-11 10:47       ` Richard Biener
  1 sibling, 1 reply; 16+ messages in thread
From: Bernd Schmidt @ 2013-04-11 10:45 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

On 03/19/2013 04:37 PM, Richard Biener wrote:
> On Tue, 19 Mar 2013, Richard Biener wrote:
>> Which shows that I need to merge the IRA and reload/lra passes.
>> Honza tells me that they are considered "separate" has historical
>> reasons only.  Given that reload pushes TV_IRA and that the boundary
>> isn't GC safe I don't think that is too bad (dump files will now
>> be shared, of course).
>>
>> I'll schedule a gcac checking bootstrap over night as well.
> 
> The following is it, changelog omits the boring part (enumerating
> all files and pass structs touched ...).
> 
> Regularly bootstrapped and tested on x86_64-unknown-linux-gnu,
> the gcac one is still running (as expected ...).
> 
> Any objections?

Yes actually. I explicitly split these into two so that we get a
meaningful IRA debugging dump. Please undo this change.


Bernd

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 10:45     ` Bernd Schmidt
@ 2013-04-11 10:47       ` Richard Biener
  2013-04-11 11:13         ` Bernd Schmidt
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-04-11 10:47 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: gcc-patches, vmakarov

On Thu, 11 Apr 2013, Bernd Schmidt wrote:

> On 03/19/2013 04:37 PM, Richard Biener wrote:
> > On Tue, 19 Mar 2013, Richard Biener wrote:
> >> Which shows that I need to merge the IRA and reload/lra passes.
> >> Honza tells me that they are considered "separate" has historical
> >> reasons only.  Given that reload pushes TV_IRA and that the boundary
> >> isn't GC safe I don't think that is too bad (dump files will now
> >> be shared, of course).
> >>
> >> I'll schedule a gcac checking bootstrap over night as well.
> > 
> > The following is it, changelog omits the boring part (enumerating
> > all files and pass structs touched ...).
> > 
> > Regularly bootstrapped and tested on x86_64-unknown-linux-gnu,
> > the gcac one is still running (as expected ...).
> > 
> > Any objections?
> 
> Yes actually. I explicitly split these into two so that we get a
> meaningful IRA debugging dump. Please undo this change.

Any particular suggestions?  The easiest "split" is to emit
a '================ reload/lra =============' marker (or similar).
Another possibility is to try making the IRA/reload/LRA boundary
GC safe (I didn't even try to see what is missing).  As other
people noted that they are two distinct "passes" is an artifact
as the IL "between" them is in no useful form (you can't insert
any other pass inbetween).  Another possibility is to somehow
teach the dump machinery to allow switching to an alternate
dumpfile.

I'm for whatever is the least work for me, and a single dumpfile
doesn't sound bad to me if the two pieces can be easily identified
(look for example at the 000i.cgraph dump, or IPA pass dumps in general).

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 10:47       ` Richard Biener
@ 2013-04-11 11:13         ` Bernd Schmidt
  2013-04-11 11:21           ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Bernd Schmidt @ 2013-04-11 11:13 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, vmakarov

On 04/11/2013 12:05 PM, Richard Biener wrote:
> Any particular suggestions?  The easiest "split" is to emit
> a '================ reload/lra =============' marker (or similar).

It's about getting a dump of the insns, in two separate files so that
one can do diffs (between sched1/ira or ira/reload).

> Another possibility is to try making the IRA/reload/LRA boundary
> GC safe (I didn't even try to see what is missing).  As other
> people noted that they are two distinct "passes" is an artifact
> as the IL "between" them is in no useful form (you can't insert
> any other pass inbetween).  Another possibility is to somehow
> teach the dump machinery to allow switching to an alternate
> dumpfile.
> 
> I'm for whatever is the least work for me, and a single dumpfile
> doesn't sound bad to me if the two pieces can be easily identified
> (look for example at the 000i.cgraph dump, or IPA pass dumps in general).

Why do we need to remove TODO_ggc_collect anyway? I think a straight
revert is the simplest solution.


Bernd


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 11:13         ` Bernd Schmidt
@ 2013-04-11 11:21           ` Richard Biener
  2013-04-11 11:44             ` Bernd Schmidt
  2013-04-11 11:58             ` Jakub Jelinek
  0 siblings, 2 replies; 16+ messages in thread
From: Richard Biener @ 2013-04-11 11:21 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: gcc-patches, vmakarov

On Thu, 11 Apr 2013, Bernd Schmidt wrote:

> On 04/11/2013 12:05 PM, Richard Biener wrote:
> > Any particular suggestions?  The easiest "split" is to emit
> > a '================ reload/lra =============' marker (or similar).
> 
> It's about getting a dump of the insns, in two separate files so that
> one can do diffs (between sched1/ira or ira/reload).
> 
> > Another possibility is to try making the IRA/reload/LRA boundary
> > GC safe (I didn't even try to see what is missing).  As other
> > people noted that they are two distinct "passes" is an artifact
> > as the IL "between" them is in no useful form (you can't insert
> > any other pass inbetween).  Another possibility is to somehow
> > teach the dump machinery to allow switching to an alternate
> > dumpfile.
> > 
> > I'm for whatever is the least work for me, and a single dumpfile
> > doesn't sound bad to me if the two pieces can be easily identified
> > (look for example at the 000i.cgraph dump, or IPA pass dumps in general).
> 
> Why do we need to remove TODO_ggc_collect anyway? I think a straight
> revert is the simplest solution.

The point was not to remove TODO_ggc_collect, the point was to
both enforce the GC boundary at all passes (that's what the pass
manager assumes anyway) and to collect when necessary at such
well-defined boundaries.  Another approach would have been to
add TODO_ggc_collect everywhere where it wasn't.

Note that pending patches will similarly enforce a verification
of all IL properties that are seemingly active.  Thus it will
remove stuff like TODO_verify_flow_info and verify that always
between passes if there is a CFG.  I routinely discover
verification issues in unrelated passes because verify TODOs
are missing in a lot of places.  I'm quite sure that IL
verification between IRA and reload will not work (it doesn't
for loop verification at least - one reason I throw away
loop info after RTL loop opts ...)

So, the option I didn't mention is to add a way to disable the
GC (clearing/setting a property for example).

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 11:21           ` Richard Biener
@ 2013-04-11 11:44             ` Bernd Schmidt
  2013-04-11 12:10               ` Richard Biener
  2013-04-11 11:58             ` Jakub Jelinek
  1 sibling, 1 reply; 16+ messages in thread
From: Bernd Schmidt @ 2013-04-11 11:44 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, vmakarov

On 04/11/2013 12:26 PM, Richard Biener wrote:
> 
> The point was not to remove TODO_ggc_collect, the point was to
> both enforce the GC boundary at all passes (that's what the pass
> manager assumes anyway) and to collect when necessary at such
> well-defined boundaries.  Another approach would have been to
> add TODO_ggc_collect everywhere where it wasn't.

> Note that pending patches will similarly enforce a verification
> of all IL properties that are seemingly active.
[...]

> So, the option I didn't mention is to add a way to disable the
> GC (clearing/setting a property for example).

Maybe a "subpass" bit that could be set on IRA (or any other pass that
only prepares for another, it might be nice to split up some overly
large md_reorg passes) so that all these verifications and GC are skipped?


Bernd

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 11:21           ` Richard Biener
  2013-04-11 11:44             ` Bernd Schmidt
@ 2013-04-11 11:58             ` Jakub Jelinek
  2013-04-11 12:22               ` Richard Biener
  1 sibling, 1 reply; 16+ messages in thread
From: Jakub Jelinek @ 2013-04-11 11:58 UTC (permalink / raw)
  To: Richard Biener; +Cc: Bernd Schmidt, gcc-patches, vmakarov

On Thu, Apr 11, 2013 at 12:26:00PM +0200, Richard Biener wrote:
> So, the option I didn't mention is to add a way to disable the
> GC (clearing/setting a property for example).

Yeah, TODO_ggc_avoid_collect or similar would be easiest, plus
perhaps some way of expressing the requirement that "this pass must
immediately <follow,precede> <anotherpass>", for non-immediate
ordering we can add properties I guess.

	Jakub

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 11:44             ` Bernd Schmidt
@ 2013-04-11 12:10               ` Richard Biener
  0 siblings, 0 replies; 16+ messages in thread
From: Richard Biener @ 2013-04-11 12:10 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: gcc-patches, vmakarov

On Thu, 11 Apr 2013, Bernd Schmidt wrote:

> On 04/11/2013 12:26 PM, Richard Biener wrote:
> > 
> > The point was not to remove TODO_ggc_collect, the point was to
> > both enforce the GC boundary at all passes (that's what the pass
> > manager assumes anyway) and to collect when necessary at such
> > well-defined boundaries.  Another approach would have been to
> > add TODO_ggc_collect everywhere where it wasn't.
> 
> > Note that pending patches will similarly enforce a verification
> > of all IL properties that are seemingly active.
> [...]
> 
> > So, the option I didn't mention is to add a way to disable the
> > GC (clearing/setting a property for example).
> 
> Maybe a "subpass" bit that could be set on IRA (or any other pass that
> only prepares for another, it might be nice to split up some overly
> large md_reorg passes) so that all these verifications and GC are skipped?

I suppose splitting to split the dump files?  Or to expose the
fact of "different passes" to the pass manager?

One "easy" way to do it would be to have a "regalloc" pass
and in its execute manually execute two sub-passes "ira" and "reload".
Manually, by doing parts of passes.c:execute_one_pass ():

  pass_init_dump_file (&ira);
  timevar_push (ira.tv_id);
  ira.execute ();
  pass_fini_dump_file (&ira);
... same for reload ...

but then the exercise would only be for creating two different dump
files (three actually, one empty for the containing "regalloc" pass).

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 11:58             ` Jakub Jelinek
@ 2013-04-11 12:22               ` Richard Biener
  2013-04-12  7:49                 ` Steven Bosscher
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-04-11 12:22 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Bernd Schmidt, gcc-patches, vmakarov

On Thu, 11 Apr 2013, Jakub Jelinek wrote:

> On Thu, Apr 11, 2013 at 12:26:00PM +0200, Richard Biener wrote:
> > So, the option I didn't mention is to add a way to disable the
> > GC (clearing/setting a property for example).
> 
> Yeah, TODO_ggc_avoid_collect or similar would be easiest, plus
> perhaps some way of expressing the requirement that "this pass must
> immediately <follow,precede> <anotherpass>", for non-immediate
> ordering we can add properties I guess.

One issue is that "GC boundary" is a global property but properties
are per struct function.  I'd rather add a way to have a container
pass encapsulating all TODO/property/gate that simply executes
its sub-passes in a "lean" way.

Or a way to create sub-dumpfiles.

That said - I'm positively sure I will hit the IRA / reload
issue again when adding mandatory IL verification (though
for that they can simply drop the properties).

So, if we ignore that "GC boundary" is global we can add
PROP_gc_safe, provided by default, removed by IRA and
re-added by reload.

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-11 12:22               ` Richard Biener
@ 2013-04-12  7:49                 ` Steven Bosscher
  2013-04-12  8:58                   ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Steven Bosscher @ 2013-04-12  7:49 UTC (permalink / raw)
  To: Richard Biener
  Cc: Jakub Jelinek, Bernd Schmidt, gcc-patches, vmakarov,
	William J. Schmidt, David Edelsohn

On Thu, Apr 11, 2013 at 12:47 PM, Richard Biener wrote:
> That said - I'm positively sure I will hit the IRA / reload
> issue again when adding mandatory IL verification (though
> for that they can simply drop the properties).
>
> So, if we ignore that "GC boundary" is global we can add
> PROP_gc_safe, provided by default, removed by IRA and
> re-added by reload.

What about the various pieces of GC-unsafe "black box" objects like
edge->aux, basic_block->aux, loop->aux, etc.?

E.g. PR56921 looks like a "struct niter_desc" gets garbage collected
even though a loop still points to it via its aux field (NB I'm just
guessing, not verified).

Ciao!
Steven

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-12  7:49                 ` Steven Bosscher
@ 2013-04-12  8:58                   ` Richard Biener
  2013-04-12  9:37                     ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-04-12  8:58 UTC (permalink / raw)
  To: Steven Bosscher
  Cc: Jakub Jelinek, Bernd Schmidt, gcc-patches, vmakarov,
	William J. Schmidt, David Edelsohn

On Fri, 12 Apr 2013, Steven Bosscher wrote:

> On Thu, Apr 11, 2013 at 12:47 PM, Richard Biener wrote:
> > That said - I'm positively sure I will hit the IRA / reload
> > issue again when adding mandatory IL verification (though
> > for that they can simply drop the properties).
> >
> > So, if we ignore that "GC boundary" is global we can add
> > PROP_gc_safe, provided by default, removed by IRA and
> > re-added by reload.
> 
> What about the various pieces of GC-unsafe "black box" objects like
> edge->aux, basic_block->aux, loop->aux, etc.?
> 
> E.g. PR56921 looks like a "struct niter_desc" gets garbage collected
> even though a loop still points to it via its aux field (NB I'm just
> guessing, not verified).

I don't see how we were "safe" here before this patch.  Yes,
appearantly we didn't collect between those passes - but that
appears to be for no good reason as breaking the GC barrier
would certainly be a good reason for a comment.

Which means that for the resolution of this thread we probably
want to settle on TODO_no_ggc_collect which is quite explicit.

Oh, but please document _what_ is the data that is kept live
cross-pass at the point you add TODO_no_ggc_collect.

Richard.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally
  2013-04-12  8:58                   ` Richard Biener
@ 2013-04-12  9:37                     ` Richard Biener
  0 siblings, 0 replies; 16+ messages in thread
From: Richard Biener @ 2013-04-12  9:37 UTC (permalink / raw)
  To: Steven Bosscher
  Cc: Jakub Jelinek, Bernd Schmidt, gcc-patches, vmakarov,
	William J. Schmidt, David Edelsohn

On Fri, 12 Apr 2013, Richard Biener wrote:

> On Fri, 12 Apr 2013, Steven Bosscher wrote:
> 
> > On Thu, Apr 11, 2013 at 12:47 PM, Richard Biener wrote:
> > > That said - I'm positively sure I will hit the IRA / reload
> > > issue again when adding mandatory IL verification (though
> > > for that they can simply drop the properties).
> > >
> > > So, if we ignore that "GC boundary" is global we can add
> > > PROP_gc_safe, provided by default, removed by IRA and
> > > re-added by reload.
> > 
> > What about the various pieces of GC-unsafe "black box" objects like
> > edge->aux, basic_block->aux, loop->aux, etc.?
> > 
> > E.g. PR56921 looks like a "struct niter_desc" gets garbage collected
> > even though a loop still points to it via its aux field (NB I'm just
> > guessing, not verified).
> 
> I don't see how we were "safe" here before this patch.  Yes,
> appearantly we didn't collect between those passes - but that
> appears to be for no good reason as breaking the GC barrier
> would certainly be a good reason for a comment.
> 
> Which means that for the resolution of this thread we probably
> want to settle on TODO_no_ggc_collect which is quite explicit.
> 
> Oh, but please document _what_ is the data that is kept live
> cross-pass at the point you add TODO_no_ggc_collect.

FYI, the following is what I am currently bootstrapping and
regtesting.  It adds TODO_do_not_ggc_collect and reverts
the IRA/reload merge.

I'm going to commit it after bootstrap/testing on x86_64-unknown-linux-gnu
unless someone objects (soon).

Thanks,
Richard.

2013-04-12  Richard Biener  <rguenther@suse.de>

	* tree-pass.h (TODO_do_not_ggc_collect): New.
	* passes.c (execute_one_ipa_transform_pass): Honor
	TODO_do_not_ggc_collect.
	(execute_one_pass): Likewise.

	Revert
	2013-04-10  Richard Biener  <rguenther@suse.de>

	* passes.c (init_optimization_passes): Remove reload pass.
	* ira.c (do_reload): Merge into ...
	(ira): ... this.
	(rest_of_handle_reload): Remove.
	(pass_reload): Likewise.
	* config/i386/i386.c (ix86_option_override): Refer to ira instead
	of reload for vzeroupper pass placement.

	* g++.dg/pr55604.C: Use -fdump-rtl-ira.

Index: gcc/tree-pass.h
===================================================================
*** gcc/tree-pass.h.orig	2013-04-12 10:06:03.000000000 +0200
--- gcc/tree-pass.h	2013-04-12 10:06:05.278958138 +0200
*************** struct simple_ipa_opt_pass
*** 154,159 ****
--- 154,160 ----
    (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
  
  /* To-do flags.  */
+ #define TODO_do_not_ggc_collect		(1 << 1)
  #define TODO_verify_ssa			(1 << 2)
  #define TODO_verify_flow		(1 << 3)
  #define TODO_verify_stmts		(1 << 4)
*************** extern struct rtl_opt_pass pass_mode_swi
*** 445,450 ****
--- 446,452 ----
  extern struct rtl_opt_pass pass_sms;
  extern struct rtl_opt_pass pass_sched;
  extern struct rtl_opt_pass pass_ira;
+ extern struct rtl_opt_pass pass_reload;
  extern struct rtl_opt_pass pass_clean_state;
  extern struct rtl_opt_pass pass_branch_prob;
  extern struct rtl_opt_pass pass_value_profile_transformations;
Index: gcc/passes.c
===================================================================
*** gcc/passes.c.orig	2013-04-12 10:06:03.000000000 +0200
--- gcc/passes.c	2013-04-12 10:06:05.279958149 +0200
*************** init_optimization_passes (void)
*** 1620,1625 ****
--- 1620,1626 ----
        NEXT_PASS (pass_sms);
        NEXT_PASS (pass_sched);
        NEXT_PASS (pass_ira);
+       NEXT_PASS (pass_reload);
        NEXT_PASS (pass_postreload);
  	{
  	  struct opt_pass **p = &pass_postreload.pass.sub;
*************** execute_one_ipa_transform_pass (struct c
*** 2186,2192 ****
    current_pass = NULL;
  
    /* Signal this is a suitable GC collection point.  */
!   ggc_collect ();
  }
  
  /* For the current function, execute all ipa transforms. */
--- 2187,2194 ----
    current_pass = NULL;
  
    /* Signal this is a suitable GC collection point.  */
!   if (!(todo_after & TODO_do_not_ggc_collect))
!     ggc_collect ();
  }
  
  /* For the current function, execute all ipa transforms. */
*************** execute_one_pass (struct opt_pass *pass)
*** 2365,2371 ****
    current_pass = NULL;
  
    /* Signal this is a suitable GC collection point.  */
!   ggc_collect ();
  
    return true;
  }
--- 2367,2374 ----
    current_pass = NULL;
  
    /* Signal this is a suitable GC collection point.  */
!   if (!((todo_after | pass->todo_flags_finish) & TODO_do_not_ggc_collect))
!     ggc_collect ();
  
    return true;
  }
Index: gcc/ira.c
===================================================================
*** gcc/ira.c.orig	2013-04-12 10:06:03.000000000 +0200
--- gcc/ira.c	2013-04-12 10:06:27.824203322 +0200
*************** ira (FILE *f)
*** 4359,4366 ****
    int rebuild_p;
    bool saved_flag_caller_saves = flag_caller_saves;
    enum ira_region saved_flag_ira_region = flag_ira_region;
-   basic_block bb;
-   bool need_dce;
  
    ira_conflicts_p = optimize > 0;
  
--- 4359,4364 ----
*************** ira (FILE *f)
*** 4590,4595 ****
--- 4588,4600 ----
        flag_caller_saves = saved_flag_caller_saves;
        flag_ira_region = saved_flag_ira_region;
      }
+ }
+ 
+ static void
+ do_reload (void)
+ {
+   basic_block bb;
+   bool need_dce;
  
    if (flag_ira_verbose < 10)
      ira_dump_file = dump_file;
*************** ira (FILE *f)
*** 4629,4634 ****
--- 4634,4641 ----
  
    timevar_pop (TV_RELOAD);
  
+   timevar_push (TV_IRA);
+ 
    if (ira_conflicts_p && ! ira_use_lra_p)
      {
        ira_free (ira_spilled_reg_stack_slots);
*************** ira (FILE *f)
*** 4686,4691 ****
--- 4693,4700 ----
  
    if (need_dce && optimize)
      run_fast_dce ();
+ 
+   timevar_pop (TV_IRA);
  }
  \f
  /* Run the integrated register allocator.  */
*************** struct rtl_opt_pass pass_ira =
*** 4712,4717 ****
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   0                                     /* todo_flags_finish */
   }
  };
--- 4721,4753 ----
    0,                                    /* properties_provided */
    0,                                    /* properties_destroyed */
    0,                                    /* todo_flags_start */
!   TODO_do_not_ggc_collect               /* todo_flags_finish */
!  }
! };
! 
! static unsigned int
! rest_of_handle_reload (void)
! {
!   do_reload ();
!   return 0;
! }
! 
! struct rtl_opt_pass pass_reload =
! {
!  {
!   RTL_PASS,
!   "reload",                             /* name */
!   OPTGROUP_NONE,                        /* optinfo_flags */
!   NULL,                                 /* gate */
!   rest_of_handle_reload,	        /* execute */
!   NULL,                                 /* sub */
!   NULL,                                 /* next */
!   0,                                    /* static_pass_number */
!   TV_RELOAD,	                        /* tv_id */
!   0,                                    /* properties_required */
!   0,                                    /* properties_provided */
!   0,                                    /* properties_destroyed */
!   0,                                    /* todo_flags_start */
!   0					/* todo_flags_finish */
   }
  };
Index: gcc/testsuite/g++.dg/pr55604.C
===================================================================
*** gcc/testsuite/g++.dg/pr55604.C.orig	2013-04-12 10:06:03.000000000 +0200
--- gcc/testsuite/g++.dg/pr55604.C	2013-04-12 10:06:05.281958171 +0200
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O -fdump-rtl-ira" } */
  
  main ()
  {
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O -fdump-rtl-reload" } */
  
  main ()
  {
*************** main ()
*** 8,11 ****
    __builtin_printf ("%d %s\n", t, s);
  }
  
! /* { dg-final { cleanup-rtl-dump "ira" } } */
--- 8,11 ----
    __builtin_printf ("%d %s\n", t, s);
  }
  
! /* { dg-final { cleanup-rtl-dump "reload" } } */
Index: gcc/config/i386/i386.c
===================================================================
*** gcc/config/i386/i386.c.orig	2013-04-10 13:36:55.000000000 +0200
--- gcc/config/i386/i386.c	2013-04-12 10:11:53.780748099 +0200
*************** static void
*** 3930,3936 ****
  ix86_option_override (void)
  {
    static struct register_pass_info insert_vzeroupper_info
!     = { &pass_insert_vzeroupper.pass, "ira",
  	1, PASS_POS_INSERT_AFTER
        };
  
--- 3930,3936 ----
  ix86_option_override (void)
  {
    static struct register_pass_info insert_vzeroupper_info
!     = { &pass_insert_vzeroupper.pass, "reload",
  	1, PASS_POS_INSERT_AFTER
        };
  

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-04-12  8:14 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-19 12:34 [PATCH][RFC] Remove TODO_ggc_collect, collect unconditionally Richard Biener
2013-03-19 14:20 ` Richard Biener
2013-03-19 15:37   ` Richard Biener
2013-03-21  9:07     ` Richard Biener
2013-04-10 15:57       ` Richard Biener
2013-04-11 10:45     ` Bernd Schmidt
2013-04-11 10:47       ` Richard Biener
2013-04-11 11:13         ` Bernd Schmidt
2013-04-11 11:21           ` Richard Biener
2013-04-11 11:44             ` Bernd Schmidt
2013-04-11 12:10               ` Richard Biener
2013-04-11 11:58             ` Jakub Jelinek
2013-04-11 12:22               ` Richard Biener
2013-04-12  7:49                 ` Steven Bosscher
2013-04-12  8:58                   ` Richard Biener
2013-04-12  9:37                     ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).