------- Comment #8 from rguenth at gcc dot gnu dot org 2010-09-10 13:26 ------- (In reply to comment #6) > (In reply to comment #5) > > 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. > > How should it be done? Is it ok to assume that if one of the old stmts can > throw, then we can set TREE_THIS_NOTRAP for the new access to 0? (and then we > can call maybe_duplicate_eh_stmt (new_stmt, old_stmt)). > > Or maybe it's better to avoid vectorization?...
I think it's best to avoid vectorization if one of the old stmts can throw. Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45470