summaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/SDNodeProperties.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen/SDNodeProperties.cpp')
-rw-r--r--llvm/utils/TableGen/SDNodeProperties.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/SDNodeProperties.cpp b/llvm/utils/TableGen/SDNodeProperties.cpp
new file mode 100644
index 000000000000..1843a78aa3cf
--- /dev/null
+++ b/llvm/utils/TableGen/SDNodeProperties.cpp
@@ -0,0 +1,48 @@
+//===- 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;
+}