public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Merge more of the expand phase into expand
@ 2012-03-20 11:58 Richard Guenther
  2012-03-20 16:28 ` Jan Hubicka
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Guenther @ 2012-03-20 11:58 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jan Hubicka


This is the followup I promised to do on the expand and rtl_eh pass
merge.  The following patch merges up to unshare_all_rtl, after which
we should be able to pass all RTL testing(?)

Bootstrapped and tested on x86_64-unknown-linux-gnu.

Honza, does this look like what you had in mind?

Thanks,
Richard.

2012-03-20  Richard Guenther  <rguenther@suse.de>

	* Makefile.in (cfgexpand.o): Add $(REGS_H) and $(INTEGRATE_H)
	dependencies.
	* cfgexpand.c (gimple_expand_cfg): Fold in pass_init_function,
	pass_jump, pass_initial_value_sets and pass_unshare_all_rtl.
	* passes.c (init_optimization_passes): Remove pass_init_function,
	pass_jump, pass_initial_value_sets and pass_unshare_all_rtl.
	* tree-pass.h (pass_init_function): Remove.
	(pass_jump): Remove.
	(pass_initial_value_sets): Remove.
	(pass_unshare_all_rtl): Remove.
	* integrate.c (pass_initial_value_sets): Remove.
	* emit-rtl.c (pass_unshare_all_rtl): Remove.
	* tree.h (init_function_for_compilation): Remove.
	* function.c (init_function_for_compilation): Remove.
	(pass_init_function): Remove.
	* cfgcleanup.c (rest_of_handle_jump): Remove.
	(pass_jump): Remove.


Index: gcc/Makefile.in
===================================================================
*** gcc/Makefile.in	(revision 185563)
--- gcc/Makefile.in	(working copy)
*************** cfgexpand.o : cfgexpand.c $(TREE_FLOW_H)
*** 3147,3154 ****
     $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(FUNCTION_H) $(TIMEVAR_H) $(TM_H) \
     coretypes.h $(TREE_DUMP_H) $(EXCEPT_H) langhooks.h $(TREE_PASS_H) $(RTL_H) \
     $(DIAGNOSTIC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(FLAGS_H) debug.h $(PARAMS_H) \
!    value-prof.h $(TREE_INLINE_H) $(TARGET_H) $(SSAEXPAND_H) \
!    tree-pretty-print.h gimple-pretty-print.h $(BITMAP_H) sbitmap.h $(INSN_ATTR_H)
  cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_ERROR_H) \
     $(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \
     output.h  $(FUNCTION_H) $(EXCEPT_H) $(TM_P_H) $(INSN_ATTR_H) \
--- 3147,3155 ----
     $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(FUNCTION_H) $(TIMEVAR_H) $(TM_H) \
     coretypes.h $(TREE_DUMP_H) $(EXCEPT_H) langhooks.h $(TREE_PASS_H) $(RTL_H) \
     $(DIAGNOSTIC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(BASIC_BLOCK_H) $(FLAGS_H) debug.h $(PARAMS_H) \
!    value-prof.h $(TREE_INLINE_H) $(TARGET_H) $(SSAEXPAND_H) $(REGS_H) \
!    tree-pretty-print.h gimple-pretty-print.h $(BITMAP_H) sbitmap.h \
!    $(INSN_ATTR_H) $(INTEGRATE_H)
  cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_ERROR_H) \
     $(FLAGS_H) insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h \
     output.h  $(FUNCTION_H) $(EXCEPT_H) $(TM_P_H) $(INSN_ATTR_H) \
Index: gcc/cfgexpand.c
===================================================================
*** gcc/cfgexpand.c	(revision 185564)
--- gcc/cfgexpand.c	(working copy)
*************** along with GCC; see the file COPYING3.
*** 47,52 ****
--- 47,54 ----
  #include "ssaexpand.h"
  #include "bitmap.h"
  #include "sbitmap.h"
+ #include "regs.h" /* For reg_renumber.  */
+ #include "integrate.h" /* For emit_initial_value_sets.  */
  #include "insn-attr.h" /* For INSN_SCHEDULING.  */
  
  /* This variable holds information helping the rewriting of SSA trees
*************** gimple_expand_cfg (void)
*** 4373,4378 ****
--- 4375,4384 ----
    SA.partition_to_pseudo = (rtx *)xcalloc (SA.map->num_partitions,
  					   sizeof (rtx));
  
+   /* Make sure all values used by the optimization passes have sane
+      defaults.  */
+   reg_renumber = 0;
+ 
    /* Some backends want to know that we are expanding to RTL.  */
    currently_expanding_to_rtl = 1;
    /* Dominators are not kept up-to-date as we may create new basic-blocks.  */
*************** gimple_expand_cfg (void)
*** 4625,4630 ****
--- 4631,4641 ----
  
    expand_stack_alignment ();
  
+   /* Fixup REG_EQUIV notes in the prologue if there are tailcalls in this
+      function.  */
+   if (crtl->tail_call_emit)
+     fixup_tail_calls ();
+ 
    /* After initial rtl generation, call back to finish generating
       exception support code.  We need to do this before cleaning up
       the CFG as the code does not expect dead landing pads.  */
*************** gimple_expand_cfg (void)
*** 4643,4648 ****
--- 4654,4665 ----
    verify_flow_info ();
  #endif
  
+   /* Initialize pseudos allocated for hard registers.  */
+   emit_initial_value_sets ();
+ 
+   /* And finally unshare all RTL.  */
+   unshare_all_rtl ();
+ 
    /* There's no need to defer outputting this function any more; we
       know we want to output it.  */
    DECL_DEFER_OUTPUT (current_function_decl) = 0;
*************** gimple_expand_cfg (void)
*** 4692,4698 ****
--- 4709,4717 ----
       the common parent easily.  */
    set_block_levels (DECL_INITIAL (cfun->decl), 0);
    default_rtl_profile ();
+ 
    timevar_pop (TV_POST_EXPAND);
+ 
    return 0;
  }
  
Index: gcc/passes.c
===================================================================
*** gcc/passes.c	(revision 185564)
--- gcc/passes.c	(working copy)
*************** init_optimization_passes (void)
*** 1429,1438 ****
    NEXT_PASS (pass_rest_of_compilation);
      {
        struct opt_pass **p = &pass_rest_of_compilation.pass.sub;
-       NEXT_PASS (pass_init_function);
-       NEXT_PASS (pass_jump);
-       NEXT_PASS (pass_initial_value_sets);
-       NEXT_PASS (pass_unshare_all_rtl);
        NEXT_PASS (pass_instantiate_virtual_regs);
        NEXT_PASS (pass_into_cfg_layout_mode);
        NEXT_PASS (pass_jump2);
--- 1429,1434 ----
Index: gcc/tree-pass.h
===================================================================
*** gcc/tree-pass.h	(revision 185564)
--- gcc/tree-pass.h	(working copy)
*************** extern struct gimple_opt_pass pass_init_
*** 485,494 ****
  extern struct gimple_opt_pass pass_fixup_cfg;
  
  extern struct rtl_opt_pass pass_expand;
- extern struct rtl_opt_pass pass_init_function;
- extern struct rtl_opt_pass pass_jump;
- extern struct rtl_opt_pass pass_initial_value_sets;
- extern struct rtl_opt_pass pass_unshare_all_rtl;
  extern struct rtl_opt_pass pass_instantiate_virtual_regs;
  extern struct rtl_opt_pass pass_rtl_fwprop;
  extern struct rtl_opt_pass pass_rtl_fwprop_addr;
--- 485,490 ----
Index: gcc/integrate.c
===================================================================
*** gcc/integrate.c	(revision 185563)
--- gcc/integrate.c	(working copy)
*************** emit_initial_value_sets (void)
*** 310,334 ****
    return 0;
  }
  
- struct rtl_opt_pass pass_initial_value_sets =
- {
-  {
-   RTL_PASS,
-   "initvals",                           /* name */
-   NULL,                                 /* gate */
-   emit_initial_value_sets,              /* execute */
-   NULL,                                 /* sub */
-   NULL,                                 /* next */
-   0,                                    /* static_pass_number */
-   TV_NONE,                              /* tv_id */
-   0,                                    /* properties_required */
-   0,                                    /* properties_provided */
-   0,                                    /* properties_destroyed */
-   0,                                    /* todo_flags_start */
-   0                                     /* todo_flags_finish */
-  }
- };
- 
  /* If the backend knows where to allocate pseudos for hard
     register initial values, register these allocations now.  */
  void
--- 310,315 ----
Index: gcc/emit-rtl.c
===================================================================
*** gcc/emit-rtl.c	(revision 185563)
--- gcc/emit-rtl.c	(working copy)
*************** unshare_all_rtl (void)
*** 2475,2499 ****
    return 0;
  }
  
- struct rtl_opt_pass pass_unshare_all_rtl =
- {
-  {
-   RTL_PASS,
-   "unshare",                            /* name */
-   NULL,                                 /* gate */
-   unshare_all_rtl,                      /* execute */
-   NULL,                                 /* sub */
-   NULL,                                 /* next */
-   0,                                    /* static_pass_number */
-   TV_NONE,                              /* tv_id */
-   0,                                    /* properties_required */
-   0,                                    /* properties_provided */
-   0,                                    /* properties_destroyed */
-   0,                                    /* todo_flags_start */
-   TODO_verify_rtl_sharing               /* todo_flags_finish */
-  }
- };
- 
  
  /* Check that ORIG is not marked when it should not be and mark ORIG as in use,
     Recursively does the same for subexpressions.  */
--- 2475,2480 ----
Index: gcc/function.c
===================================================================
*** gcc/function.c	(revision 185563)
--- gcc/function.c	(working copy)
*************** init_function_start (tree subr)
*** 4558,4590 ****
      warning (OPT_Waggregate_return, "function returns an aggregate");
  }
  
- /* Make sure all values used by the optimization passes have sane defaults.  */
- unsigned int
- init_function_for_compilation (void)
- {
-   reg_renumber = 0;
-   return 0;
- }
- 
- struct rtl_opt_pass pass_init_function =
- {
-  {
-   RTL_PASS,
-   "*init_function",                     /* name */
-   NULL,                                 /* gate */
-   init_function_for_compilation,        /* execute */
-   NULL,                                 /* sub */
-   NULL,                                 /* next */
-   0,                                    /* static_pass_number */
-   TV_NONE,                              /* tv_id */
-   0,                                    /* properties_required */
-   0,                                    /* properties_provided */
-   0,                                    /* properties_destroyed */
-   0,                                    /* todo_flags_start */
-   0                                     /* todo_flags_finish */
-  }
- };
- 
  
  void
  expand_main_function (void)
--- 4558,4563 ----
Index: gcc/cfgcleanup.c
===================================================================
*** gcc/cfgcleanup.c	(revision 185563)
--- gcc/cfgcleanup.c	(working copy)
*************** cleanup_cfg (int mode)
*** 2982,3015 ****
  }
  \f
  static unsigned int
- rest_of_handle_jump (void)
- {
-   if (crtl->tail_call_emit)
-     fixup_tail_calls ();
-   return 0;
- }
- 
- struct rtl_opt_pass pass_jump =
- {
-  {
-   RTL_PASS,
-   "sibling",                            /* name */
-   NULL,                                 /* gate */
-   rest_of_handle_jump,			/* execute */
-   NULL,                                 /* sub */
-   NULL,                                 /* next */
-   0,                                    /* static_pass_number */
-   TV_JUMP,                              /* tv_id */
-   0,                                    /* properties_required */
-   0,                                    /* properties_provided */
-   0,                                    /* properties_destroyed */
-   TODO_ggc_collect,                     /* todo_flags_start */
-   TODO_verify_flow,                     /* todo_flags_finish */
-  }
- };
- 
- 
- static unsigned int
  rest_of_handle_jump2 (void)
  {
    delete_trivially_dead_insns (get_insns (), max_reg_num ());
--- 2982,2987 ----

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

* Re: [PATCH] Merge more of the expand phase into expand
  2012-03-20 11:58 [PATCH] Merge more of the expand phase into expand Richard Guenther
@ 2012-03-20 16:28 ` Jan Hubicka
  0 siblings, 0 replies; 2+ messages in thread
From: Jan Hubicka @ 2012-03-20 16:28 UTC (permalink / raw)
  To: Richard Guenther; +Cc: gcc-patches, Jan Hubicka

> 
> This is the followup I promised to do on the expand and rtl_eh pass
> merge.  The following patch merges up to unshare_all_rtl, after which
> we should be able to pass all RTL testing(?)
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu.
> 
> Honza, does this look like what you had in mind?

Yes, this looks just fine ;)
> Index: gcc/passes.c
> ===================================================================
> *** gcc/passes.c	(revision 185564)
> --- gcc/passes.c	(working copy)
> *************** init_optimization_passes (void)
> *** 1429,1438 ****
>     NEXT_PASS (pass_rest_of_compilation);
>       {
>         struct opt_pass **p = &pass_rest_of_compilation.pass.sub;
> -       NEXT_PASS (pass_init_function);
> -       NEXT_PASS (pass_jump);
> -       NEXT_PASS (pass_initial_value_sets);
> -       NEXT_PASS (pass_unshare_all_rtl);
>         NEXT_PASS (pass_instantiate_virtual_regs);
>         NEXT_PASS (pass_into_cfg_layout_mode);
These two are sane and resonable passes (though we eventually may go into 
cfg layout directly, but that will still require a lot of massaging of ages
old code)
>         NEXT_PASS (pass_jump2);
This pass is good next candidate for removal.  I have it in my TODO now ;)

Thanks!
Honza

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

end of thread, other threads:[~2012-03-20 16:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-20 11:58 [PATCH] Merge more of the expand phase into expand Richard Guenther
2012-03-20 16:28 ` Jan Hubicka

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).