1303327d5SMatt Arsenault //===- SDNodeProperties.cpp -----------------------------------------------===//
2303327d5SMatt Arsenault //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6303327d5SMatt Arsenault //
7303327d5SMatt Arsenault //===----------------------------------------------------------------------===//
8303327d5SMatt Arsenault 
9303327d5SMatt Arsenault #include "SDNodeProperties.h"
10*efd72ee2SShao-Ce SUN #include "llvm/ADT/StringSwitch.h"
11303327d5SMatt Arsenault #include "llvm/TableGen/Error.h"
12303327d5SMatt Arsenault #include "llvm/TableGen/Record.h"
13303327d5SMatt Arsenault 
14303327d5SMatt Arsenault using namespace llvm;
15303327d5SMatt Arsenault 
parseSDPatternOperatorProperties(Record * R)16303327d5SMatt Arsenault unsigned llvm::parseSDPatternOperatorProperties(Record *R) {
17303327d5SMatt Arsenault   unsigned Properties = 0;
18303327d5SMatt Arsenault   for (Record *Property : R->getValueAsListOfDefs("Properties")) {
19*efd72ee2SShao-Ce SUN     auto Offset = StringSwitch<unsigned>(Property->getName())
20*efd72ee2SShao-Ce SUN                       .Case("SDNPCommutative", SDNPCommutative)
21*efd72ee2SShao-Ce SUN                       .Case("SDNPAssociative", SDNPAssociative)
22*efd72ee2SShao-Ce SUN                       .Case("SDNPHasChain", SDNPHasChain)
23*efd72ee2SShao-Ce SUN                       .Case("SDNPOutGlue", SDNPOutGlue)
24*efd72ee2SShao-Ce SUN                       .Case("SDNPInGlue", SDNPInGlue)
25*efd72ee2SShao-Ce SUN                       .Case("SDNPOptInGlue", SDNPOptInGlue)
26*efd72ee2SShao-Ce SUN                       .Case("SDNPMayStore", SDNPMayStore)
27*efd72ee2SShao-Ce SUN                       .Case("SDNPMayLoad", SDNPMayLoad)
28*efd72ee2SShao-Ce SUN                       .Case("SDNPSideEffect", SDNPSideEffect)
29*efd72ee2SShao-Ce SUN                       .Case("SDNPMemOperand", SDNPMemOperand)
30*efd72ee2SShao-Ce SUN                       .Case("SDNPVariadic", SDNPVariadic)
31*efd72ee2SShao-Ce SUN                       .Default(-1u);
32*efd72ee2SShao-Ce SUN     if (Offset != -1u)
33*efd72ee2SShao-Ce SUN       Properties |= 1 << Offset;
34*efd72ee2SShao-Ce SUN     else
35dff673bbSDaniel Sanders       PrintFatalError(R->getLoc(), "Unknown SD Node property '" +
36303327d5SMatt Arsenault                                        Property->getName() + "' on node '" +
37303327d5SMatt Arsenault                                        R->getName() + "'!");
38303327d5SMatt Arsenault   }
39303327d5SMatt Arsenault   return Properties;
40303327d5SMatt Arsenault }
41