2001-07-24 17:14:13 +00:00
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
|
|
|
|
|
2001-07-24 17:14:13 +00:00
|
|
|
#include "llvm/Analysis/LiveVar/ValueSet.h"
|
2001-12-03 22:26:30 +00:00
|
|
|
#include "llvm/ConstantVals.h"
|
2002-01-20 22:54:45 +00:00
|
|
|
#include <iostream>
|
2001-07-24 17:14:13 +00:00
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
ostream &operator<<(ostream &O, RAV V) { // func to print a Value
|
|
|
|
const Value *v = V.V;
|
2001-10-15 18:30:06 +00:00
|
|
|
if (v->hasName())
|
2002-02-05 01:43:49 +00:00
|
|
|
return O << v << "(" << v->getName() << ") ";
|
2001-12-03 22:26:30 +00:00
|
|
|
else if (Constant *C = dyn_cast<Constant>(v))
|
2002-02-05 01:43:49 +00:00
|
|
|
return O << v << "(" << C->getStrValue() << ") ";
|
2001-08-20 21:12:49 +00:00
|
|
|
else
|
2002-02-05 01:43:49 +00:00
|
|
|
return O << v << " ";
|
2001-07-24 17:14:13 +00:00
|
|
|
}
|
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
bool ValueSet::setUnion( const ValueSet *S) {
|
|
|
|
bool Changed = false;
|
2001-07-24 17:14:13 +00:00
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
for (const_iterator SI = S->begin(), SE = S->end(); SI != SE; ++SI)
|
|
|
|
if (insert(*SI).second)
|
|
|
|
Changed = true;
|
2001-07-24 17:14:13 +00:00
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
return Changed;
|
2001-07-24 17:14:13 +00:00
|
|
|
}
|
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
void ValueSet::setDifference(const ValueSet *S1, const ValueSet *S2) {
|
|
|
|
for (const_iterator SI = S1->begin(), SE = S1->end() ; SI != SE; ++SI)
|
|
|
|
if (S2->find(*SI) == S2->end()) // if the element is not in set2
|
|
|
|
insert(*SI);
|
2001-07-24 17:14:13 +00:00
|
|
|
}
|
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
void ValueSet::setSubtract(const ValueSet *S) {
|
|
|
|
for (const_iterator SI = S->begin() ; SI != S->end(); ++SI)
|
|
|
|
erase(*SI);
|
2001-07-24 17:14:13 +00:00
|
|
|
}
|
|
|
|
|
2002-02-05 01:43:49 +00:00
|
|
|
void ValueSet::printSet() const {
|
|
|
|
for (const_iterator I = begin(), E = end(); I != E; ++I)
|
|
|
|
std::cerr << RAV(*I);
|
2001-07-24 17:14:13 +00:00
|
|
|
}
|