This patch is the first of a sequence of three patches described by the LLVM-dev RFC "MC support for variant scheduling classes".
The goal of this patch is to introduce a new class of scheduling predicates for SchedReadVariant and SchedWriteVariant.
An MCSchedPredicate can be used instead of a normal SchedPredicate to model checks on the instruction (either a MachineInstr or a MCInst).
Internally, an MCSchedPredicate encapsulates an MCInstPredicate definition. MCInstPredicate allows the definition of expressions with a well-known semantic, that can be used to generate code for both MachineInstr and MCInst.
This is the first step toward teaching to tools like lllvm-mca how to resolve variant scheduling classes.