| //===- SDNodeProperties.cpp -----------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #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(R->getLoc(), "Unknown SD Node property '" + |
| Property->getName() + "' on node '" + |
| R->getName() + "'!"); |
| } |
| } |
| |
| return Properties; |
| } |