| //===- SDNodeProperties.cpp -----------------------------------------------===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "SDNodeProperties.h" | 
 | #include "llvm/ADT/StringSwitch.h" | 
 | #include "llvm/TableGen/Error.h" | 
 | #include "llvm/TableGen/Record.h" | 
 |  | 
 | using namespace llvm; | 
 |  | 
 | unsigned llvm::parseSDPatternOperatorProperties(const Record *R) { | 
 |   unsigned Properties = 0; | 
 |   for (const Record *Property : R->getValueAsListOfDefs("Properties")) { | 
 |     auto Offset = StringSwitch<unsigned>(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; | 
 | } |