There should be a pass that randomly selects loop headers which do not have a preheader and uses TransformationAddLoopPreheader to add one.