[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

Jim Laskey jlaskey at apple.com
Fri Sep 30 17:03:19 PDT 2005



Changes in directory llvm/lib/CodeGen/SelectionDAG:

ScheduleDAG.cpp updated: 1.26 -> 1.27
---
Log message:

1. Simplify the gathering of node groups.

2. Printing node groups when displaying nodes.


---
Diffs of the changes:  (+22 -54)

 ScheduleDAG.cpp |   76 ++++++++++++++++----------------------------------------
 1 files changed, 22 insertions(+), 54 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.26 llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.27
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.26	Fri Sep 30 14:15:27 2005
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp	Fri Sep 30 19:03:07 2005
@@ -448,56 +448,8 @@
 };
 //===----------------------------------------------------------------------===//
 
-
-//===----------------------------------------------------------------------===//
-class FlagUserIterator {
-private:
-  SDNode               *Definer;        // Node defining flag
-  SDNode::use_iterator UI;              // User node iterator
-  SDNode::use_iterator E;               // End of user nodes
-  unsigned             MinRes;          // Minimum flag result
-
-public:
-  // Ctor.
-  FlagUserIterator(SDNode *D)
-  : Definer(D)
-  , UI(D->use_begin())
-  , E(D->use_end())
-  , MinRes(D->getNumValues()) {
-    // Find minimum flag result.
-    while (MinRes && D->getValueType(MinRes - 1) == MVT::Flag) --MinRes;
-  }
-  
-  /// isFlagUser - Return true if  node uses definer's flag.
-  bool isFlagUser(SDNode *U) {
-    // For each operand (in reverse to only look at flags)
-    for (unsigned N = U->getNumOperands(); 0 < N--;) {
-      // Get operand
-      SDOperand Op = U->getOperand(N);
-      // Not user if there are no flags
-      if (Op.getValueType() != MVT::Flag) return false;
-      // Return true if it is one of the flag results 
-      if (Op.Val == Definer && Op.ResNo >= MinRes) return true;
-    }
-    // Not a flag user
-    return false;
-  }
-  
-  SDNode *next() {
-    // Continue to next user
-    while (UI != E) {
-      // Next user node
-      SDNode *User = *UI++;
-      // Return true if is a flag user
-      if (isFlagUser(User)) return User;
-    }
-    
-    // No more user nodes
-    return NULL;
-  }
-};
-
 } // namespace
+
 //===----------------------------------------------------------------------===//
 
 
@@ -749,14 +701,20 @@
     // Sum up all the latencies for max tally size
     NSlots += NI->Latency;
   }
-  
+
   // Put flagged nodes into groups
   for (unsigned i = 0, N = NodeCount; i < N; i++) {
     NodeInfo* NI = &Info[i];
     SDNode *Node = NI->Node;
-    if (isFlagDefiner(Node)) {
-      FlagUserIterator FI(Node);
-      while (SDNode *User = FI.next()) NodeGroup::Add(NI, getNI(User));
+
+    // For each operand (in reverse to only look at flags)
+    for (unsigned N = Node->getNumOperands(); 0 < N--;) {
+      // Get operand
+      SDOperand Op = Node->getOperand(N);
+      // No more flags to walk
+      if (Op.getValueType() != MVT::Flag) break;
+      // Add do node group
+      NodeGroup::Add(getNI(Op.Val), NI);
     }
   }
 }
@@ -1293,8 +1251,18 @@
   using namespace std;
   O << "Ordering\n";
   for (unsigned i = 0, N = Ordering.size(); i < N; i++) {
-    printSI(O, Ordering[i]);
+    NodeInfo *NI = Ordering[i];
+    printSI(O, NI);
     O << "\n";
+    if (NI->isGroupLeader()) {
+      NodeGroup *Group = NI->Group;
+      for (NIIterator NII = Group->begin(), E = Group->end();
+           NII != E; NII++) {
+        O << "    ";
+        printSI(O, *NII);
+        O << "\n";
+      }
+    }
   }
 #endif
 }






More information about the llvm-commits mailing list