Match tblgen changes; clean up.
authorEvan Cheng <evan.cheng@apple.com>
Sat, 26 Aug 2006 01:05:16 +0000 (01:05 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 26 Aug 2006 01:05:16 +0000 (01:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29894 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelDAGToDAG.cpp

index 442fa8d4cf06a0558a3bcfd7a35b65f0edae12e4..abe76271a9553706bf5798c5aa8a32b0b8df8787 100644 (file)
@@ -134,13 +134,6 @@ namespace {
                      SDOperand &Base, SDOperand &Scale,
                      SDOperand &Index, SDOperand &Disp);
 
-    virtual void SelectRootInit() {
-      DAGSize = CurDAG->AssignTopologicalOrder(TopOrder);
-      unsigned NumBytes = (DAGSize + 7) / 8;
-      UnfoldableSet = new unsigned char[NumBytes];
-      memset(UnfoldableSet, 0, NumBytes);
-    }
-
     /// SelectInlineAsmMemoryOperand - Implement addressing mode selection for
     /// inline asm expressions.
     virtual bool SelectInlineAsmMemoryOperand(const SDOperand &Op,
@@ -185,21 +178,6 @@ namespace {
     /// base register.  Return the virtual register that holds this value.
     SDOperand getGlobalBaseReg();
 
-    /// UnfoldableSet - An boolean array representing nodes which have been
-    /// folded into addressing modes and therefore should not be folded in
-    /// another operation.
-    unsigned char *UnfoldableSet;
-
-    inline void setUnfoldable(SDNode *N) {
-      unsigned Id = N->getNodeId();
-      UnfoldableSet[Id / 8] |= 1 << (Id % 8);
-    }
-
-    inline bool isUnfoldable(SDNode *N) {
-      unsigned Id = N->getNodeId();
-      return UnfoldableSet[Id / 8] & (1 << (Id % 8));
-    }
-
 #ifndef NDEBUG
     unsigned Indent;
 #endif
@@ -239,10 +217,6 @@ static inline bool isNonImmUse(SDNode* Use, SDNode* Def) {
 
 
 bool X86DAGToDAGISel::CanBeFoldedBy(SDNode *N, SDNode *U) {
-  // Is it already folded by SelectAddr / SelectLEAAddr?
-  if (isUnfoldable(N))
-    return false;
-
   // If U use can somehow reach N through another path then U can't fold N or
   // it will create a cycle. e.g. In the following diagram, U can reach N
   // through X. If N is folded into into U, then X is both a predecessor and
@@ -274,7 +248,6 @@ void X86DAGToDAGISel::InstructionSelectBasicBlock(SelectionDAG &DAG) {
   DEBUG(std::cerr << "===== Instruction selection ends:\n");
 #endif
 
-  UnfoldableSet = NULL;
   DAG.RemoveDeadNodes();
 
   // Emit machine code to BB. 
@@ -539,14 +512,6 @@ bool X86DAGToDAGISel::SelectAddr(SDOperand N, SDOperand &Base, SDOperand &Scale,
     AM.IndexReg = CurDAG->getRegister(0, MVT::i32);
 
   getAddressOperands(AM, Base, Scale, Index, Disp);
-
-  int Id = Base.Val ? Base.Val->getNodeId() : -1;
-  if (Id != -1)
-    setUnfoldable(Base.Val);
-  Id = Index.Val ? Index.Val->getNodeId() : -1;
-  if (Id != -1)
-    setUnfoldable(Index.Val);
-
   return true;
 }
 
@@ -594,14 +559,6 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base,
     getAddressOperands(AM, Base, Scale, Index, Disp);
     return true;
   }
-
-  int Id = Base.Val ? Base.Val->getNodeId() : -1;
-  if (Id != -1)
-    setUnfoldable(Base.Val);
-  Id = Index.Val ? Index.Val->getNodeId() : -1;
-  if (Id != -1)
-    setUnfoldable(Index.Val);
-
   return false;
 }
 
@@ -702,15 +659,8 @@ SDNode *X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
                                             CP->getOffset()+Offset);
         }
 
-        if (C.Val) {
-          if (N.Val->hasOneUse()) {
-            return CurDAG->SelectNodeTo(N.Val, X86::MOV32ri, MVT::i32, C).Val;
-          } else {
-            SDNode *ResNode = CurDAG->getTargetNode(X86::MOV32ri, MVT::i32, C);
-            Result = SDOperand(ResNode, 0);
-           return ResNode;
-          }
-        }
+        if (C.Val)
+          return CurDAG->SelectNodeTo(N.Val, X86::MOV32ri, MVT::i32, C).Val;
       }
 
       // Other cases are handled by auto-generated code.
@@ -758,29 +708,30 @@ SDNode *X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
       }
 
       SDOperand Chain;
-      if (foldedLoad)
-        AddToQueue(Chain, N1.getOperand(0));
-      else
+      if (foldedLoad) {
+        Chain = N1.getOperand(0);
+        AddToISelQueue(Chain);
+      } else
         Chain = CurDAG->getEntryNode();
 
       SDOperand InFlag(0, 0);
-      AddToQueue(N0, N0);
+      AddToISelQueue(N0);
       Chain  = CurDAG->getCopyToReg(Chain, CurDAG->getRegister(LoReg, NVT),
                                     N0, InFlag);
       InFlag = Chain.getValue(1);
 
       if (foldedLoad) {
-        AddToQueue(Tmp0, Tmp0);
-        AddToQueue(Tmp1, Tmp1);
-        AddToQueue(Tmp2, Tmp2);
-        AddToQueue(Tmp3, Tmp3);
+        AddToISelQueue(Tmp0);
+        AddToISelQueue(Tmp1);
+        AddToISelQueue(Tmp2);
+        AddToISelQueue(Tmp3);
         SDNode *CNode =
           CurDAG->getTargetNode(MOpc, MVT::Other, MVT::Flag, Tmp0, Tmp1,
                                 Tmp2, Tmp3, Chain, InFlag);
         Chain  = SDOperand(CNode, 0);
         InFlag = SDOperand(CNode, 1);
       } else {
-        AddToQueue(N1, N1);
+        AddToISelQueue(N1);
         InFlag =
           SDOperand(CurDAG->getTargetNode(Opc, MVT::Flag, N1, InFlag), 0);
       }
@@ -849,13 +800,14 @@ SDNode *X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
       SDOperand Tmp0, Tmp1, Tmp2, Tmp3;
       foldedLoad = TryFoldLoad(N, N1, Tmp0, Tmp1, Tmp2, Tmp3);
       SDOperand Chain;
-      if (foldedLoad)
-        AddToQueue(Chain, N1.getOperand(0));
-      else
+      if (foldedLoad) {
+        Chain = N1.getOperand(0);
+        AddToISelQueue(Chain);
+      } else
         Chain = CurDAG->getEntryNode();
 
       SDOperand InFlag(0, 0);
-      AddToQueue(N0, N0);
+      AddToISelQueue(N0);
       Chain  = CurDAG->getCopyToReg(Chain, CurDAG->getRegister(LoReg, NVT),
                                     N0, InFlag);
       InFlag = Chain.getValue(1);
@@ -873,17 +825,17 @@ SDNode *X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
       }
 
       if (foldedLoad) {
-        AddToQueue(Tmp0, Tmp0);
-        AddToQueue(Tmp1, Tmp1);
-        AddToQueue(Tmp2, Tmp2);
-        AddToQueue(Tmp3, Tmp3);
+        AddToISelQueue(Tmp0);
+        AddToISelQueue(Tmp1);
+        AddToISelQueue(Tmp2);
+        AddToISelQueue(Tmp3);
         SDNode *CNode =
           CurDAG->getTargetNode(MOpc, MVT::Other, MVT::Flag, Tmp0, Tmp1,
                                 Tmp2, Tmp3, Chain, InFlag);
         Chain  = SDOperand(CNode, 0);
         InFlag = SDOperand(CNode, 1);
       } else {
-        AddToQueue(N1, N1);
+        AddToISelQueue(N1);
         InFlag =
           SDOperand(CurDAG->getTargetNode(Opc, MVT::Flag, N1, InFlag), 0);
       }
@@ -923,10 +875,10 @@ SDNode *X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
           break;
         }
 
-        SDOperand Tmp0, Tmp1;
-        AddToQueue(Tmp0, Node->getOperand(0));
-        Tmp1 = SDOperand(CurDAG->getTargetNode(Opc, VT, Tmp0), 0);
-        Result = SDOperand(CurDAG->getTargetNode(Opc2, NVT, Tmp1), 0);
+        AddToISelQueue(Node->getOperand(0));
+        SDOperand Tmp =
+          SDOperand(CurDAG->getTargetNode(Opc, VT, Node->getOperand(0)), 0);
+        Result = SDOperand(CurDAG->getTargetNode(Opc2, NVT, Tmp), 0);
       
 #ifndef NDEBUG
         DEBUG(std::cerr << std::string(Indent-2, ' '));
@@ -969,11 +921,14 @@ SelectInlineAsmMemoryOperand(const SDOperand &Op, char ConstraintCode,
     break;
   }
   
-  OutOps.resize(4);
-  AddToQueue(OutOps[0], Op0);
-  AddToQueue(OutOps[1], Op1);
-  AddToQueue(OutOps[2], Op2);
-  AddToQueue(OutOps[3], Op3);
+  OutOps.push_back(Op0);
+  OutOps.push_back(Op1);
+  OutOps.push_back(Op2);
+  OutOps.push_back(Op3);
+  AddToISelQueue(Op0);
+  AddToISelQueue(Op1);
+  AddToISelQueue(Op2);
+  AddToISelQueue(Op3);
   return false;
 }