diff options
Diffstat (limited to 'llvm/utils/TableGen/Basic/SDNodeProperties.cpp')
| -rw-r--r-- | llvm/utils/TableGen/Basic/SDNodeProperties.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/Basic/SDNodeProperties.cpp b/llvm/utils/TableGen/Basic/SDNodeProperties.cpp new file mode 100644 index 000000000000..2aec41aac625 --- /dev/null +++ b/llvm/utils/TableGen/Basic/SDNodeProperties.cpp @@ -0,0 +1,40 @@ +//===- 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/ADT/StringSwitch.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")) { + auto Offset = StringSwitch<unsigned>(Property->getName()) + .Case("SDNPCommutative", SDNPCommutative) + .Case("SDNPAssociative", SDNPAssociative) + .Case("SDNPHasChain", SDNPHasChain) + .Case("SDNPOutGlue", SDNPOutGlue) + .Case("SDNPInGlue", SDNPInGlue) + .Case("SDNPOptInGlue", SDNPOptInGlue) + .Case("SDNPMayStore", SDNPMayStore) + .Case("SDNPMayLoad", SDNPMayLoad) + .Case("SDNPSideEffect", SDNPSideEffect) + .Case("SDNPMemOperand", SDNPMemOperand) + .Case("SDNPVariadic", SDNPVariadic) + .Default(-1u); + if (Offset != -1u) + Properties |= 1 << Offset; + else + PrintFatalError(R->getLoc(), "Unknown SD Node property '" + + Property->getName() + "' on node '" + + R->getName() + "'!"); + } + return Properties; +} |
