diff mbox

The nvptx port [4/11+] Post-RA pipeline

Message ID 54451B2B.5070209@codesourcery.com
State New
Headers show

Commit Message

Bernd Schmidt Oct. 20, 2014, 2:24 p.m. UTC
This stops most of the post-regalloc passes to be run if the target 
doesn't want register allocation. I'd previously moved them all out of 
postreload to the toplevel, but Jakub (I think) pointed out that the 
idea is not to run them to avoid crashes if reload fails e.g. for an 
invalid asm. So I've made a new container pass.

A later patch will make thread_prologue_and_epilogue_insns callable from 
the backend.


Bernd

Comments

Jeff Law Oct. 21, 2014, 6:41 p.m. UTC | #1
On 10/20/14 14:24, Bernd Schmidt wrote:
> This stops most of the post-regalloc passes to be run if the target
> doesn't want register allocation. I'd previously moved them all out of
> postreload to the toplevel, but Jakub (I think) pointed out that the
> idea is not to run them to avoid crashes if reload fails e.g. for an
> invalid asm. So I've made a new container pass.
>
> A later patch will make thread_prologue_and_epilogue_insns callable from
> the backend.
>
>
> Bernd
>
>
> 004-postra.diff
>
>
> 	gcc/
> 	* passes.def (pass_compute_alignments, pass_duplicate_computed_gotos,
> 	pass_variable_tracking, pass_free_cfg, pass_machine_reorg,
> 	pass_cleanup_barriers, pass_delay_slots,
> 	pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges,
> 	pass_shorten_branches, pass_est_nothrow_function_flags,
> 	pass_dwarf2_frame, pass_final): Move outside of pass_postreload and
> 	into pass_late_compilation.
> 	(pass_late_compilation): Add.
> 	* passes.c (pass_data_late_compilation, pass_late_compilation,
> 	make_pass_late_compilation): New.
> 	* timevar.def (TV_LATE_COMPILATION): New.
OK.
jeff
diff mbox

Patch

	gcc/
	* passes.def (pass_compute_alignments, pass_duplicate_computed_gotos,
	pass_variable_tracking, pass_free_cfg, pass_machine_reorg,
	pass_cleanup_barriers, pass_delay_slots,
	pass_split_for_shorten_branches, pass_convert_to_eh_region_ranges,
	pass_shorten_branches, pass_est_nothrow_function_flags,
	pass_dwarf2_frame, pass_final): Move outside of pass_postreload and
	into pass_late_compilation.
	(pass_late_compilation): Add.
	* passes.c (pass_data_late_compilation, pass_late_compilation,
	make_pass_late_compilation): New.
	* timevar.def (TV_LATE_COMPILATION): New.

------------------------------------------------------------------------
Index: gcc/passes.def
===================================================================
--- gcc/passes.def.orig
+++ gcc/passes.def
@@ -415,6 +415,9 @@  along with GCC; see the file COPYING3.
 	      NEXT_PASS (pass_split_before_regstack);
 	      NEXT_PASS (pass_stack_regs_run);
 	  POP_INSERT_PASSES ()
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_late_compilation);
+      PUSH_INSERT_PASSES_WITHIN (pass_late_compilation)
 	  NEXT_PASS (pass_compute_alignments);
 	  NEXT_PASS (pass_variable_tracking);
 	  NEXT_PASS (pass_free_cfg);
Index: gcc/passes.c
===================================================================
--- gcc/passes.c.orig
+++ gcc/passes.c
@@ -569,6 +569,44 @@  make_pass_postreload (gcc::context *ctxt
   return new pass_postreload (ctxt);
 }
 
+namespace {
+
+const pass_data pass_data_late_compilation =
+{
+  RTL_PASS, /* type */
+  "*all-late_compilation", /* name */
+  OPTGROUP_NONE, /* optinfo_flags */
+  TV_LATE_COMPILATION, /* tv_id */
+  PROP_rtl, /* properties_required */
+  0, /* properties_provided */
+  0, /* properties_destroyed */
+  0, /* todo_flags_start */
+  0, /* todo_flags_finish */
+};
+
+class pass_late_compilation : public rtl_opt_pass
+{
+public:
+  pass_late_compilation (gcc::context *ctxt)
+    : rtl_opt_pass (pass_data_late_compilation, ctxt)
+  {}
+
+  /* opt_pass methods: */
+  virtual bool gate (function *)
+  {
+    return reload_completed || targetm.no_register_allocation;
+  }
+
+}; // class pass_late_compilation
+
+} // anon namespace
+
+static rtl_opt_pass *
+make_pass_late_compilation (gcc::context *ctxt)
+{
+  return new pass_late_compilation (ctxt);
+}
+
 
 
 /* Set the static pass number of pass PASS to ID and record that
Index: gcc/timevar.def
===================================================================
--- gcc/timevar.def.orig
+++ gcc/timevar.def
@@ -270,6 +270,7 @@  DEFTIMEVAR (TV_EARLY_LOCAL	     , "early
 DEFTIMEVAR (TV_OPTIMIZE		     , "unaccounted optimizations")
 DEFTIMEVAR (TV_REST_OF_COMPILATION   , "rest of compilation")
 DEFTIMEVAR (TV_POSTRELOAD	     , "unaccounted post reload")
+DEFTIMEVAR (TV_LATE_COMPILATION	     , "unaccounted late compilation")
 DEFTIMEVAR (TV_REMOVE_UNUSED	     , "remove unused locals")
 DEFTIMEVAR (TV_ADDRESS_TAKEN	     , "address taken")
 DEFTIMEVAR (TV_TODO		     , "unaccounted todo")