https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66716
--- Comment #1 from vries at gcc dot gnu.org --- before try_transform_to_exit_first_loop_alt: ... <bb 9>: .omp_data_i_45 = &.omp_data_arr.11; # DEBUG .omp_data_i => .omp_data_i_45 __ganglocal_ptr.10_47 = __builtin_GOACC_get_ganglocal_ptr (); # DEBUG ii => 0 # DEBUG ii => 0 _50 = .omp_data_i_45->c; c.6_51 = *_50; _55 = .omp_data_i_45->a; a.7_56 = *_55; _61 = .omp_data_i_45->b; b.8_62 = *_61; <bb 10>: # ivtmp_19 = PHI <ivtmp_7(11), 0(9)> ii_36 = ivtmp_19; # DEBUG ii => ii_36 _52 = (long unsigned int) ii_36; _53 = _52 * 4; _54 = c.6_51 + _53; _59 = a.7_56 + _53; _60 = *_59; _65 = b.8_62 + _53; _66 = *_65; _67 = _60 + _66; *_54 = _67; ii_69 = ii_36 + 1; # DEBUG ii => ii_69 # DEBUG ii => ii_69 if (ivtmp_19 < 524287) goto <bb 11>; else goto <bb 12>; <bb 11>: ivtmp_7 = ivtmp_19 + 1; goto <bb 10>; ... after try_transform_to_exit_first_loop_alt: ... <bb 9>: .omp_data_i_45 = &.omp_data_arr.11; # DEBUG .omp_data_i => .omp_data_i_45 __ganglocal_ptr.10_47 = __builtin_GOACC_get_ganglocal_ptr (); # DEBUG ii => 0 # DEBUG ii => 0 _50 = .omp_data_i_45->c; c.6_51 = *_50; _55 = .omp_data_i_45->a; a.7_56 = *_55; _61 = .omp_data_i_45->b; b.8_62 = *_61; goto <bb 19>; <bb 10>: # ivtmp_19 = PHI <ivtmp_35(19)> ii_36 = ivtmp_19; # DEBUG ii => ii_36 _52 = (long unsigned int) ii_36; _53 = _52 * 4; _54 = c.6_51 + _53; _59 = a.7_56 + _53; _60 = *_59; _65 = b.8_62 + _53; _66 = *_65; _67 = _60 + _66; *_54 = _67; ii_69 = ii_36 + 1; goto <bb 11>; <bb 19>: # ivtmp_35 = PHI <ivtmp_7(11), 0(9)> # DEBUG ii => ii_69 # DEBUG ii => ii_69 if (ivtmp_35 < 524288) goto <bb 10>; else goto <bb 12>; <bb 11>: ivtmp_7 = ivtmp_19 + 1; goto <bb 19>; ... And also after try_transform_to_exit_first_loop_alt: ... (gdb) call verify_ssa (1,1) src/libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/kernels-loop.c: In function ‘main’: src/libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/kernels-loop.c:41:1: error: definition in block 10 does not dominate use in block 19 for SSA_NAME: ii_69 in statement: # DEBUG ii => ii_69 src/libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/kernels-loop.c:41:1: internal compiler error: verify_ssa failed ... So, we seem to be including some debug_insns when splitting the cond from the loop body. That seems to be due to using split_block_before_cond_jump: ... static basic_block gimple_split_block_before_cond_jump (basic_block bb) { gimple last, split_point; gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb); if (gsi_end_p (gsi)) return NULL; last = gsi_stmt (gsi); if (gimple_code (last) != GIMPLE_COND && gimple_code (last) != GIMPLE_SWITCH) return NULL; gsi_prev_nondebug (&gsi); split_point = gsi_stmt (gsi); return split_block (bb, split_point)->dest; } ... This patch might fix the problem: ... diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 99b27c7..a8aec26 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -5837,7 +5837,7 @@ gimple_split_block_before_cond_jump (basic_block bb) if (gimple_code (last) != GIMPLE_COND && gimple_code (last) != GIMPLE_SWITCH) return NULL; - gsi_prev_nondebug (&gsi); + gsi_prev (&gsi); split_point = gsi_stmt (gsi); return split_block (bb, split_point)->dest; } ... It seems that parloops try_transform_to_exit_first_loop_alt is the first user of split_block_before_cond_jump.