Since each entry point requires a separate paragraph label, you can't confine the loop to a single paragraph. Hence you can't rearrange it into a Standard Canonical Loop.
For example, consider these two GO TOs, which enter the same loop at two different places:
PERFORM 3900-GET-FIRST-RECORD.
GO TO 3110-PROCESS-RECORD. -------------------+
... |
GO TO 3100-GET-NEXT-RECORD. -----------+ |
... | |
* | |
3100-GET-NEXT-RECORD. <---------------+ <--+ |
* do some stuff (no GO TOs) | |
GO TO 3110-PROCESS-RECORD. --+ | |
* | | |
3110-PROCESS-RECORD. <----------+ <--|-----------+
* do some other stuff (no GO TOs) |
IF NOT END-OF-FILE |
GO TO 3100-GET-NEXT-RECORD ----+
ELSE
GO TO 3999-EXIT.---------------+
* |
3999-EXIT. <-------------------------+
EXIT.
This code is almost a Standard Canonical Loop -- except for that
first GO TO, which jumps into the middle.
There are two ways to tame such a beast:
If the original code were more complicated, however, it may be impossible to find a simple way to merge the entry points. Replication may be more tedious, and may lead to duplication of code, but it always works.
Conclusion: Merge when you can, and replicate when you must.