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
This commit is contained in:
parent
62902f3fea
commit
3865a06fb9
@ -1,3 +1,11 @@
|
||||
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
|
||||
|
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
17
gcc/testsuite/g++.dg/opt/pr47639.c
Normal file
17
gcc/testsuite/g++.dg/opt/pr47639.c
Normal file
@ -0,0 +1,17 @@
|
||||
// { 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 =
|
||||
|
Loading…
Reference in New Issue
Block a user