Commit 54634841 by Richard Guenther Committed by Richard Biener

re PR middle-end/39625 (Revision 145338 breaks ability to build Ada)

2009-04-16  Richard Guenther  <rguenther@suse.de>

	PR middle-end/39625
	* tree-cfg.c (make_blocks): Split statements with to-be
	abnormal SSA names on the lhs.

From-SVN: r146168
parent 540b5d9c
2009-04-16 Richard Guenther <rguenther@suse.de>
PR middle-end/39625
* tree-cfg.c (make_blocks): Split statements with to-be
abnormal SSA names on the lhs.
2009-04-16 Paolo Bonzini <bonzini@gnu.org>
* c-common.c (vector_targets_convertible_p, vector_types_convertible_p):
......
......@@ -375,7 +375,29 @@ make_blocks (gimple_seq seq)
/* If STMT is a basic block terminator, set START_NEW_BLOCK for the
next iteration. */
if (stmt_ends_bb_p (stmt))
start_new_block = true;
{
/* If the stmt can make abnormal goto use a new temporary
for the assignment to the LHS. This makes sure the old value
of the LHS is available on the abnormal edge. Otherwise
we will end up with overlapping life-ranges for abnormal
SSA names. */
if (gimple_has_lhs (stmt)
&& stmt_can_make_abnormal_goto (stmt)
&& is_gimple_reg_type (TREE_TYPE (gimple_get_lhs (stmt))))
{
tree lhs = gimple_get_lhs (stmt);
tree tmp = create_tmp_var (TREE_TYPE (lhs), NULL);
gimple s = gimple_build_assign (lhs, tmp);
gimple_set_location (s, gimple_location (stmt));
gimple_set_block (s, gimple_block (stmt));
gimple_set_lhs (stmt, tmp);
if (TREE_CODE (TREE_TYPE (tmp)) == COMPLEX_TYPE
|| TREE_CODE (TREE_TYPE (tmp)) == VECTOR_TYPE)
DECL_GIMPLE_REG_P (tmp) = 1;
gsi_insert_after (&i, s, GSI_SAME_STMT);
}
start_new_block = true;
}
gsi_next (&i);
first_stmt_of_seq = false;
......
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