[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
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Sep 1 10:19:00 GMT 2010
------- 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
More information about the Gcc-bugs
mailing list