xref: /llvm-project/llvm/utils/TableGen/Basic/SDNodeProperties.cpp (revision ddda37a6c72f0d2fb315d53043ed5e7a39eddfe0)
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