- Change Operation::create() methods to use TypeRange for result types, ValueRange for operands and SuccessorRange for successors.
- Extend SuccessorRange to be able to represent a range of blocks from BlockOperands or from an array of Block pointers.
Thanks. I looked into how ResultRange, OperandRange and ValueRange are layered. So I guess your suggestion is to keep SuccessorRange as is, and add a new BlockRange which can work with either a SuccessorRange or an ArrayRef<Block *>, right? And then the Operation::create() functions would use a BlockRange argument for successors.