predicates and Requires

Well, Requires is just a fancy way to add predicates.

For mips16 and micro mips, we want to use them in a similar way as ARM does, I think, to how they
are used for thumb and thumb2.

The problem lies with tablegen.

Whenever predicates are overriden by a derived class, it overwrites the previous definition.

There is no way, it seems, to add to an existing list as you further derive classes.

So for example, for mips we would want to have several predicates for the output format
of instructions, i.e. (standard, mips16, micromips)

But if we have such predicates in a base class, then if some later class wants to add additional ones,
then they have to list the ones from the base class again.

This seems to be very error prone.

Is there some basic convention that the ARM port uses to keep all of this straight?



Nothing formalized. In practice, we put a simple sub target feature predicate on the high level bases classes for the normal Thumb vs ARM vs Thumb2 stuff. For anything that's more complicated, like requiring a specific version of the ISA, they use a Requres<> on the actual instruction definition so it's at least obvious where the override is happening. Other than that, the main convention is lots of testing.