Since z13, the max group size will be 2 if any μop has more than 3 register sources.
This has been ignored sofar in the SystemZHazardRecognizer, but is now handled by recognizing those instructions and adjusting the tracking of decoding and the cost heuristic for grouping.
- If the current decoder group has 2 uops, and the candidate has 4RegOps, then a cost of 1 is returned from groupingCost().
- Some of the relevant instructions (non-vector) group alone. The handling of these should be as before.
- The absolute grouping cost is not adjusted in groupingCost() between 2 or 3 depending on CurrGroupHas4RegOps, since it should not matter.
- If the current group has an instruction with 4 reg operands, the max group size becomes 2, except in the case of a single group-alone instruction which per default has 3 uops to represent a full decoder group. This also means that a cracked instruction that has 4 reg ops (if there is such) would group alone.
- One very minor SystemZ test update.
You probably want to do assert((something) && "") instead of assert((something) || "") here.