On Fri, Oct 23, 2015 at 08:57:17AM -0400, Nathan Sidwell wrote: > >If you want to force end of a BB after the IFN_UNIQUE call, then you can just > >gimple_call_set_ctrl_altering (gcall, true); > >on it, and probably tweak gimple_call_initialize_ctrl_altering > >so that it does that by default. Plus of course split the blocks after it > >when you emit it. > > IIUC this won't require RETURNS_TWICE, correct? We're generate these seqs
It doesn't require that, sure. > to a gimple sequence that eventually gets attached to the graph at the end > of lower omp_for with: > > gimple_bind_set_body (new_stmt, body); > gimple_omp_set_body (stmt, NULL); > gimple_omp_for_set_pre_body (stmt, NULL); > > Presumably that sequence will have to be split in the manner you describe > somewhere else. Not sure where that might be? If this is during the omplower pass, then it is before cfg pass and therefore all you need is tweak the gimple_call_initialize_ctrl_altering function and the cfg pass will DTRT. > Any thoughts on the approach of adding a flag to struct function, and having > tracer to skip such functions? It could still be expensive if functions with that flag set contain very large basic blocks. Jakub