From a1a68ae0617610c816e590879ce121af058ba60c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 28 Sep 2005 18:28:29 +0000 Subject: [PATCH] collect commutativity information git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23499 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelEmitter.cpp | 16 ++++++++++++++++ utils/TableGen/DAGISelEmitter.h | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 9f5e387b169..dde7f6770df 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -137,6 +137,22 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) { NumResults = TypeProfile->getValueAsInt("NumResults"); NumOperands = TypeProfile->getValueAsInt("NumOperands"); + // Parse the properties. + Properties = 0; + ListInit *LI = R->getValueAsListInit("Properties"); + for (unsigned i = 0, e = LI->getSize(); i != e; ++i) { + DefInit *DI = dynamic_cast(LI->getElement(i)); + assert(DI && "Properties list must be list of defs!"); + if (DI->getDef()->getName() == "SDNPCommutative") { + Properties |= 1 << SDNPCommutative; + } else { + std::cerr << "Unknown SD Node property '" << DI->getDef()->getName() + << "' on node '" << R->getName() << "'!\n"; + exit(1); + } + } + + // Parse the type constraints. ListInit *Constraints = TypeProfile->getValueAsListInit("Constraints"); for (unsigned i = 0, e = Constraints->getSize(); i != e; ++i) { diff --git a/utils/TableGen/DAGISelEmitter.h b/utils/TableGen/DAGISelEmitter.h index 8ec729926b9..48f941d8593 100644 --- a/utils/TableGen/DAGISelEmitter.h +++ b/utils/TableGen/DAGISelEmitter.h @@ -69,6 +69,7 @@ namespace llvm { Record *Def; std::string EnumName; std::string SDClassName; + unsigned Properties; unsigned NumResults; int NumOperands; std::vector TypeConstraints; @@ -84,6 +85,13 @@ namespace llvm { const std::vector &getTypeConstraints() const { return TypeConstraints; } + + // SelectionDAG node properties. + enum SDNP { SDNPCommutative }; + + /// hasProperty - Return true if this node has the specified property. + /// + bool hasProperty(enum SDNP Prop) const { return Properties & (1 << Prop); } /// ApplyTypeConstraints - Given a node in a pattern, apply the type /// constraints for this node to the operands of the node. This returns