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