blob: 6806d1c563868bb952733439819cefea587eb9a1 [file] [log] [blame]
Ruchira Sasanka683847f2001-07-24 17:14:13 +00001
2#include "llvm/Analysis/LiveVar/ValueSet.h"
Chris Lattnere9bb2df2001-12-03 22:26:30 +00003#include "llvm/ConstantVals.h"
Ruchira Sasanka683847f2001-07-24 17:14:13 +00004
5
6void printValue( const Value *const v) // func to print a Value
7{
Ruchira Sasankae27c3442001-08-20 21:12:49 +00008
Chris Lattner634b3522001-10-15 18:30:06 +00009 if (v->hasName())
10 cerr << v << "(" << ((*v).getName()) << ") ";
Chris Lattnere9bb2df2001-12-03 22:26:30 +000011 else if (Constant *C = dyn_cast<Constant>(v))
12 cerr << v << "(" << C->getStrValue() << ") ";
Ruchira Sasankae27c3442001-08-20 21:12:49 +000013 else
Chris Lattner634b3522001-10-15 18:30:06 +000014 cerr << v << " ";
Ruchira Sasanka683847f2001-07-24 17:14:13 +000015}
16
17
18//---------------- Method implementations --------------------------
19
20
21ValueSet:: ValueSet() : hash_set<const Value *, hashFuncValue> () { }
22
Ruchira Sasankae27c3442001-08-20 21:12:49 +000023 // for performing two set unions
Ruchira Sasanka683847f2001-07-24 17:14:13 +000024bool ValueSet::setUnion( const ValueSet *const set1) {
25 const_iterator set1it;
26 pair<iterator, bool> result;
27 bool changed = false;
28
29 for( set1it = set1->begin() ; set1it != set1->end(); set1it++) {
Ruchira Sasankae27c3442001-08-20 21:12:49 +000030 // for all all elements in set1
31 result = insert( *set1it ); // insert to this set
Ruchira Sasanka683847f2001-07-24 17:14:13 +000032 if( result.second == true) changed = true;
33 }
34
35 return changed;
36}
37
38
Ruchira Sasankae27c3442001-08-20 21:12:49 +000039 // for performing set difference
Ruchira Sasanka683847f2001-07-24 17:14:13 +000040void ValueSet::setDifference( const ValueSet *const set1,
41 const ValueSet *const set2) {
42
43 const_iterator set1it, set2it;
44 for( set1it = set1->begin() ; set1it != set1->end(); set1it++) {
45 // for all elements in set1
46 iterator set2it = set2->find( *set1it ); // find wether the elem is in set2
47 if( set2it == set2->end() ) // if the element is not in set2
48 insert( *set1it ); // insert to this set
49 }
50}
51
52
Ruchira Sasankae27c3442001-08-20 21:12:49 +000053 // for performing set subtraction
Ruchira Sasanka683847f2001-07-24 17:14:13 +000054void ValueSet::setSubtract( const ValueSet *const set1) {
55 const_iterator set1it;
56 for( set1it = set1->begin() ; set1it != set1->end(); set1it++)
57 // for all elements in set1
58 erase( *set1it ); // erase that element from this set
59}
60
61
62
63
Ruchira Sasankae27c3442001-08-20 21:12:49 +000064void ValueSet::printSet() const { // for printing a live variable set
Ruchira Sasanka683847f2001-07-24 17:14:13 +000065 const_iterator it;
66 for( it = begin() ; it != end(); it++)
67 printValue( *it );
68}