1fa3d789dSPierre van Houtryve //===- SDNodeProperties.cpp -----------------------------------------------===// 2fa3d789dSPierre van Houtryve // 3fa3d789dSPierre van Houtryve // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4fa3d789dSPierre van Houtryve // See https://llvm.org/LICENSE.txt for license information. 5fa3d789dSPierre van Houtryve // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fa3d789dSPierre van Houtryve // 7fa3d789dSPierre van Houtryve //===----------------------------------------------------------------------===// 8fa3d789dSPierre van Houtryve 9fa3d789dSPierre van Houtryve #include "SDNodeProperties.h" 10fa3d789dSPierre van Houtryve #include "llvm/ADT/StringSwitch.h" 11fa3d789dSPierre van Houtryve #include "llvm/TableGen/Error.h" 12fa3d789dSPierre van Houtryve #include "llvm/TableGen/Record.h" 13fa3d789dSPierre van Houtryve 14fa3d789dSPierre van Houtryve using namespace llvm; 15fa3d789dSPierre van Houtryve 16*ddda37a6SRahul Joshi unsigned llvm::parseSDPatternOperatorProperties(const Record *R) { 17fa3d789dSPierre van Houtryve unsigned Properties = 0; 18*ddda37a6SRahul Joshi for (const Record *Property : R->getValueAsListOfDefs("Properties")) { 19fa3d789dSPierre van Houtryve auto Offset = StringSwitch<unsigned>(Property->getName()) 20fa3d789dSPierre van Houtryve .Case("SDNPCommutative", SDNPCommutative) 21fa3d789dSPierre van Houtryve .Case("SDNPAssociative", SDNPAssociative) 22fa3d789dSPierre van Houtryve .Case("SDNPHasChain", SDNPHasChain) 23fa3d789dSPierre van Houtryve .Case("SDNPOutGlue", SDNPOutGlue) 24fa3d789dSPierre van Houtryve .Case("SDNPInGlue", SDNPInGlue) 25fa3d789dSPierre van Houtryve .Case("SDNPOptInGlue", SDNPOptInGlue) 26fa3d789dSPierre van Houtryve .Case("SDNPMayStore", SDNPMayStore) 27fa3d789dSPierre van Houtryve .Case("SDNPMayLoad", SDNPMayLoad) 28fa3d789dSPierre van Houtryve .Case("SDNPSideEffect", SDNPSideEffect) 29fa3d789dSPierre van Houtryve .Case("SDNPMemOperand", SDNPMemOperand) 30fa3d789dSPierre van Houtryve .Case("SDNPVariadic", SDNPVariadic) 31fa3d789dSPierre van Houtryve .Default(-1u); 32fa3d789dSPierre van Houtryve if (Offset != -1u) 33fa3d789dSPierre van Houtryve Properties |= 1 << Offset; 34fa3d789dSPierre van Houtryve else 35fa3d789dSPierre van Houtryve PrintFatalError(R->getLoc(), "Unknown SD Node property '" + 36fa3d789dSPierre van Houtryve Property->getName() + "' on node '" + 37fa3d789dSPierre van Houtryve R->getName() + "'!"); 38fa3d789dSPierre van Houtryve } 39fa3d789dSPierre van Houtryve return Properties; 40fa3d789dSPierre van Houtryve } 41