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