Commit 3865a06f by Richard Guenther Committed by Richard Biener

re PR tree-optimization/47639 (ICE: verify_stmts failed: statement marked for…

re PR tree-optimization/47639 (ICE: verify_stmts failed: statement marked for throw, but doesn't with -fstack-check=generic -fexceptions -fnon-call-exceptions)

2011-02-08  Richard Guenther  <rguenther@suse.de>

	PR middle-end/47639
	* tree-vect-generic.c (expand_vector_operations_1): Update
	stmts here ...
	(expand_vector_operations): ... not here.  Cleanup EH info
	and the CFG if required.

	* g++.dg/opt/pr47639.c: New testcase.

From-SVN: r169926
parent 62902f3f
2011-02-08 Richard Guenther <rguenther@suse.de>
PR middle-end/47639
* tree-vect-generic.c (expand_vector_operations_1): Update
stmts here ...
(expand_vector_operations): ... not here. Cleanup EH info
and the CFG if required.
2011-02-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47641
* tree-ssa.c (execute_update_addresses_taken): For asm outputs
require type compatibility.
......
2011-02-08 Richard Guenther <rguenther@suse.de>
PR middle-end/47639
* g++.dg/opt/pr47639.c: New testcase.
2011-02-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47632
* g++.dg/opt/pr47632.C: New testcase.
......
// { dg-do compile }
// { dg-options "-fnon-call-exceptions" }
typedef int __attribute__ ((vector_size (8))) vec;
vec foo (vec v1, vec v2)
{
try
{
return v1 / v2;
}
catch (...)
{
throw;
}
}
......@@ -606,8 +606,7 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
way to do it is change expand_vector_operation and its callees to
return a tree_code, RHS1 and RHS2 instead of a tree. */
gimple_assign_set_rhs_from_tree (gsi, new_rhs);
gimple_set_modified (gsi_stmt (*gsi), true);
update_stmt (gsi_stmt (*gsi));
}
/* Use this to lower vector operations introduced by the vectorizer,
......@@ -624,16 +623,24 @@ expand_vector_operations (void)
{
gimple_stmt_iterator gsi;
basic_block bb;
bool cfg_changed = false;
FOR_EACH_BB (bb)
{
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
expand_vector_operations_1 (&gsi);
update_stmt_if_modified (gsi_stmt (gsi));
/* ??? If we do not cleanup EH then we will ICE in
verification. But in reality we have created wrong-code
as we did not properly transition EH info and edges to
the piecewise computations. */
if (maybe_clean_eh_stmt (gsi_stmt (gsi))
&& gimple_purge_dead_eh_edges (bb))
cfg_changed = true;
}
}
return 0;
return cfg_changed ? TODO_cleanup_cfg : 0;
}
struct gimple_opt_pass pass_lower_vector =
......
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