| //===- SDNodeProperties.cpp -----------------------------------------------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "SDNodeProperties.h" | |
| #include "llvm/TableGen/Error.h" | |
| #include "llvm/TableGen/Record.h" | |
| using namespace llvm; | |
| unsigned llvm::parseSDPatternOperatorProperties(Record *R) { | |
| unsigned Properties = 0; | |
| for (Record *Property : R->getValueAsListOfDefs("Properties")) { | |
| if (Property->getName() == "SDNPCommutative") { | |
| Properties |= 1 << SDNPCommutative; | |
| } else if (Property->getName() == "SDNPAssociative") { | |
| Properties |= 1 << SDNPAssociative; | |
| } else if (Property->getName() == "SDNPHasChain") { | |
| Properties |= 1 << SDNPHasChain; | |
| } else if (Property->getName() == "SDNPOutGlue") { | |
| Properties |= 1 << SDNPOutGlue; | |
| } else if (Property->getName() == "SDNPInGlue") { | |
| Properties |= 1 << SDNPInGlue; | |
| } else if (Property->getName() == "SDNPOptInGlue") { | |
| Properties |= 1 << SDNPOptInGlue; | |
| } else if (Property->getName() == "SDNPMayStore") { | |
| Properties |= 1 << SDNPMayStore; | |
| } else if (Property->getName() == "SDNPMayLoad") { | |
| Properties |= 1 << SDNPMayLoad; | |
| } else if (Property->getName() == "SDNPSideEffect") { | |
| Properties |= 1 << SDNPSideEffect; | |
| } else if (Property->getName() == "SDNPMemOperand") { | |
| Properties |= 1 << SDNPMemOperand; | |
| } else if (Property->getName() == "SDNPVariadic") { | |
| Properties |= 1 << SDNPVariadic; | |
| } else { | |
| PrintFatalError("Unknown SD Node property '" + | |
| Property->getName() + "' on node '" + | |
| R->getName() + "'!"); | |
| } | |
| } | |
| return Properties; | |
| } |