This patch turns VPInterleaveRecipe into a VPValue and uses it
during VPlan construction and codegeneration instead of the plain IR
reference where possible.
VPInterleaveRecipe produces multiple result values (one for each group
member). This patch introduces a very simple VPMultiUse class.
VPInterleaveRecipe is a VPValue itself, to track all uses of any result
value. For each member, it also has an individual VPMultiUse which is
used for each member result.
This is mostly a straight-forward initial approach to model operations
with multiple results and I am sure this can be much improved.
Should this be surrounded by some sort of "if it's a load IG" check?
Equally, do we need to be adding the operands for a store IG group?