SDNodeProperties.cpp revision 353358
1166255Sdelphij//===- SDNodeProperties.cpp -----------------------------------------------===//
2166255Sdelphij//
3166255Sdelphij// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4166255Sdelphij// See https://llvm.org/LICENSE.txt for license information.
5166255Sdelphij// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6166255Sdelphij//
7166255Sdelphij//===----------------------------------------------------------------------===//
8166255Sdelphij
9166255Sdelphij#include "SDNodeProperties.h"
10166255Sdelphij#include "llvm/TableGen/Error.h"
11166255Sdelphij#include "llvm/TableGen/Record.h"
12166255Sdelphij
13166255Sdelphijusing namespace llvm;
14166255Sdelphij
15166255Sdelphijunsigned llvm::parseSDPatternOperatorProperties(Record *R) {
16166255Sdelphij  unsigned Properties = 0;
17166255Sdelphij  for (Record *Property : R->getValueAsListOfDefs("Properties")) {
18166255Sdelphij    if (Property->getName() == "SDNPCommutative") {
19166255Sdelphij      Properties |= 1 << SDNPCommutative;
20166255Sdelphij    } else if (Property->getName() == "SDNPAssociative") {
21166255Sdelphij      Properties |= 1 << SDNPAssociative;
22166255Sdelphij    } else if (Property->getName() == "SDNPHasChain") {
23166255Sdelphij      Properties |= 1 << SDNPHasChain;
24166255Sdelphij    } else if (Property->getName() == "SDNPOutGlue") {
25166255Sdelphij      Properties |= 1 << SDNPOutGlue;
26166255Sdelphij    } else if (Property->getName() == "SDNPInGlue") {
27166255Sdelphij      Properties |= 1 << SDNPInGlue;
28166255Sdelphij    } else if (Property->getName() == "SDNPOptInGlue") {
29166255Sdelphij      Properties |= 1 << SDNPOptInGlue;
30166255Sdelphij    } else if (Property->getName() == "SDNPMayStore") {
31166255Sdelphij      Properties |= 1 << SDNPMayStore;
32166255Sdelphij    } else if (Property->getName() == "SDNPMayLoad") {
33166255Sdelphij      Properties |= 1 << SDNPMayLoad;
34166255Sdelphij    } else if (Property->getName() == "SDNPSideEffect") {
35166255Sdelphij      Properties |= 1 << SDNPSideEffect;
36166255Sdelphij    } else if (Property->getName() == "SDNPMemOperand") {
37166255Sdelphij      Properties |= 1 << SDNPMemOperand;
38166255Sdelphij    } else if (Property->getName() == "SDNPVariadic") {
39166255Sdelphij      Properties |= 1 << SDNPVariadic;
40166255Sdelphij    } else {
41166255Sdelphij      PrintFatalError(R->getLoc(), "Unknown SD Node property '" +
42166255Sdelphij                                       Property->getName() + "' on node '" +
43166255Sdelphij                                       R->getName() + "'!");
44166255Sdelphij    }
45166255Sdelphij  }
46166255Sdelphij
47166255Sdelphij  return Properties;
48166255Sdelphij}
49166255Sdelphij