[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