On Mon, Jun 8, 2020 at 1:04 PM Martin Liška <mli...@suse.cz> wrote: > > Hello. > > Thank you for the approval. There's the patch that defines 4 new > DEF_INTERNAL_OPTAB_FN. > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > It also builds on ppc64le-linux-gnu. > > Ready to be installed?
The ChangeLog refers to DEF_INTERNAL_OPTAB_CAN_FAIL which is no longer there. Can you put the isel pass to a separate file please? So this is a first step towards sanitizing VEC_COND_EXPR. There were followups mentioned, namely a) enforcing that VEC_COND_EXPR constraint everywhere, b) isel vector comparisons at the same time since expansion has a vec_cond fallback There's + /* ??? 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; which of course is bad. It's the comparison that can throw and I guess current RTL expansion manages to cope by find_many_sub_bbs and friends. But we need to get this correct on GIMPLE here. Note I find it odd this only triggers during ISEL - it should trigger during the lowering step which splits the comparison from the VEC_COND_EXPR. An appropriate fix at lowering time would be to insert the VEC_COND_EXPR w/o the condition on the normal outgoing edge and keep the comparison in place of the original VEC_COND_EXPR, moving EH info from the VEC_COND_EXPR to the comparison. I think we need to fix that before merging. Thanks, Richard. > Thanks, > Martin