I think it's just the way that it's written, as it was suggested to me offline that this annotation is describing a list of blocks: header -> end. If this is true then it makes far more sense! Saying 'loop up to' has certain connotations for me.
I do have other questions about the properties of loops too though:
- Does the header have exactly one predecessor outside of the loop?
- Is loop_end guaranteed to contain a backedge to the header?
- Are other blocks allowed to have an edge back to the header?