Thank you for the hint. I managed to extract the basic blocks to a helper function and put a call to this helper function at the place of the removed basic blocks in the original function. All this is done with help of move_sese_region_to_fn. The helper function is created similar to create_omp_child_function. I had a successful compilation run when I moved the pass just after pass_build_cgraph_edges.
The problems I am still facing is with passing of parameters. I imagine that variables used in the helper function which are defined in the original function should become in-out parameters to the helper function. For that I wanted to use DECL_ARGUMENTS and the arguments to gimple_build_call or gimple_build_call_vec. However, how do I find the undefined variables in the helper function and how do I find out to which variables in the original function they belong. In particular, how do I get the names and order in the argument list right? Do you know of some equally useful examples? To me it seems that what is done in omp-low.c (expand_omp_taskreg or expand_omp_target) is not exactly what I need. Thank you again and best regards, Benedikt