Clarify meaning of merge block

What is the meaning of the OpSelectionMerge merge block? It’s not a post-dominator of the subsequent conditional branch.

int func(int x, int y) {
  int sum = 0;
  for(int i = 0; i < x; ++i) {
    sum += i * i;
    if((i % y) == 4)
      continue;
  }
  sum /= 2;
  return sum;
}

The merge block for the OpConditionalBranch corresponding to the if-statement is the next statement after the if-statement (which is empty and just hits the closing brace). But the body of the if-statement branches to the continue block of the containing loop. It doesn’t pass through the merge block.

Does making the merge block a post-dominator of the conditional branch improve performance by allowing partial reconvergence? glslc also emits multiple return instructions, which obviously prevents the merge block from being entered after a conditional branch.

Is it safe just to threat the merge block as “the next statement after this control flow structure,” even when the body of the control flow statement branches beyond the merge block?