Honza, Consider this program: ... int main(void) { #pragma omp parallel { extern void foo(void); foo (); } return 0; } ... When compiling this program with -fopenmp, the ompexp pass splits off a new function called main._omp_fn.0 containing the call to foo. The new function is then dumped into the gimple dump by analyze_function. There are two problems with this: - the new function is in low gimple, and is dumped next to high gimple functions - since it's already low, the new function is not lowered, and 'goes missing' in the dumps following the gimple dump, until it reappears again after the last lowering dump. [ http://gcc.gnu.org/ml/gcc/2014-03/msg00312.html ] This patch fixes the problems by ensuring that analyze_function only dumps the new function to the gimple dump after gimplification (specifically, by moving the dump_function call into gimplify_function_tree. That makes the call to dump_function in finalize_size_functions superfluous). That also requires us to add a call to dump_function in finalize_task_copyfn, where we split off a new high gimple function. And in expand_omp_taskreg and expand_omp_target, where we split off a new low gimple function, we now dump the new function into the current (ompexp) dump file, which is the last lowering dump. Finally, we dump an information statement at the start of cgraph_add_new_function to give a better idea when and what kind of function is created. Bootstrapped and reg-tested on x86_64. OK for trunk ? Thanks, - Tom