Commit 960f0c9d by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/51117 (rev.181172 causes glibc build failure)

	PR tree-optimization/51117
	* tree-eh.c (optimize_clobbers): New function.
	(execute_lower_eh_dispatch): Call it.

Co-Authored-By: Andrew Pinski <apinski@cavium.com>

From-SVN: r182158
parent 48f2e373
2011-12-09 Jakub Jelinek <jakub@redhat.com>
Andrew Pinski <apinski@cavium.com>
PR tree-optimization/51117
* tree-eh.c (optimize_clobbers): New function.
(execute_lower_eh_dispatch): Call it.
2011-12-09 Richard Guenther <rguenther@suse.de> 2011-12-09 Richard Guenther <rguenther@suse.de>
PR tree-optimization/51482 PR tree-optimization/51482
...@@ -3173,6 +3173,30 @@ struct gimple_opt_pass pass_lower_resx = ...@@ -3173,6 +3173,30 @@ struct gimple_opt_pass pass_lower_resx =
} }
}; };
/* Try to optimize var = {v} {CLOBBER} stmts followed just by
external throw. */
static void
optimize_clobbers (basic_block bb)
{
gimple_stmt_iterator gsi = gsi_last_bb (bb);
for (gsi_prev (&gsi); !gsi_end_p (gsi);)
{
gimple stmt = gsi_stmt (gsi);
if (is_gimple_debug (stmt))
{
gsi_prev (&gsi);
continue;
}
if (!gimple_assign_single_p (stmt)
|| TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
|| !TREE_CLOBBER_P (gimple_assign_rhs1 (stmt)))
return;
unlink_stmt_vdef (stmt);
gsi_remove (&gsi, true);
release_defs (stmt);
}
}
/* At the end of inlining, we can lower EH_DISPATCH. Return true when /* At the end of inlining, we can lower EH_DISPATCH. Return true when
we have found some duplicate labels and removed some edges. */ we have found some duplicate labels and removed some edges. */
...@@ -3337,11 +3361,16 @@ execute_lower_eh_dispatch (void) ...@@ -3337,11 +3361,16 @@ execute_lower_eh_dispatch (void)
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
gimple last = last_stmt (bb); gimple last = last_stmt (bb);
if (last && gimple_code (last) == GIMPLE_EH_DISPATCH) if (last == NULL)
continue;
if (gimple_code (last) == GIMPLE_EH_DISPATCH)
{ {
redirected |= lower_eh_dispatch (bb, last); redirected |= lower_eh_dispatch (bb, last);
any_rewritten = true; any_rewritten = true;
} }
else if (gimple_code (last) == GIMPLE_RESX
&& stmt_can_throw_external (last))
optimize_clobbers (bb);
} }
if (redirected) if (redirected)
......
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