//===- 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(Record *R) { unsigned Properties = 0; for (Record *Property : R->getValueAsListOfDefs("Properties")) { 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; }