This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]