Commit dac1fbf8 by Richard Guenther Committed by Richard Biener

tree-pass.h (pass_rtl_eh): Remove.

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

	* tree-pass.h (pass_rtl_eh): Remove.
	* except.c (gate_handle_eh): Likewise.
	(rest_of_handle_eh): Likewise.
	(pass_rtl_eh): Likewise.
	(finish_eh_generation): Export.
	* except.h (finish_eh_generation): Declare.
	* passes.c (init_optimization_passes): Remove pass_rtl_eh.
	* cfgexpand.c (gimple_expand_cfg): Call finish_eh_generation
	after expanding stack alignment.  Instead of compacting blocks
	call cleanup_cfg.

From-SVN: r185564
parent 7ebf9677
2012-03-20 Richard Guenther <rguenther@suse.de> 2012-03-20 Richard Guenther <rguenther@suse.de>
* tree-pass.h (pass_rtl_eh): Remove.
* except.c (gate_handle_eh): Likewise.
(rest_of_handle_eh): Likewise.
(pass_rtl_eh): Likewise.
(finish_eh_generation): Export.
* except.h (finish_eh_generation): Declare.
* passes.c (init_optimization_passes): Remove pass_rtl_eh.
* cfgexpand.c (gimple_expand_cfg): Call finish_eh_generation
after expanding stack alignment. Instead of compacting blocks
call cleanup_cfg.
2012-03-20 Richard Guenther <rguenther@suse.de>
* stor-layout.c (finish_bitfield_representative): Fallback * stor-layout.c (finish_bitfield_representative): Fallback
to conservative maximum size if the padding up to the next to conservative maximum size if the padding up to the next
field cannot be computed as a constant. field cannot be computed as a constant.
......
...@@ -4623,10 +4623,22 @@ gimple_expand_cfg (void) ...@@ -4623,10 +4623,22 @@ gimple_expand_cfg (void)
sbitmap_free (blocks); sbitmap_free (blocks);
purge_all_dead_edges (); purge_all_dead_edges ();
compact_blocks ();
expand_stack_alignment (); expand_stack_alignment ();
/* 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. */
if (cfun->eh->region_tree != NULL)
finish_eh_generation ();
/* Remove unreachable blocks, otherwise we cannot compute dominators
which are needed for loop state verification. As a side-effect
this also compacts blocks.
??? We cannot remove trivially dead insns here as for example
the DRAP reg on i?86 is not magically live at this point.
gcc.c-torture/execute/ipa-sra-2.c execution, -Os -m32 fails otherwise. */
cleanup_cfg (CLEANUP_NO_INSN_DEL);
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
verify_flow_info (); verify_flow_info ();
#endif #endif
......
...@@ -81,7 +81,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -81,7 +81,7 @@ along with GCC; see the file COPYING3. If not see
gimple to eh_region mapping that had been recorded in the gimple to eh_region mapping that had been recorded in the
THROW_STMT_TABLE. THROW_STMT_TABLE.
During pass_rtl_eh (except.c), we generate the real landing pads Then, via finish_eh_generation, we generate the real landing pads
to which the runtime will actually transfer control. These new to which the runtime will actually transfer control. These new
landing pads perform whatever bookkeeping is needed by the target landing pads perform whatever bookkeeping is needed by the target
backend in order to resume execution within the current function. backend in order to resume execution within the current function.
...@@ -1406,7 +1406,7 @@ sjlj_build_landing_pads (void) ...@@ -1406,7 +1406,7 @@ sjlj_build_landing_pads (void)
/* After initial rtl generation, call back to finish generating /* After initial rtl generation, call back to finish generating
exception support code. */ exception support code. */
static void void
finish_eh_generation (void) finish_eh_generation (void)
{ {
basic_block bb; basic_block bb;
...@@ -1453,41 +1453,6 @@ finish_eh_generation (void) ...@@ -1453,41 +1453,6 @@ finish_eh_generation (void)
} }
} }
} }
static bool
gate_handle_eh (void)
{
/* Nothing to do if no regions created. */
return cfun->eh->region_tree != NULL;
}
/* Complete generation of exception handling code. */
static unsigned int
rest_of_handle_eh (void)
{
finish_eh_generation ();
cleanup_cfg (CLEANUP_NO_INSN_DEL);
return 0;
}
struct rtl_opt_pass pass_rtl_eh =
{
{
RTL_PASS,
"rtl_eh", /* name */
gate_handle_eh, /* gate */
rest_of_handle_eh, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
TV_JUMP, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
0 /* todo_flags_finish */
}
};
/* This section handles removing dead code for flow. */ /* This section handles removing dead code for flow. */
......
...@@ -291,6 +291,8 @@ extern void assign_filter_values (void); ...@@ -291,6 +291,8 @@ extern void assign_filter_values (void);
extern eh_region get_eh_region_from_rtx (const_rtx); extern eh_region get_eh_region_from_rtx (const_rtx);
extern eh_landing_pad get_eh_landing_pad_from_rtx (const_rtx); extern eh_landing_pad get_eh_landing_pad_from_rtx (const_rtx);
extern void finish_eh_generation (void);
struct GTY(()) throw_stmt_node { struct GTY(()) throw_stmt_node {
gimple stmt; gimple stmt;
int lp_nr; int lp_nr;
......
...@@ -1431,7 +1431,6 @@ init_optimization_passes (void) ...@@ -1431,7 +1431,6 @@ init_optimization_passes (void)
struct opt_pass **p = &pass_rest_of_compilation.pass.sub; struct opt_pass **p = &pass_rest_of_compilation.pass.sub;
NEXT_PASS (pass_init_function); NEXT_PASS (pass_init_function);
NEXT_PASS (pass_jump); NEXT_PASS (pass_jump);
NEXT_PASS (pass_rtl_eh);
NEXT_PASS (pass_initial_value_sets); NEXT_PASS (pass_initial_value_sets);
NEXT_PASS (pass_unshare_all_rtl); NEXT_PASS (pass_unshare_all_rtl);
NEXT_PASS (pass_instantiate_virtual_regs); NEXT_PASS (pass_instantiate_virtual_regs);
......
...@@ -487,7 +487,6 @@ extern struct gimple_opt_pass pass_fixup_cfg; ...@@ -487,7 +487,6 @@ extern struct gimple_opt_pass pass_fixup_cfg;
extern struct rtl_opt_pass pass_expand; extern struct rtl_opt_pass pass_expand;
extern struct rtl_opt_pass pass_init_function; extern struct rtl_opt_pass pass_init_function;
extern struct rtl_opt_pass pass_jump; extern struct rtl_opt_pass pass_jump;
extern struct rtl_opt_pass pass_rtl_eh;
extern struct rtl_opt_pass pass_initial_value_sets; extern struct rtl_opt_pass pass_initial_value_sets;
extern struct rtl_opt_pass pass_unshare_all_rtl; extern struct rtl_opt_pass pass_unshare_all_rtl;
extern struct rtl_opt_pass pass_instantiate_virtual_regs; extern struct rtl_opt_pass pass_instantiate_virtual_regs;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment