add support for an associative marker
authorChris Lattner <sabre@nondot.org>
Wed, 28 Sep 2005 20:58:06 +0000 (20:58 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 28 Sep 2005 20:58:06 +0000 (20:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23502 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/DAGISelEmitter.cpp
utils/TableGen/DAGISelEmitter.h

index bac99ebbc2ae3ced7a0c902d2ad572782b68adf9..b7aa55843ea790e4660c76338a4da6e9d0cb9a4c 100644 (file)
@@ -145,6 +145,8 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
     assert(DI && "Properties list must be list of defs!");
     if (DI->getDef()->getName() == "SDNPCommutative") {
       Properties |= 1 << SDNPCommutative;
+    } else if (DI->getDef()->getName() == "SDNPAssociative") {
+      Properties |= 1 << SDNPAssociative;
     } else {
       std::cerr << "Unknown SD Node property '" << DI->getDef()->getName()
                 << "' on node '" << R->getName() << "'!\n";
@@ -377,7 +379,7 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP) {
 /// used as a santity check for .td files (to prevent people from writing stuff
 /// that can never possibly work), and to prevent the pattern permuter from
 /// generating stuff that is useless.
-bool TreePatternNode::canPatternMatch(std::string &Reason, DAGISelEmitter &ISE) {
+bool TreePatternNode::canPatternMatch(std::string &Reason, DAGISelEmitter &ISE){
   if (isLeaf()) return true;
 
   for (unsigned i = 0, e = getNumChildren(); i != e; ++i)
@@ -1052,9 +1054,9 @@ void DAGISelEmitter::ParsePatterns() {
 // GenerateVariants - Generate variants.  For example, commutative patterns can
 // match multiple ways.  Add them to PatternsToMatch as well.
 void DAGISelEmitter::GenerateVariants() {
-  
 }
 
+
 /// getPatternSize - Return the 'size' of this pattern.  We want to match large
 /// patterns before small ones.  This is used to determine the size of a
 /// pattern.
index d169acfecc1e49b157e0c70a14f0a6ffa5a95946..f452901dca694fee89d09dc252fbe53d47c952f6 100644 (file)
@@ -87,7 +87,7 @@ namespace llvm {
     }
     
     // SelectionDAG node properties.
-    enum SDNP { SDNPCommutative };
+    enum SDNP { SDNPCommutative, SDNPAssociative };
 
     /// hasProperty - Return true if this node has the specified property.
     ///
@@ -205,8 +205,8 @@ namespace llvm {
       return false;
     }
     
-    /// canPatternMatch - Return false if it is impossible for this pattern to
-    /// match on this target.
+    /// canPatternMatch - If it is impossible for this pattern to match on this
+    /// target, fill in Reason and return false.  Otherwise, return true.
     bool canPatternMatch(std::string &Reason, DAGISelEmitter &ISE);
   };