This patch adds the necessary constraint classes that are be used
by IRDL to define Operation, Type, and Attribute verifiers.
A constraint is a class inheriting the irdl::Constraint class,
which may call other constraints that are indexed by unsigned.
A constraint represent an invariant over an Attribute.
The ConstraintVerifier class group these constraints together,
and make sure that a constraint can only identify a single
attribute. So, once a constraint is used to check the
satisfiability of an Attribute, the Attribute will be
memorized for this constraint. This ensure that in IRDL, a
single !irdl.attribute value only correspond to a single
Attribute.
Depends on D144693
Do you need the full tri state?