This patch adds a TableGen backend which aims to help keep enums and
their values in sync between TableGen and C++. Previously enums would be
defined separately, usually with a comment to the effect of "must be
kept in sync with XXX".
Enumerators can be individually defined with or without values. Enums
can be given underling types and be optionally declared as enum classes.
Support is also present for automatically converting enums to/from
string values, using custom string values if desired.
The backend operates on two new basic classes: Enum and EnumMember,
which are fairly self-explanatory.
Although almost every (if not all) backends could likely stand to
benefit from this enum support to some extent, only a handful of RISC-V
enums have been converted to use this new support, both as a proof of
concept and to avoid bloating the patch.
This set unset but you're using empty string instead of '?'