[llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp

Evan Cheng evan.cheng at apple.com
Wed Jan 11 14:16:25 PST 2006



Changes in directory llvm/utils/TableGen:

DAGISelEmitter.cpp updated: 1.130 -> 1.131
---
Log message:

Some minor fixes.


---
Diffs of the changes:  (+19 -26)

 DAGISelEmitter.cpp |   45 +++++++++++++++++++--------------------------
 1 files changed, 19 insertions(+), 26 deletions(-)


Index: llvm/utils/TableGen/DAGISelEmitter.cpp
diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.130 llvm/utils/TableGen/DAGISelEmitter.cpp:1.131
--- llvm/utils/TableGen/DAGISelEmitter.cpp:1.130	Wed Jan 11 13:52:27 2006
+++ llvm/utils/TableGen/DAGISelEmitter.cpp	Wed Jan 11 16:16:13 2006
@@ -2128,10 +2128,11 @@
       }
 
       // Emit all the chain and CopyToReg stuff.
+      bool ChainEmitted = HasChain;
       if (HasChain)
         OS << "      Chain = Select(Chain);\n";
       if (HasImpInputs)
-        EmitCopyToRegs(Pattern, "N", HasChain, true);
+        EmitCopyToRegs(Pattern, "N", ChainEmitted, true);
       if (HasInFlag || HasOptInFlag) {
         unsigned FlagNo = (unsigned) HasChain + Pattern->getNumChildren();
         if (HasOptInFlag)
@@ -2199,11 +2200,10 @@
              << ValNo + (unsigned)HasChain << ");\n";
 
         if (HasImpResults) {
-          if (EmitCopyFromRegs(N, HasChain)) {
+          if (EmitCopyFromRegs(N, ChainEmitted)) {
             OS << "      CodeGenMap[N.getValue(" << ValNo << ")] = "
                << "Result.getValue(" << ValNo << ");\n";
             ValNo++;
-            HasChain = true;
           }
         }
 
@@ -2314,14 +2314,14 @@
   /// EmitCopyToRegs - Emit the flag operands for the DAG that is
   /// being built.
   void EmitCopyToRegs(TreePatternNode *N, const std::string &RootName,
-                      bool HasChain, bool isRoot = false) {
+                      bool &ChainEmitted, bool isRoot = false) {
     const CodeGenTarget &T = ISE.getTargetInfo();
     unsigned OpNo =
       (unsigned) NodeHasProperty(N, SDNodeInfo::SDNPHasChain, ISE);
     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i, ++OpNo) {
       TreePatternNode *Child = N->getChild(i);
       if (!Child->isLeaf()) {
-        EmitCopyToRegs(Child, RootName + utostr(OpNo), HasChain);
+        EmitCopyToRegs(Child, RootName + utostr(OpNo), ChainEmitted);
       } else {
         if (DefInit *DI = dynamic_cast<DefInit*>(Child->getLeafValue())) {
           Record *RR = DI->getDef();
@@ -2329,7 +2329,11 @@
             MVT::ValueType RVT = getRegisterValueType(RR, T);
             if (RVT == MVT::Flag) {
               OS << "      InFlag = Select(" << RootName << OpNo << ");\n";
-            } else if (HasChain) {
+            } else {
+              if (!ChainEmitted) {
+                OS << "      SDOperand Chain = CurDAG->getEntryNode();\n";
+                ChainEmitted = true;
+              }
               OS << "      SDOperand " << RootName << "CR" << i << ";\n";
               OS << "      " << RootName << "CR" << i
                  << "  = CurDAG->getCopyToReg(Chain, CurDAG->getRegister("
@@ -2340,12 +2344,6 @@
                  << ".getValue(0);\n";
               OS << "      InFlag = " << RootName << "CR" << i
                  << ".getValue(1);\n";
-            } else {
-              OS << "      InFlag = CurDAG->getCopyToReg(CurDAG->getEntryNode()"
-                 << ", CurDAG->getRegister(" << ISE.getQualifiedName(RR)
-                 << ", MVT::" << getEnumName(RVT) << ")"
-                 << ", Select(" << RootName << OpNo
-                 << "), InFlag).getValue(1);\n";
             }
           }
         }
@@ -2356,7 +2354,7 @@
   /// EmitCopyFromRegs - Emit code to copy result to physical registers
   /// as specified by the instruction. It returns true if any copy is
   /// emitted.
-  bool EmitCopyFromRegs(TreePatternNode *N, bool HasChain) {
+  bool EmitCopyFromRegs(TreePatternNode *N, bool &ChainEmitted) {
     bool RetVal = false;
     Record *Op = N->getOperator();
     if (Op->isSubClassOf("Instruction")) {
@@ -2369,20 +2367,15 @@
         if (RR->isSubClassOf("Register")) {
           MVT::ValueType RVT = getRegisterValueType(RR, CGT);
           if (RVT != MVT::Flag) {
-            if (HasChain) {
-              OS << "      Result = CurDAG->getCopyFromReg(Chain, "
-                 << ISE.getQualifiedName(RR)
-                 << ", MVT::" << getEnumName(RVT) << ", InFlag);\n";
-              OS << "      Chain  = Result.getValue(1);\n";
-              OS << "      InFlag = Result.getValue(2);\n";
-            } else {
-              OS << "      Chain;\n";
-              OS << "      Result = CurDAG->getCopyFromReg("
-                 << "CurDAG->getEntryNode(), ISE.getQualifiedName(RR)"
-                 << ", MVT::" << getEnumName(RVT) << ", InFlag);\n";
-              OS << "      Chain  = Result.getValue(1);\n";
-              OS << "      InFlag = Result.getValue(2);\n";
+            if (!ChainEmitted) {
+              OS << "      SDOperand Chain = CurDAG->getEntryNode();\n";
+              ChainEmitted = true;
             }
+            OS << "      Result = CurDAG->getCopyFromReg(Chain, "
+               << ISE.getQualifiedName(RR)
+               << ", MVT::" << getEnumName(RVT) << ", InFlag);\n";
+            OS << "      Chain  = Result.getValue(1);\n";
+            OS << "      InFlag = Result.getValue(2);\n";
             RetVal = true;
           }
         }






More information about the llvm-commits mailing list