Added isPredecessor.

llvm-svn: 31409
This commit is contained in:
Evan Cheng 2006-11-03 03:05:24 +00:00
parent 299022d514
commit c176f038b9
1 changed files with 23 additions and 0 deletions

View File

@ -2563,6 +2563,29 @@ bool SDNode::isOperand(SDNode *N) const {
return false; return false;
} }
static void findPredecessor(SDNode *N, const SDNode *P, bool &found,
std::set<SDNode *> &Visited) {
if (found || !Visited.insert(N).second)
return;
for (unsigned i = 0, e = N->getNumOperands(); !found && i != e; ++i) {
SDNode *Op = N->getOperand(i).Val;
if (Op == P) {
found = true;
return;
}
findPredecessor(Op, P, found, Visited);
}
}
// isPredecessor - Return true if this node is a predecessor of N.
bool SDNode::isPredecessor(SDNode *N) const {
std::set<SDNode *> Visited;
bool found = false;
findPredecessor(N, this, found, Visited);
return found;
}
uint64_t SDNode::getConstantOperandVal(unsigned Num) const { uint64_t SDNode::getConstantOperandVal(unsigned Num) const {
assert(Num < NumOperands && "Invalid child # of SDNode!"); assert(Num < NumOperands && "Invalid child # of SDNode!");
return cast<ConstantSDNode>(OperandList[Num])->getValue(); return cast<ConstantSDNode>(OperandList[Num])->getValue();