mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 07:24:47 +00:00
1. Simplify the gathering of node groups.
2. Printing node groups when displaying nodes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23573 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -448,56 +448,8 @@ private:
|
|||||||
};
|
};
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
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
|
} // namespace
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
@@ -754,9 +706,15 @@ void SimpleSched::GatherNodeInfo() {
|
|||||||
for (unsigned i = 0, N = NodeCount; i < N; i++) {
|
for (unsigned i = 0, N = NodeCount; i < N; i++) {
|
||||||
NodeInfo* NI = &Info[i];
|
NodeInfo* NI = &Info[i];
|
||||||
SDNode *Node = NI->Node;
|
SDNode *Node = NI->Node;
|
||||||
if (isFlagDefiner(Node)) {
|
|
||||||
FlagUserIterator FI(Node);
|
// For each operand (in reverse to only look at flags)
|
||||||
while (SDNode *User = FI.next()) NodeGroup::Add(NI, getNI(User));
|
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 @@ void SimpleSched::print(std::ostream &O) const {
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
O << "Ordering\n";
|
O << "Ordering\n";
|
||||||
for (unsigned i = 0, N = Ordering.size(); i < N; i++) {
|
for (unsigned i = 0, N = Ordering.size(); i < N; i++) {
|
||||||
printSI(O, Ordering[i]);
|
NodeInfo *NI = Ordering[i];
|
||||||
|
printSI(O, NI);
|
||||||
O << "\n";
|
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
|
#endif
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user