This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/45470] [4.6 Regression] ICE: verify_flow_info failed: BB 2 can not throw but has an EH edge with -ftree-vectorize -fnon-call-exceptions
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Sep 2010 10:19:40 -0000
- Subject: [Bug tree-optimization/45470] [4.6 Regression] ICE: verify_flow_info failed: BB 2 can not throw but has an EH edge with -ftree-vectorize -fnon-call-exceptions
- References: <bug-45470-14164@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from rguenth at gcc dot gnu dot org 2010-09-01 10:19 -------
I see before SLP:
<bb 2>:
MEM[(struct A *)this_1(D)].a = 0;
MEM[(struct A *)this_1(D)].b = 0;
MEM[(struct A *)this_1(D)].c = 0;
[LP 2] MEM[(struct A *)this_1(D) + 12B].a = 0;
and after:
<bb 2>:
vect_cst_.1_16 = { 0, 0, 0, 0 };
vect_p.5_17 = &MEM[(struct A *)this_1(D)].a;
M*vect_p.5_17{misalignment: 0} = vect_cst_.1_16;
so EH info has not been properly transfered. Now that only
MEM[(struct A *)this_1(D) + 12B].a can throw internally but not
MEM[(struct A *)this_1(D)].c = 0; is a fact that the frontend establishes.
The following mitigates the problem by simply removing the dead EH edges.
Index: gcc/tree-vect-slp.c
===================================================================
--- gcc/tree-vect-slp.c (revision 163721)
+++ gcc/tree-vect-slp.c (working copy)
@@ -2474,6 +2474,9 @@ vect_schedule_slp (loop_vec_info loop_vi
}
}
+ if (bb_vinfo)
+ gimple_purge_dead_eh_edges (BB_VINFO_BB (bb_vinfo));
+
return is_store;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45470