[llvm-commits] [llvm] r97416 - in /llvm/trunk: include/llvm/CodeGen/DAGISelHeader.h utils/TableGen/DAGISelMatcher.cpp utils/TableGen/DAGISelMatcher.h utils/TableGen/DAGISelMatcherEmitter.cpp utils/TableGen/DAGISelMatcherOpt.cpp

Chris Lattner sabre at nondot.org
Sun Feb 28 12:55:18 PST 2010


Author: lattner
Date: Sun Feb 28 14:55:18 2010
New Revision: 97416

URL: http://llvm.org/viewvc/llvm-project?rev=97416&view=rev
Log:
use MorphNodeTo instead of SelectNodeTo.  SelectNodeTo
is just a silly wrapper around MorphNodeTo.

Modified:
    llvm/trunk/include/llvm/CodeGen/DAGISelHeader.h
    llvm/trunk/utils/TableGen/DAGISelMatcher.cpp
    llvm/trunk/utils/TableGen/DAGISelMatcher.h
    llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
    llvm/trunk/utils/TableGen/DAGISelMatcherOpt.cpp

Modified: llvm/trunk/include/llvm/CodeGen/DAGISelHeader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DAGISelHeader.h?rev=97416&r1=97415&r2=97416&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/DAGISelHeader.h (original)
+++ llvm/trunk/include/llvm/CodeGen/DAGISelHeader.h Sun Feb 28 14:55:18 2010
@@ -223,7 +223,7 @@
                           const SmallVectorImpl<SDNode*> &ChainNodesMatched,
                           SDValue InputFlag,
                           const SmallVectorImpl<SDNode*>&FlagResultNodesMatched,
-                          bool isSelectNodeTo) {
+                          bool isMorphNodeTo) {
   // Now that all the normal results are replaced, we replace the chain and
   // flag results if present.
   if (!ChainNodesMatched.empty()) {
@@ -235,8 +235,8 @@
       SDNode *ChainNode = ChainNodesMatched[i];
       
       // Don't replace the results of the root node if we're doing a
-      // SelectNodeTo.
-      if (ChainNode == NodeToMatch && isSelectNodeTo)
+      // MorphNodeTo.
+      if (ChainNode == NodeToMatch && isMorphNodeTo)
         continue;
       
       SDValue ChainVal = SDValue(ChainNode, ChainNode->getNumValues()-1);
@@ -297,7 +297,7 @@
   OPC_EmitCopyToReg,
   OPC_EmitNodeXForm,
   OPC_EmitNode,
-  OPC_SelectNodeTo,
+  OPC_MorphNodeTo,
   OPC_MarkFlagResults,
   OPC_CompleteMatch
 };
@@ -788,7 +788,7 @@
     }
         
     case OPC_EmitNode:
-    case OPC_SelectNodeTo: {
+    case OPC_MorphNodeTo: {
       uint16_t TargetOpc = GetInt2(MatcherTable, MatcherIndex);
       unsigned EmitNodeInfo = MatcherTable[MatcherIndex++];
       // Get the result VT list.
@@ -842,13 +842,13 @@
       
       // Create the node.
       SDNode *Res = 0;
-      if (Opcode == OPC_SelectNodeTo) {
-        // It is possible we're using SelectNodeTo to replace a node with no
+      if (Opcode == OPC_MorphNodeTo) {
+        // It is possible we're using MorphNodeTo to replace a node with no
         // normal results with one that has a normal result (or we could be
         // adding a chain) and the input could have flags and chains as well.
         // In this case we need to shifting the operands down.
         // FIXME: This is a horrible hack and broken in obscure cases, no worse
-        // than the old isel though.  We should sink this into SelectNodeTo.
+        // than the old isel though.  We should sink this into MorphNodeTo.
         int OldFlagResultNo = -1, OldChainResultNo = -1;
         
         unsigned NTMNumResults = NodeToMatch->getNumValues();
@@ -860,8 +860,11 @@
         } else if (NodeToMatch->getValueType(NTMNumResults-1) == MVT::Other)
           OldChainResultNo = NTMNumResults-1;
         
-        Res = CurDAG->SelectNodeTo(NodeToMatch, TargetOpc, VTList,
-                                   Ops.data(), Ops.size());
+        Res = CurDAG->MorphNodeTo(NodeToMatch, ~TargetOpc, VTList,
+                                  Ops.data(), Ops.size());
+        // Reset the node ID, to the isel, this should be just like a newly
+        // allocated machine node.
+        Res->setNodeId(-1);
         
         // FIXME: Whether the selected node has a flag result should come from
         // flags on the node.
@@ -915,11 +918,11 @@
       }
       
       DEBUG(errs() << "  "
-                   << (Opcode == OPC_SelectNodeTo ? "Selected" : "Created")
+                   << (Opcode == OPC_MorphNodeTo ? "Morphed" : "Created")
                    << " node: "; Res->dump(CurDAG); errs() << "\n");
       
-      // If this was a SelectNodeTo then we're completely done!
-      if (Opcode == OPC_SelectNodeTo) {
+      // If this was a MorphNodeTo then we're completely done!
+      if (Opcode == OPC_MorphNodeTo) {
         // Update chain and flag uses.
         UpdateChainsAndFlags(NodeToMatch, InputChain, ChainNodesMatched,
                              InputFlag, FlagResultNodesMatched, true);

Modified: llvm/trunk/utils/TableGen/DAGISelMatcher.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcher.cpp?rev=97416&r1=97415&r2=97416&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcher.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcher.cpp Sun Feb 28 14:55:18 2010
@@ -176,7 +176,7 @@
 
 void EmitNodeMatcherCommon::printImpl(raw_ostream &OS, unsigned indent) const {
   OS.indent(indent);
-  OS << (isa<SelectNodeToMatcher>(this) ? "SelectNodeTo: " : "EmitNode: ")
+  OS << (isa<MorphNodeToMatcher>(this) ? "MorphNodeTo: " : "EmitNode: ")
      << OpcodeName << ": <todo flags> ";
 
   for (unsigned i = 0, e = VTs.size(); i != e; ++i)

Modified: llvm/trunk/utils/TableGen/DAGISelMatcher.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcher.h?rev=97416&r1=97415&r2=97416&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcher.h (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcher.h Sun Feb 28 14:55:18 2010
@@ -76,7 +76,7 @@
     EmitNodeXForm,        // Run a SDNodeXForm
     MarkFlagResults,      // Indicate which interior nodes have flag results.
     CompleteMatch,        // Finish a match and update the results.
-    SelectNodeTo          // Build a node, finish a match and update results.
+    MorphNodeTo           // Build a node, finish a match and update results.
   };
   const KindTy Kind;
 
@@ -871,7 +871,7 @@
 };
   
 /// EmitNodeMatcherCommon - Common class shared between EmitNode and
-/// SelectNodeTo.
+/// MorphNodeTo.
 class EmitNodeMatcherCommon : public Matcher {
   std::string OpcodeName;
   const SmallVector<MVT::SimpleValueType, 3> VTs;
@@ -887,8 +887,8 @@
                         const MVT::SimpleValueType *vts, unsigned numvts,
                         const unsigned *operands, unsigned numops,
                         bool hasChain, bool hasFlag, bool hasmemrefs,
-                        int numfixedarityoperands, bool isSelectNodeTo)
-    : Matcher(isSelectNodeTo ? SelectNodeTo : EmitNode), OpcodeName(opcodeName),
+                        int numfixedarityoperands, bool isMorphNodeTo)
+    : Matcher(isMorphNodeTo ? MorphNodeTo : EmitNode), OpcodeName(opcodeName),
       VTs(vts, vts+numvts), Operands(operands, operands+numops),
       HasChain(hasChain), HasFlag(hasFlag), HasMemRefs(hasmemrefs),
       NumFixedArityOperands(numfixedarityoperands) {}
@@ -926,7 +926,7 @@
   int getNumFixedArityOperands() const { return NumFixedArityOperands; }
   
   static inline bool classof(const Matcher *N) {
-    return N->getKind() == EmitNode || N->getKind() == SelectNodeTo;
+    return N->getKind() == EmitNode || N->getKind() == MorphNodeTo;
   }
   
 private:
@@ -956,14 +956,14 @@
   
 };
   
-class SelectNodeToMatcher : public EmitNodeMatcherCommon {
+class MorphNodeToMatcher : public EmitNodeMatcherCommon {
   const PatternToMatch &Pattern;
 public:
-  SelectNodeToMatcher(const std::string &opcodeName,
-                      const MVT::SimpleValueType *vts, unsigned numvts,
-                      const unsigned *operands, unsigned numops,
-                      bool hasChain, bool hasFlag, bool hasmemrefs,
-                      int numfixedarityoperands, const PatternToMatch &pattern)
+  MorphNodeToMatcher(const std::string &opcodeName,
+                     const MVT::SimpleValueType *vts, unsigned numvts,
+                     const unsigned *operands, unsigned numops,
+                     bool hasChain, bool hasFlag, bool hasmemrefs,
+                     int numfixedarityoperands, const PatternToMatch &pattern)
     : EmitNodeMatcherCommon(opcodeName, vts, numvts, operands, numops, hasChain,
                             hasFlag, hasmemrefs, numfixedarityoperands, true),
       Pattern(pattern) {
@@ -972,7 +972,7 @@
   const PatternToMatch &getPattern() const { return Pattern; }
 
   static inline bool classof(const Matcher *N) {
-    return N->getKind() == SelectNodeTo;
+    return N->getKind() == MorphNodeTo;
   }
 };
   

Modified: llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp?rev=97416&r1=97415&r2=97416&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp Sun Feb 28 14:55:18 2010
@@ -390,9 +390,9 @@
   }
       
   case Matcher::EmitNode:
-  case Matcher::SelectNodeTo: {
+  case Matcher::MorphNodeTo: {
     const EmitNodeMatcherCommon *EN = cast<EmitNodeMatcherCommon>(N);
-    OS << (isa<EmitNodeMatcher>(EN) ? "OPC_EmitNode" : "OPC_SelectNodeTo");
+    OS << (isa<EmitNodeMatcher>(EN) ? "OPC_EmitNode" : "OPC_MorphNodeTo");
     OS << ", TARGET_OPCODE(" << EN->getOpcodeName() << "), 0";
     
     if (EN->hasChain())   OS << "|OPFL_Chain";
@@ -425,7 +425,7 @@
     }
     OS << '\n';
     
-    if (const SelectNodeToMatcher *SNT = dyn_cast<SelectNodeToMatcher>(N)) {
+    if (const MorphNodeToMatcher *SNT = dyn_cast<MorphNodeToMatcher>(N)) {
       OS.PadToColumn(Indent*2) << "// Src: "
       << *SNT->getPattern().getSrcPattern() << '\n';
       OS.PadToColumn(Indent*2) << "// Dst: " 
@@ -585,7 +585,7 @@
     case Matcher::EmitMergeInputChains: OS << "OPC_EmitMergeInputChains"; break;
     case Matcher::EmitCopyToReg: OS << "OPC_EmitCopyToReg"; break;
     case Matcher::EmitNode: OS << "OPC_EmitNode"; break;
-    case Matcher::SelectNodeTo: OS << "OPC_SelectNodeTo"; break;
+    case Matcher::MorphNodeTo: OS << "OPC_MorphNodeTo"; break;
     case Matcher::EmitNodeXForm: OS << "OPC_EmitNodeXForm"; break;
     case Matcher::MarkFlagResults: OS << "OPC_MarkFlagResults"; break;
     case Matcher::CompleteMatch: OS << "OPC_CompleteMatch"; break;    

Modified: llvm/trunk/utils/TableGen/DAGISelMatcherOpt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcherOpt.cpp?rev=97416&r1=97415&r2=97416&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcherOpt.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcherOpt.cpp Sun Feb 28 14:55:18 2010
@@ -66,11 +66,11 @@
       return ContractNodes(MatcherPtr, CGP);
     }
   
-  // Turn EmitNode->CompleteMatch into SelectNodeTo if we can.
+  // Turn EmitNode->CompleteMatch into MorphNodeTo if we can.
   if (EmitNodeMatcher *EN = dyn_cast<EmitNodeMatcher>(N))
     if (CompleteMatchMatcher *CM =
           dyn_cast<CompleteMatchMatcher>(EN->getNext())) {
-      // We can only use SelectNodeTo if the result values match up.
+      // We can only use MorphNodeTo if the result values match up.
       unsigned RootResultFirst = EN->getFirstResultSlot();
       bool ResultsMatch = true;
       for (unsigned i = 0, e = CM->getNumResults(); i != e; ++i)
@@ -78,7 +78,7 @@
           ResultsMatch = false;
       
       // If the selected node defines a subset of the flag/chain results, we
-      // can't use SelectNodeTo.  For example, we can't use SelectNodeTo if the
+      // can't use MorphNodeTo.  For example, we can't use MorphNodeTo if the
       // matched pattern has a chain but the root node doesn't.
       const PatternToMatch &Pattern = CM->getPattern();
       
@@ -87,7 +87,7 @@
         ResultsMatch = false;
 
       // If the matched node has a flag and the output root doesn't, we can't
-      // use SelectNodeTo.
+      // use MorphNodeTo.
       //
       // NOTE: Strictly speaking, we don't have to check for the flag here
       // because the code in the pattern generator doesn't handle it right.  We
@@ -109,20 +109,20 @@
       if (ResultsMatch) {
         const SmallVectorImpl<MVT::SimpleValueType> &VTs = EN->getVTList();
         const SmallVectorImpl<unsigned> &Operands = EN->getOperandList();
-        MatcherPtr.reset(new SelectNodeToMatcher(EN->getOpcodeName(),
-                                                 &VTs[0], VTs.size(),
-                                               Operands.data(), Operands.size(),
-                                                 EN->hasChain(), EN->hasFlag(),
-                                                 EN->hasMemRefs(),
-                                                 EN->getNumFixedArityOperands(),
-                                                 Pattern));
+        MatcherPtr.reset(new MorphNodeToMatcher(EN->getOpcodeName(),
+                                                &VTs[0], VTs.size(),
+                                                Operands.data(),Operands.size(),
+                                                EN->hasChain(), EN->hasFlag(),
+                                                EN->hasMemRefs(),
+                                                EN->getNumFixedArityOperands(),
+                                                Pattern));
         return;
       }
 
       // FIXME: Handle OPC_MarkFlagResults.
       
-      // FIXME2: Kill off all the SelectionDAG::SelectNodeTo and getMachineNode
-      // variants.  Call MorphNodeTo instead of SelectNodeTo.
+      // FIXME2: Kill off all the SelectionDAG::MorphNodeTo and getMachineNode
+      // variants.
     }
   
   ContractNodes(N->getNextPtr(), CGP);





More information about the llvm-commits mailing list