xref: /src/contrib/llvm-project/llvm/utils/TableGen/Basic/SDNodeProperties.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1c7dac04cSDimitry Andric //===- SDNodeProperties.cpp -----------------------------------------------===//
2c7dac04cSDimitry Andric //
3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c7dac04cSDimitry Andric //
7c7dac04cSDimitry Andric //===----------------------------------------------------------------------===//
8c7dac04cSDimitry Andric 
9c7dac04cSDimitry Andric #include "SDNodeProperties.h"
106f8fc217SDimitry Andric #include "llvm/ADT/StringSwitch.h"
11c7dac04cSDimitry Andric #include "llvm/TableGen/Error.h"
12c7dac04cSDimitry Andric #include "llvm/TableGen/Record.h"
13c7dac04cSDimitry Andric 
14c7dac04cSDimitry Andric using namespace llvm;
15c7dac04cSDimitry Andric 
parseSDPatternOperatorProperties(Record * R)16c7dac04cSDimitry Andric unsigned llvm::parseSDPatternOperatorProperties(Record *R) {
17c7dac04cSDimitry Andric   unsigned Properties = 0;
18c7dac04cSDimitry Andric   for (Record *Property : R->getValueAsListOfDefs("Properties")) {
196f8fc217SDimitry Andric     auto Offset = StringSwitch<unsigned>(Property->getName())
206f8fc217SDimitry Andric                       .Case("SDNPCommutative", SDNPCommutative)
216f8fc217SDimitry Andric                       .Case("SDNPAssociative", SDNPAssociative)
226f8fc217SDimitry Andric                       .Case("SDNPHasChain", SDNPHasChain)
236f8fc217SDimitry Andric                       .Case("SDNPOutGlue", SDNPOutGlue)
246f8fc217SDimitry Andric                       .Case("SDNPInGlue", SDNPInGlue)
256f8fc217SDimitry Andric                       .Case("SDNPOptInGlue", SDNPOptInGlue)
266f8fc217SDimitry Andric                       .Case("SDNPMayStore", SDNPMayStore)
276f8fc217SDimitry Andric                       .Case("SDNPMayLoad", SDNPMayLoad)
286f8fc217SDimitry Andric                       .Case("SDNPSideEffect", SDNPSideEffect)
296f8fc217SDimitry Andric                       .Case("SDNPMemOperand", SDNPMemOperand)
306f8fc217SDimitry Andric                       .Case("SDNPVariadic", SDNPVariadic)
316f8fc217SDimitry Andric                       .Default(-1u);
326f8fc217SDimitry Andric     if (Offset != -1u)
336f8fc217SDimitry Andric       Properties |= 1 << Offset;
346f8fc217SDimitry Andric     else
35e6d15924SDimitry Andric       PrintFatalError(R->getLoc(), "Unknown SD Node property '" +
36c7dac04cSDimitry Andric                                        Property->getName() + "' on node '" +
37c7dac04cSDimitry Andric                                        R->getName() + "'!");
38c7dac04cSDimitry Andric   }
39c7dac04cSDimitry Andric   return Properties;
40c7dac04cSDimitry Andric }
41