Let's also support the easy/easier case: constant trip counts :)
And while I was at it, a minor optimisation: I don't think we need to run Cleanup when there are no NewPredicates; it wasn't doing anything other than iterating over empty sets, but thought not calling it all was more obvious; I had to move the initialisation of ClonedVCTPInExitBlock for that.
Combine with ComputeRuntimeElements? I'm finding really hard to follow what's producing what and why some things are pointers and others of pointer pointers...