diff --git a/llvm/utils/TableGen/SDNodeProperties.cpp b/llvm/utils/TableGen/SDNodeProperties.cpp --- a/llvm/utils/TableGen/SDNodeProperties.cpp +++ b/llvm/utils/TableGen/SDNodeProperties.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "SDNodeProperties.h" +#include "llvm/ADT/StringSwitch.h" #include "llvm/TableGen/Error.h" #include "llvm/TableGen/Record.h" @@ -15,34 +16,25 @@ unsigned llvm::parseSDPatternOperatorProperties(Record *R) { unsigned Properties = 0; for (Record *Property : R->getValueAsListOfDefs("Properties")) { - if (Property->getName() == "SDNPCommutative") { - Properties |= 1 << SDNPCommutative; - } else if (Property->getName() == "SDNPAssociative") { - Properties |= 1 << SDNPAssociative; - } else if (Property->getName() == "SDNPHasChain") { - Properties |= 1 << SDNPHasChain; - } else if (Property->getName() == "SDNPOutGlue") { - Properties |= 1 << SDNPOutGlue; - } else if (Property->getName() == "SDNPInGlue") { - Properties |= 1 << SDNPInGlue; - } else if (Property->getName() == "SDNPOptInGlue") { - Properties |= 1 << SDNPOptInGlue; - } else if (Property->getName() == "SDNPMayStore") { - Properties |= 1 << SDNPMayStore; - } else if (Property->getName() == "SDNPMayLoad") { - Properties |= 1 << SDNPMayLoad; - } else if (Property->getName() == "SDNPSideEffect") { - Properties |= 1 << SDNPSideEffect; - } else if (Property->getName() == "SDNPMemOperand") { - Properties |= 1 << SDNPMemOperand; - } else if (Property->getName() == "SDNPVariadic") { - Properties |= 1 << SDNPVariadic; - } else { + auto Offset = StringSwitch(Property->getName()) + .Case("SDNPCommutative", SDNPCommutative) + .Case("SDNPAssociative", SDNPAssociative) + .Case("SDNPHasChain", SDNPHasChain) + .Case("SDNPOutGlue", SDNPOutGlue) + .Case("SDNPInGlue", SDNPInGlue) + .Case("SDNPOptInGlue", SDNPOptInGlue) + .Case("SDNPMayStore", SDNPMayStore) + .Case("SDNPMayLoad", SDNPMayLoad) + .Case("SDNPSideEffect", SDNPSideEffect) + .Case("SDNPMemOperand", SDNPMemOperand) + .Case("SDNPVariadic", SDNPVariadic) + .Default(-1u); + if (Offset != -1u) + Properties |= 1 << Offset; + else PrintFatalError(R->getLoc(), "Unknown SD Node property '" + Property->getName() + "' on node '" + R->getName() + "'!"); - } } - return Properties; }